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