استخدام ميزة "فحص التطبيقات" لتأمين حزمة تطوير البرامج للتنقّل على أجهزة iOS
توفر ميزة فحص التطبيقات من Firebase الحماية للمكالمات من تطبيقك إلى منصة خرائط Google من خلال حظر الزيارات الواردة من مصادر أخرى غير تطبيقاتك المشروعة. ويتم ذلك من خلال طلب تقييم لمصداقية التطبيق أو الجهاز من مقدّم شهادة مصداقية، مثل App Attest. عند دمج تطبيقك مع ميزة "فحص التطبيقات"، يمكنك إضافة حماية من الطلبات الضارة وغير المصرّح بها، ما يحمي بدوره فواتيرك من الرسوم غير المصرّح بها. تحسّن ميزة "فحص التطبيقات" أيضًا بشكلٍ كبير الإبلاغ عن حالات الانقطاع في الوقت الفعلي في منظومة تطبيقات أسطولك، ما يعود بالفائدة على جميع السائقين الذين يستخدمون تطبيقك. لمزيد من المعلومات، يُرجى الاطّلاع على مقالة الإبلاغ عن حالات الانقطاع.
ما أهمية ميزة "فحص التطبيقات"؟
تحمي ميزة "فحص التطبيقات" منطقتَين مختلفتَين من حزمة تطوير البرامج للتنقّل على أجهزة iOS: وظيفة التنقّل الرئيسية والإبلاغ عن حالات الانقطاع.
التنقل
تساعد ميزة "فحص التطبيقات" في حظر الطلبات الرئيسية لحزمة تطوير البرامج للتنقّل على أجهزة iOS من المصادر الضارة أو غير المصرّح بها. ويعود ذلك بالفائدة عليك مباشرةً من خلال حماية مشروعك من الاحتيال عبر الفوترة واستنفاد الحصص.
الإبلاغ عن حالات الانقطاع
يُنصح بشدة باستخدام ميزة "فحص التطبيقات" إذا كان تطبيقك يتيح الإبلاغ عن حالات الانقطاع في الوقت الفعلي وإمكانات التصويت. يضمن تفعيل ميزة "فحص التطبيقات" تزويد السائقين بأكثر الطرق دقةً مع مراعاة جميع الملاحظات في الوقت الفعلي.
أهمية ميزة "فحص التطبيقات" للإبلاغ:
- مستوى الثقة العالي في عمليات الإغلاق: يمكن أن تؤدي الأحداث التي تؤثر في الطريق، مثل إغلاق الطرق، إلى تغيير سلوك التوجيه بشكلٍ كبير لجميع السائقين. لحماية الخريطة من التخريب المحتمل أو الرسائل غير المرغوب فيها أو التقارير غير الدقيقة، تعتمد البنية الأساسية للإشراف من Google على حالات الانقطاع بسبب إغلاق الطرق على إشارات قوية لسلامة الجهاز والتطبيق.
- كيفية تحقّق ميزة "فحص التطبيقات" من صحة البلاغات: تتضمّن بلاغات المستخدمين والأصوات المرسَلة من حزمة تطوير البرامج للتنقّل على أجهزة iOS رمز ميزة "فحص التطبيقات"، الذي يستخدمه نظام Google الخلفي للتحقّق من شرعية الملاحظات، ما يزيد من مستوى الثقة بها ويسمح بتقييمها لمعرفة تأثيرها في خريطة لحركة المرور المباشرة.
- تأثير عدم استخدام ميزة "فحص التطبيقات": يتم تقييم التقارير المُرسَلة بدون رمز صالح لميزة "فحص التطبيقات" بموجب نموذج أقل ثقةً وقد تتم معالجتها كإشارات صامتة فقط. يعني ذلك أنّه على الرغم من أنّه لا يزال بإمكان المستخدمين الإبلاغ والتصويت، من غير المرجّح أن تظهر تقاريرهم على الخريطة أو أن تؤثر في طرق السائقين الآخرين، وستتطلّب عملية تحقّق إضافية.
هل ميزة "فحص التطبيقات" مناسبة لي؟
يُنصح باستخدام ميزة "فحص التطبيقات" في معظم الحالات، ولكنّها ليست ضرورية أو غير متاحة في السيناريوهات التالية:
- التطبيقات الخاصة أو التجريبية: إذا لم يكن تطبيقك متاحًا للعلن، لن تحتاج إلى ميزة "فحص التطبيقات".
- الأجهزة المخترَقة: تمنع الجهات المقدّمة لشهادات المصداقية التي ننصح بها حزمة تطوير البرامج للتنقّل على أجهزة iOS من العمل على الأجهزة غير الموثوق بها، مثل الهواتف التي تم الحصول على إذن الوصول إلى الجذر فيها أو التي تمت إزالة جميع القيود عنها. لدعم هذه الأجهزة، يمكنك نشر مقدّم شهادة مصداقية مخصّص.
نظرة عامة على خطوات التنفيذ
على مستوى عالٍ، عليك اتّباع الخطوات التالية لدمج تطبيقك مع ميزة "فحص التطبيقات":
- أضِف Firebase إلى تطبيقك.
- أضِف مكتبة ميزة "فحص التطبيقات" وفعِّل الميزة.
- أضِف مقدّم رمز مميّز. تستدعي هذه الخطوة مقدّم شهادة المصداقية الذي تختاره للتحقّق من سلامة الجهاز أو التطبيق.
- فعِّل واجهات برمجة التطبيقات للتنقّل وميزة "فحص التطبيقات".
- فعِّل تصحيح الأخطاء. يكون ذلك مفيدًا أثناء التطوير أو في بيئات التكامل المستمر (CI).
- راقِب طلبات تطبيقك قبل تفعيل ميزة "فرض الحماية". بهذه الطريقة، يمكنك فرض ميزة "فحص التطبيقات" بسلاسة بدون إيقاف وصول المستخدمين.
اعتبارات عند التخطيط لعملية دمج ميزة "فحص التطبيقات"
- حصص مقدّم شهادة المصداقية: تخضع الجهات المقدّمة لشهادات المصداقية التي ننصح بها، مثل DeviceCheck أو App Attest، لـ الحصص والقيود التي تفرضها Apple.
- وقت بدء التشغيل: في معظم الحالات، لن يواجه المستخدمون وقتًا طويلاً لبدء التشغيل أثناء الاستخدام العادي، لأنّه يتم تخزين الرموز المميّزة لميزة "فحص التطبيقات" مؤقتًا على الجهاز. يُعيد النظام تلقائيًا تحميل الرموز المميّزة لميزة "فحص التطبيقات" في الخلفية قبل انتهاء صلاحيتها للحفاظ على الأداء السلس. ومع ذلك، إذا لم يكن هناك رمز مميّز صالح لميزة "فحص التطبيقات"، سيواجه مستخدمو تطبيقك بعض وقت بدء التشغيل. على سبيل المثال، يحدث وقت بدء التشغيل هذا أثناء عمليات بدء التشغيل البارد عندما تنتهي صلاحية رمز مميّز مخزّن مؤقتًا أو يكون غير متوفّر.
- مدة بقاء الرمز المميّز: تحدّد مدة البقاء (TTL) المدة الزمنية التي يكون فيها الرمز المميّز لميزة "فحص التطبيقات" صالحًا قبل الحاجة إلى إعادة تحميله. يمكنك ضبط هذه المدة من 30 دقيقة إلى 7 أيام في وحدة تحكُّم Firebase. يُنصح بضبط المدة على ساعة واحدة كحد أساسي آمن، ولكن تحاول حزمة تطوير البرامج (SDK) تلقائيًا إعادة التحميل في الخلفية بعد نصف مدة البقاء تقريبًا. للحصول على تعليمات مفصّلة حول وحدة التحكّم، يُرجى الاطّلاع على مستندات ميزة "فحص التطبيقات" من Firebase.
دمج تطبيقك مع ميزة "فحص التطبيقات"
المتطلبات الأساسية
- تطبيق مثبّت عليه الإصدار 11.0 أو إصدار أحدث من حزمة تطوير البرامج للتنقّل على أجهزة iOS
- رقم تعريف حزمة التطبيق .
- رقم تعريف فريقك من علامة التبويب "الاشتراك" في Apple Developer console
- إذا كنت تخطط لاستخدام DeviceCheck، يجب توفُّر ملف المفتاح الخاص ورقم تعريف المفتاح ورقم تعريف المفتاح.
- يجب أن تكون مالك التطبيق في Google Cloud console.
- رقم تعريف مشروع تطبيقك من Google Cloud console
الخطوة 1: إضافة Firebase إلى تطبيقك
اتّبِع التعليمات الواردة في مستندات المطوّرين في Firebase لإضافة Firebase إلى تطبيقك. أضِف ملفك GoogleService-Info.plist بدون تعديل إلى المستوى الجذر لمشروعك.
في ملف AppDelegate، استورِد الوحدات التالية:
Swift
import FirebaseCore import FirebaseAppCheck import GoogleNavigation
Objective-C
@import FirebaseCore; @import FirebaseAppCheck; @import GoogleNavigation;
الخطوة 2: إضافة مكتبة ميزة "فحص التطبيقات" وتفعيل الميزة
تقدّم Firebase تعليمات لكل مقدّم شهادة مصداقية تلقائي. توضّح لك هذه التعليمات كيفية إعداد مشروع Firebase وإضافة مكتبة ميزة "فحص التطبيقات" إلى تطبيقك. اتّبِع عينات التعليمات البرمجية المقدَّمة لتفعيل ميزة "فحص التطبيقات".
- اتّبِع تعليمات Firebase لإضافة مكتبة ميزة "فحص التطبيقات":
- فعِّل ميزة "فحص التطبيقات" في
AppDelegate:- إذا كنت تستخدم App Attest، أنشئ عملية تنفيذ لـ
AppCheckProviderFactoryوسجِّلها قبل استدعاءFirebaseApp.configure():Swift
class YourAppCheckProviderFactory: NSObject, AppCheckProviderFactory { func createProvider(with app: FirebaseApp) -> AppCheckProvider? { return AppAttestProvider(app: app) } } // In application(_:didFinishLaunchingWithOptions:) let providerFactory = YourAppCheckProviderFactory() AppCheck.setAppCheckProviderFactory(providerFactory) FirebaseApp.configure()
Objective-C
#import <FirebaseCore/FirebaseCore.h> #import <FirebaseAppCheck/FirebaseAppCheck.h> @interface YourAppCheckProviderFactory : NSObject <FIRAppCheckProviderFactory> @end @implementation YourAppCheckProviderFactory - (nullable id<FIRAppCheckProvider>)createProviderWithApp:(FIRApp *)app { return [[FIRAppAttestProvider alloc] initWithApp:app]; } @end // In application:didFinishLaunchingWithOptions: YourAppCheckProviderFactory *providerFactory = [[YourAppCheckProviderFactory alloc] init]; [FIRAppCheck setAppCheckProviderFactory:providerFactory]; [FIRApp configure];
- إذا كنت تستخدم DeviceCheck بدلاً من ذلك، اضبط المصنع باستخدام ما يلي:
Swift
AppCheck.setAppCheckProviderFactory(DeviceCheckProviderFactory())
Objective-C
FIRDeviceCheckProviderFactory *providerFactory = [[FIRDeviceCheckProviderFactory alloc] init]; [FIRAppCheck setAppCheckProviderFactory:providerFactory];
- إذا كنت تستخدم App Attest، أنشئ عملية تنفيذ لـ
الخطوة 3: إضافة مقدّم الرمز المميّز
أنشئ ملفًا باسم AppCheckTokenProvider (أو ملفَين باسمَي AppCheckTokenProvider.h وAppCheckTokenProvider.m إذا كنت تستخدم Objective-C) على المستوى الجذر لتطبيقك.
يجب أن يتوافق هذا الصف مع بروتوكول GMSAppCheckTokenProvider وأن ينفّذ الطريقة fetchAppCheckTokenWithCompletion.
Swift
import Foundation import FirebaseAppCheck import GoogleNavigation class AppCheckTokenProvider: NSObject, GMSAppCheckTokenProvider { func fetchAppCheckToken(completion: @escaping (String?, Error?) -> Void) { AppCheck.appCheck().token(forcingRefresh: false) { token, error in if let error = error { print("App Check Error: \(error)") completion(nil, error) return } guard let token = token else { completion(nil, NSError(domain: "AppCheck", code: -1, userInfo: [NSLocalizedDescriptionKey: "Token is nil"])) return } print("App Check Token: \(token.token)") completion(token.token, nil) } } }
Objective-C
// AppCheckTokenProvider.h #import <Foundation/Foundation.h> #import <GoogleNavigation/GoogleNavigation.h> NS_ASSUME_NONNULL_BEGIN @interface AppCheckTokenProvider : NSObject <GMSAppCheckTokenProvider> @end NS_ASSUME_NONNULL_END
// AppCheckTokenProvider.m #import "AppCheckTokenProvider.h" #import <FirebaseAppCheck/FirebaseAppCheck.h> @implementation AppCheckTokenProvider - (void)fetchAppCheckTokenWithCompletion:(void (^)(NSString * _Nullable token, NSError * _Nullable error))completion { [[FIRAppCheck appCheck] tokenForcingRefresh:NO completion:^(FIRAppCheckToken * _Nullable token, NSError * _Nullable error) { if (token) { completion(token.token, nil); } else { completion(nil, error); } }]; } @end
الخطوة 4: إعداد واجهات برمجة التطبيقات للتنقّل وميزة "فحص التطبيقات"
فعِّل حزمة تطوير البرامج للتنقّل على أجهزة iOS وسجِّل مثيل مقدّم الرمز المميّز على GMSServices:
Swift
// In application(_:didFinishLaunchingWithOptions:) GMSServices.provideAPIKey("YOUR_API_KEY") // Register your App Check token provider before initializing Navigation SDK for iOS GMSServices.appCheckTokenProvider = AppCheckTokenProvider()
Objective-C
// In application:didFinishLaunchingWithOptions: [GMSServices provideAPIKey:@"YOUR_API_KEY"]; // Register your App Check token provider before initializing Navigation SDK for iOS GMSServices.appCheckTokenProvider = [[AppCheckTokenProvider alloc] init];
الخطوة 5: تفعيل تصحيح الأخطاء (اختياري)
بعد فرض ميزة "فحص التطبيقات" على حزمة تطوير البرامج للتنقّل على أجهزة iOS، لن تعمل ميزات تطبيقك التي تعتمد على حزمة تطوير البرامج للتنقّل على أجهزة iOS في محاكي أو من بيئة تكامل مستمر (CI)، لأنّ هذه البيئات لا تُعد أجهزة صالحة. لتشغيل تطبيقك في هذه البيئات أثناء التطوير والاختبار، عليك إنشاء إصدار مخصص لتصحيح الأخطاء من تطبيقك يستخدم مقدّم خدمة تصحيح الأخطاء لميزة "فحص التطبيقات" بدلاً من مقدّم شهادة مصداقية للإصدار العلني.
- اضبط مصنع مقدّم خدمة تصحيح الأخطاء في
AppDelegate:Swift
#if targetEnvironment(simulator) let providerFactory = AppCheckDebugProviderFactory() #else let providerFactory = YourAppCheckProviderFactory() #endif AppCheck.setAppCheckProviderFactory(providerFactory)
Objective-C
#if TARGET_OS_SIMULATOR id<FIRAppCheckProviderFactory> providerFactory = [[FIRAppCheckDebugProviderFactory alloc] init]; #else id<FIRAppCheckProviderFactory> providerFactory = [[YourAppCheckProviderFactory alloc] init]; #endif [FIRAppCheck setAppCheckProviderFactory:providerFactory];
- فعِّل التسجيل في مشروع Xcode، وشغِّل التطبيق، وحدِّد موقع رمز تصحيح الأخطاء المحلي في سجلّ وحدة التحكّم.
- انسخ رمز تصحيح الأخطاء هذا وأضِفه إلى وحدة تحكُّم Firebase. لمزيد من التفاصيل، يُرجى الاطّلاع على مستندات مقدّم تصحيح الأخطاء لميزة "فحص التطبيقات" من Firebase.
الخطوة 6: مراقبة طلبات تطبيقك وتحديد ما إذا كنت تريد فرض الحماية
قبل تفعيل ميزة "فرض الحماية"، راقِب طلبات تطبيقك للتأكّد من أنّك لن توقف وصول المستخدمين الشرعيين.
- انتقِل إلى شاشة مقاييس ميزة "فحص التطبيقات" في وحدة تحكُّم Firebase للاطّلاع على النسبة المئوية للزيارات التي تم التحقّق منها مقابل الزيارات التي لم يتم التحقّق منها.
- بعد التأكّد من أنّ معظم الزيارات تم التحقّق منها وأنّ المستخدمين الشرعيين قد عدّلوا إلى إصدار من تطبيقك يحتوي على عملية تنفيذ ميزة "فحص التطبيقات"، فعِّل ميزة "فرض الحماية".
- بعد تفعيل ميزة "فرض الحماية"، سترفض ميزة "فحص التطبيقات" جميع الزيارات بدون رمز مميّز صالح لميزة "فحص التطبيقات".