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