استخدام ميزة "فحص التطبيقات" لتأمين حزمة تطوير البرامج للتنقّل على أجهزة iOS
توفر ميزة "فحص التطبيقات" من Firebase الحماية للمكالمات من تطبيقك إلى "منصة خرائط Google" من خلال حظر الزيارات الواردة من مصادر أخرى غير تطبيقاتك المشروعة. ويتم ذلك من خلال طلب تقييم لمصداقية التطبيق أو الجهاز من موفّر شهادات إثبات الهوية، مثل App Attest. عند دمج تطبيقك مع ميزة "فحص التطبيقات"، يمكنك إضافة حماية من الطلبات الضارة وغير المصرّح بها، ما يحمي بدوره فاتورتك من الرسوم غير المصرّح بها. تحسّن ميزة "فحص التطبيقات" أيضًا بشكلٍ كبير إمكانية الإبلاغ عن حالات التعطّل في الوقت الفعلي في منظومة تطبيقات أسطولك، ما يفيد جميع السائقين الذين يستخدمون تطبيقك. لمزيد من المعلومات، يُرجى الاطّلاع على الإبلاغ عن حالات التعطّل.
ما أهمية ميزة "فحص التطبيقات"؟
تحمي ميزة "فحص التطبيقات" منطقتَين مختلفتَين من حزمة تطوير البرامج للتنقّل على أجهزة iOS: وظيفة التنقّل الرئيسية والإبلاغ عن حالات التعطّل.
التنقل
تساعد ميزة "فحص التطبيقات" في حظر الطلبات الرئيسية من حزمة تطوير البرامج للتنقّل على أجهزة iOS الواردة من مصادر ضارة أو غير مصرّح بها. ويفيدك ذلك بشكلٍ مباشر من خلال حماية مشروعك من الاحتيال في الفواتير واستنفاد الحصة.
الإبلاغ عن حالات التعطّل
يُنصح بشدة باستخدام ميزة "فحص التطبيقات" إذا كان تطبيقك يتيح الإبلاغ عن حالات التعطّل في الوقت الفعلي وإمكانية التصويت. يضمن تفعيل ميزة "فحص التطبيقات" تزويد السائقين بأكثر الطرق دقةً مع مراعاة جميع الملاحظات الفورية.
أهمية ميزة "فحص التطبيقات" في الإبلاغ:
- معيار الثقة العالي لعمليات الإغلاق: يمكن أن تؤدي الأحداث التي تؤثر في الطريق، مثل عمليات إغلاق الطرق، إلى تغيير سلوك التوجيه بشكلٍ كبير لجميع السائقين. لحماية الخريطة من التخريب المحتمل أو الرسائل غير المرغوب فيها أو التقارير غير الدقيقة، تعتمد البنية الأساسية للإشراف من Google على حالات التعطّل الناتجة عن إغلاق الطرق على إشارات قوية تشير إلى سلامة الجهاز والتطبيق.
- كيفية تحقّق ميزة "فحص التطبيقات" من صحة التقارير: تتضمّن تقارير المستخدمين وأصواتهم المرسَلة من حزمة تطوير البرامج للتنقّل على أجهزة iOS رمز ميزة "فحص التطبيقات"، الذي يستخدمه نظام Google الخلفي للتحقّق من شرعية الملاحظات، ما يزيد من مستوى الثقة بها ويسمح بتقييمها لمعرفة تأثيرها في الخريطة المباشرة.
- تأثير عدم استخدام ميزة "فحص التطبيقات": يتم تقييم التقارير المرسَلة بدون رمز صالح لميزة "فحص التطبيقات" بموجب نموذج ثقة أقل، وقد تتم معالجتها كإشارات صامتة فقط. يعني ذلك أنّه على الرغم من أنّه لا يزال بإمكان المستخدمين الإبلاغ والتصويت، من غير المرجّح أن تظهر تقاريرهم على الخريطة أو أن تؤثر في طرق السائقين الآخرين، وستتطلّب عملية تحقّق إضافية.
هل ميزة "فحص التطبيقات" مناسبة لي؟
يُنصح باستخدام ميزة "فحص التطبيقات" في معظم الحالات، ولكن لا تكون هذه الميزة ضرورية أو غير متاحة في السيناريوهات التالية:
- التطبيقات الخاصة أو التجريبية: إذا لم يكن تطبيقك متاحًا للجميع، لن تحتاج إلى ميزة "فحص التطبيقات".
- الأجهزة المخترَقة: تمنع موفّرو شهادات إثبات الهوية المقترَحون حزمة تطوير البرامج للتنقّل على أجهزة iOS من التشغيل على الأجهزة غير الموثوق بها، مثل الهواتف التي تم الوصول إلى جذرها أو التي تمت إزالة جميع القيود عنها. لدعم هذه الأجهزة، عليك نشر موفّر شهادات إثبات هوية مخصّص.
نظرة عامة على خطوات التنفيذ
على مستوى عالٍ، عليك اتّباع الخطوات التالية لدمج تطبيقك مع ميزة "فحص التطبيقات":
- أضِف Firebase إلى تطبيقك.
- أضِف مكتبة "فحص التطبيقات" وفعِّل ميزة "فحص التطبيقات".
- أضِف موفّر رموز مميزة. تستدعي هذه الخطوة موفّر شهادات إثبات الهوية الذي تختاره للتحقّق من سلامة الجهاز أو التطبيق.
- فعِّل واجهات برمجة التطبيقات للتنقّل و"فحص التطبيقات".
- فعِّل تصحيح الأخطاء. يكون ذلك مفيدًا أثناء التطوير أو في بيئات التكامل المستمر.
- تتبَّع طلبات تطبيقك قبل تفعيل ميزة "فرض الحماية". بهذه الطريقة، يمكنك فرض ميزة "فحص التطبيقات" بسلاسة بدون إيقاف وصول المستخدمين.
اعتبارات يجب مراعاتها عند التخطيط لعملية دمج ميزة "فحص التطبيقات"
- حصص موفّري شهادات إثبات الهوية: تخضع حصص موفّري شهادات إثبات الهوية المقترَحَين، وهما 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) وسجِّل مثيل موفّر الرموز المميزة من خلال تحويل نوع معالج الخدمات غير الشفاف المشترَك إلى GMSServices:
Swift
// In application(_:didFinishLaunchingWithOptions:) GMSServices.provideAPIKey("YOUR_API_KEY") // Register your App Check token provider before initializing Navigation SDK for iOS if let services = GMSServices.sharedServices() as? GMSServices { services.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 *)[GMSServices sharedServices]).appCheckTokenProvider = [[AppCheckTokenProvider alloc] init];
الخطوة 5: تفعيل تصحيح الأخطاء (اختياري)
بعد فرض ميزة "فحص التطبيقات" على حزمة تطوير البرامج للتنقّل على أجهزة iOS، لن تعمل ميزات تطبيقك التي تعتمد على حزمة تطوير البرامج للتنقّل على أجهزة iOS في محاكي أو من بيئة تكامل مستمر لأنّ هذه البيئات لا تُعد أجهزة صالحة. لتشغيل تطبيقك في هذه البيئات أثناء التطوير والاختبار، عليك إنشاء إصدار مخصص لتصحيح الأخطاء من تطبيقك يستخدم مقدّم خدمة تصحيح الأخطاء لميزة "فحص التطبيقات" بدلاً من موفّر شهادات إثبات الهوية للإصدار العلني.
- اضبط مصنع مقدّم خدمة تصحيح الأخطاء في
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 Console. لمزيد من التفاصيل، يُرجى الاطّلاع على مستندات مقدّم خدمة تصحيح الأخطاء لميزة "فحص التطبيقات" من Firebase.
الخطوة 6: تتبُّع طلبات تطبيقك وتحديد ما إذا كنت تريد فرض الحماية
قبل تفعيل ميزة "فرض الحماية"، تتبَّع طلبات تطبيقك للتأكّد من أنّك لن توقف وصول المستخدمين الشرعيين.
- انتقِل إلى شاشة مقاييس "فحص التطبيقات" في وحدة تحكُّم Firebase للاطّلاع على النسبة المئوية للزيارات التي تم التحقّق منها مقابل الزيارات التي لم يتم التحقّق منها.
- بعد التأكّد من أنّ معظم الزيارات تم التحقّق منها وأنّ المستخدمين الشرعيين قد حدّثوا إلى إصدار من تطبيقك يتضمّن عملية تنفيذ ميزة "فحص التطبيقات"، فعِّل ميزة "فرض الحماية".
- بعد تفعيل ميزة "فرض الحماية"، سترفض ميزة "فحص التطبيقات" جميع الزيارات التي لا تتضمّن رمزًا صالحًا لميزة "فحص التطبيقات".