استخدام فحص التطبيقات لتأمين حزمة تطوير البرامج للتنقّل على أجهزة iOS
توفّر خدمة فحص التطبيقات من Firebase الحماية للمكالمات من تطبيقك إلى "منصة خرائط Google" من خلال حظر الزيارات الواردة من مصادر أخرى غير تطبيقاتك المشروعة. ويتم ذلك من خلال طلب تقييم مدى صحة التطبيق أو الجهاز من مقدّم خدمة إثبات صحة، مثل App Attest. عند دمج تطبيقك مع فحص التطبيقات، يمكنك إضافة حماية ضد الطلبات الضارة وغير المصرَّح بها، ما يؤدي بدوره إلى حماية الفوترة من الرسوم غير المصرَّح بها. تعمل خدمة فحص التطبيقات أيضًا على تحسين إعداد التقارير عن حالات التعطّل في الوقت الفعلي في منظومة تطبيقات أسطولك، ما يعود بالفائدة على جميع السائقين الذين يستخدمون تطبيقك. لمزيد من المعلومات، اطّلِع على إعداد التقارير عن حالات التعطّل.
لماذا يجب استخدام فحص التطبيقات؟
تحمي خدمة فحص التطبيقات منطقتَين مختلفتَين من حزمة تطوير البرامج للتنقّل على أجهزة iOS: وظيفة التنقّل الرئيسية وإعداد تقارير عن المشاكل.
التنقل
تساعد خدمة فحص التطبيقات في حظر الطلبات الرئيسية من حزمة تطوير البرامج للتنقّل على أجهزة iOS الواردة من مصادر ضارة أو غير مصرَّح بها. ويعود ذلك عليك بالنفع مباشرةً من خلال حماية مشروعك من الاحتيال في الفوترة واستنفاد الحصة.
الإبلاغ عن حالات التعطّل
ننصح بشدة باستخدام فحص التطبيقات إذا كان تطبيقك يتيح إمكانية الإبلاغ عن حالات تعطُّل في الوقت الفعلي والتصويت عليها. يضمن تفعيل فحص التطبيقات تزويد السائقين بأدق المسارات مع الأخذ في الاعتبار جميع الملاحظات الفورية.
أهمية فحص التطبيقات في إعداد التقارير:
- مستوى الثقة العالي في عمليات الإغلاق: يمكن أن تؤدي الأحداث التي تؤثر في المسار، مثل إغلاق الطرق، إلى تغيير سلوك التوجيه بشكل كبير لجميع السائقين. لحماية الخريطة من التخريب المحتمل أو المحتوى غير المرغوب فيه أو الإبلاغ غير الدقيق، تعتمد البنية الأساسية للإشراف على عمليات تعطيل إغلاق الطرق في Google على إشارات قوية لسلامة الجهاز والتطبيق.
- طريقة تحقّق فحص التطبيقات من صحة التقارير: تتضمّن تقارير المستخدمين وأصواتهم المُرسَلة من حزمة تطوير البرامج للتنقّل على iOS رمزًا مميزًا من فحص التطبيقات، ويستخدمه الخلفية من Google للتحقّق من صحة الملاحظات، ما يزيد من مستوى الثقة فيها ويسمح بتقييمها لمعرفة تأثيرها في الخريطة المباشرة.
- تأثير عدم استخدام فحص التطبيقات: يتم تقييم التقارير المُرسَلة بدون رمز مميّز صالح من فحص التطبيقات بموجب نموذج أقل موثوقية، وقد تتم معالجتها كإشارات غير مرئية فقط. هذا يعني أنّه على الرغم من أنّه سيظل بإمكان المستخدمين الإبلاغ والتصويت، من غير المرجّح أن تظهر بلاغاتهم على الخريطة أو أن تؤثّر في طرق السائقين الآخرين، وستتطلّب عملية التحقّق من صحتها خطوات إضافية.
هل خدمة فحص التطبيقات مناسبة لي؟
ننصح باستخدام فحص التطبيقات في معظم الحالات، ولكن لا تكون هذه الخدمة مطلوبة أو متاحة في الحالات التالية:
- التطبيقات الخاصة أو التجريبية: إذا لم يكن تطبيقك متاحًا للجميع، لن تحتاج إلى استخدام فحص التطبيقات.
- الأجهزة المخترَقة: تمنع الجهات المقدِّمة لخدمة التصديق التي يُنصح بها تشغيل حزمة تطوير البرامج (SDK) الخاصة بخدمة Navigation API لنظام التشغيل iOS على الأجهزة غير الموثوق بها، مثل الهواتف التي تم الحصول على إذن الوصول إلى الجذر فيها أو التي تمت إزالة جميع القيود عنها. لدعم هذه الأجهزة، عليك نشر مقدّم خدمة شهادات مخصّص.
نظرة عامة على خطوات التنفيذ
بشكل عام، ستتّبع الخطوات التالية لدمج تطبيقك مع خدمة فحص التطبيقات:
- أضِف Firebase إلى تطبيقك.
- أضِف مكتبة فحص التطبيقات وفعِّلها.
- إضافة موفّر رموز مميزة تستدعي هذه الخطوة موفّر التصديق الذي تختاره للتحقّق من سلامة الجهاز أو التطبيق.
- إعداد واجهتَي برمجة التطبيقات Navigation وApp Check
- فعِّل تصحيح الأخطاء. ويكون ذلك مفيدًا أثناء التطوير أو في بيئات الدمج المتواصل (CI).
- راقِب طلبات تطبيقك قبل تفعيل إجراء التنفيذ. بهذه الطريقة، يمكنك فرض استخدام فحص التطبيقات بسلاسة بدون إيقاف وصول المستخدمين.
اعتبارات عند التخطيط لعملية دمج فحص التطبيقات
- حصص موفِّري شهادات المصادقة: يخضع موفِّرا شهادات المصادقة اللذان ننصح بهما، وهما DeviceCheck أو App Attest، للحصص والقيود التي تفرضها Apple.
- وقت استجابة بدء التشغيل: في معظم الحالات، لن يواجه المستخدمون أي تأخير أثناء الاستخدام العادي، لأنّه يتم تخزين رموز فحص التطبيقات المميزة مؤقتًا على الجهاز. يجدّد النظام تلقائيًا رموز فحص التطبيقات المميزة في الخلفية قبل انتهاء صلاحيتها للحفاظ على الأداء السلس. ومع ذلك، إذا لم يكن هناك رمز مميّز صالح لخدمة فحص التطبيقات، سيواجه مستخدمو تطبيقك بعض وقت الاستجابة عند بدء التشغيل. على سبيل المثال، يحدث هذا التأخير أثناء عمليات البدء البارد عندما تنتهي صلاحية الرمز المميّز المخزّن مؤقتًا أو يكون غير متوفّر.
- مدة بقاء رمز فحص التطبيقات: تحدّد مدة البقاء (TTL) المدة الزمنية التي يكون فيها رمز فحص التطبيقات صالحًا قبل الحاجة إلى إعادة تحميله. يمكنك ضبط هذه المدة من 30 دقيقة إلى 7 أيام في وحدة تحكّم Firebase. يُنصح بتحديد مدة ساعة واحدة كحدّ أدنى آمن، ولكن تحاول حزمة تطوير البرامج (SDK) تلقائيًا إجراء عمليات إعادة تحميل في الخلفية بعد نصف مدة TTL تقريبًا. للحصول على تعليمات مفصّلة حول وحدة التحكّم، يُرجى الاطّلاع على مستندات فحص التطبيقات من 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: تفعيل تصحيح الأخطاء (اختيارية)
بعد فرض استخدام فحص التطبيقات في حزمة Navigation SDK لنظام التشغيل iOS، لن تعمل ميزات تطبيقك التي تعتمد على حزمة Navigation SDK لنظام التشغيل 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: مراقبة طلبات تطبيقك وتحديد إجراء التنفيذ
قبل تفعيل ميزة فرض استخدام المصادقة الثنائية، راقِب طلبات تطبيقك للتأكّد من أنّك لن تعيق المستخدمين الشرعيين.
- انتقِل إلى شاشة مقاييس App Check في وحدة تحكّم Firebase للاطّلاع على النسبة المئوية للزيارات التي تم التحقّق منها مقارنةً بالزيارات التي لم يتم التحقّق منها.
- بعد التأكّد من أنّ معظم الزيارات تم التحقّق منها وأنّ المستخدمين الشرعيين قد ثبّتوا إصدارًا من تطبيقك يتضمّن عملية تنفيذ App Check، فعِّل ميزة "فرض الاستخدام".
- بعد تفعيل ميزة فرض استخدام فحص التطبيقات، سترفض الخدمة جميع الزيارات التي لا تتضمّن رمزًا مميزًا صالحًا من فحص التطبيقات.