يفتح رابط App Flip المستند إلى OAuth (App Flip) تطبيق iOS الخاص بك من تطبيق Google لمساعدة مستخدم تطبيق Google على ربط حساباتهم بسهولة أكبر. تحتاج إلى إجراء تغييرات طفيفة على التعليمات البرمجية لتطبيق iOS الخاص بك لتنفيذ هذه الميزة.
في هذا المستند ، ستتعرف على كيفية تعديل تطبيق iOS الخاص بك لدعم App Flip.
جرب العينة
التطبيق فليب عينة التطبيق يدل على حساب ربط التكامل في دائرة الرقابة الداخلية هذا التطبيق متوافق مع فليب. يمكنك استخدام هذا التطبيق للتحقق من كيفية الرد على الرابط العام لتطبيق Flip من تطبيقات Google للجوال.
وتكوينها التطبيق عينة على الاندماج مع الوجه أداة اختبار التطبيقات لدائرة الرقابة الداخلية ، والتي يمكنك استخدامها للتحقق من تكامل بك دائرة الرقابة الداخلية التطبيق مع التطبيقات الوجه قبل حساب تكوين ربط مع جوجل. يحاكي هذا التطبيق الارتباط العام الذي يتم تشغيله بواسطة تطبيقات Google للجوّال عند تمكين App Flip.
كيف تعمل
فيما يلي خطوات التدفق التي يتخذها تطبيق Google وتطبيقك عند حدوث "قلب التطبيق":
يحاول تطبيق Google فتح الرابط العام لتطبيقك. يمكنه فتح تطبيقك إذا كان مثبتًا على جهاز المستخدم ومرتبطًا بالرابط العام. نرى دعم عالمي سريعة للحصول على التفاصيل.
الشيكات التطبيق أن
client_id
وredirect_uri
المعلمة المرمزة في URL الواردة يطابق رابط جوجل العالمية المتوقعة.يطلب تطبيقك رمز تفويض من خادم OAuth2. في نهاية هذا التدفق ، يُرجع تطبيقك إما رمز تفويض أو خطأ إلى تطبيق Google. للقيام بذلك ، يفتح الرابط العالمي لـ Google بالمعلمات الملحقة لرمز التفويض أو الخطأ.
يتعامل تطبيق Google مع ارتباط Google العالمي الوارد ويستمر مع بقية التدفق. إذا تم توفير رمز التفويض ، فسيتم إكمال الارتباط على الفور. يحدث تبادل الرمز المميز من خادم إلى خادم ، بالطريقة نفسها التي يحدث بها في تدفق ارتباط OAuth المستند إلى المتصفح. إذا تم إرجاع رمز خطأ ، يستمر تدفق الارتباط مع الخيارات البديلة.
قم بتعديل تطبيق iOS الخاص بك لدعم App Flip
لدعم App Flip ، قم بإجراء التغييرات التالية على التعليمات البرمجية لتطبيق iOS الخاص بك:
- التعامل مع
NSUserActivityTypeBrowsingWeb
في التطبيق الخاص بك مندوب. - القبض على
redirect_uri
وstate
المعلمات من URL لاستخدامها لاحقا. - تأكد من أن
redirect_uri
مباريات هذا التنسيق:https://oauth-redirect.googleusercontent.com/a/GOOGLE_APP_BUNDLE_ID https://oauth-redirect-sandbox.googleusercontent.com/a/GOOGLE_APP_BUNDLE_ID
تحقق من أن معرّف العميل يطابق القيمة المتوقعة. استخدم نموذج التعليمات البرمجية التالي:
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([Any]?) -> Void) -> Bool { guard userActivity.activityType == NSUserActivityTypeBrowsingWeb, let incomingURL = userActivity.webpageURL, let components = URLComponents(url: incomingURL, resolvingAgainstBaseURL: false), let params = components.queryItems else { return false } if let clientId = params.filter({$0.name == "client_id"}).first?.value, let state = params.filter({$0.name == "state"}).first?.value, let redirectUri = params.filter({$0.name == "redirect_uri"}).first?.value { // Save the redirect_uri and state for later... // Verify the client id return (clientId == GOOGLE_CLIENT_ID) } else { // Missing required parameters return false } }
بعد الحصول على تفويض ناجح ، اتصل بـ URI لإعادة التوجيه باستخدام كود التفويض. استخدم نموذج التعليمات البرمجية التالي:
func returnAuthCode(code: String, state: String, redirectUri: String) { var redirectURL = URL(string: redirectUri) var components = URLComponents(url: redirectURL, resolvingAgainstBaseURL: false) // Return the authorization code and original state let paramAuthCode = URLQueryItem(name: "code", value: code) let paramState = URLQueryItem(name: "state", value: state) components?.queryItems = [paramAuthCode, paramState] if let resultURL = components?.url { UIApplication.shared.open( resultURL, options: [UIApplicationOpenURLOptionUniversalLinksOnly : true], completionHandler: nil) } }
إذا حدث خطأ ، فقم بإرفاق نتيجة خطأ بـ URI لإعادة التوجيه بدلاً من ذلك. استخدم نموذج التعليمات البرمجية التالي:
func returnError(redirectUri: String) { var redirectURL = URL(string: redirectUri) var components = URLComponents(url: redirectURL, resolvingAgainstBaseURL: false) // Return the authorization code and original state let paramError = URLQueryItem(name: "error", value: "invalid_request") let paramDescription = URLQueryItem(name: "error_description", value: "Invalid Request") components?.queryItems = [paramError, paramDescription] if let resultURL = components?.url { UIApplication.shared.open( resultURL, options: [UIApplicationOpenURLOptionUniversalLinksOnly : true], completionHandler: nil) } }
معلمات طلب البحث للرابط العام لتطبيقك
عند فتحه بواسطة تطبيق Google ، يشتمل الرابط العام لتطبيقك على معامِلات طلب البحث التالية:
-
client_id
(String
): جوجلclient_id
أن المسجل تحت التطبيق الخاص بك. -
scope
(List of String
): قائمة نطاقات مفصولة مساحة المطلوبة. -
state
(String
): A حالية تستخدمه جوجل للتحقق من أن النتيجة إذن هي استجابة لطلب جوجل المنتهية ولايته. -
redirect_uri
(String
): رابط جوجل العالمي. عنوان URI "انعكاس" لفتح تطبيق Google وتمرير النتائج.
معلمات الاستعلام عن ارتباط Google العالمي
المعلمات المستخدمة عند إرجاع نتيجة التفويض بنجاح:
-
code
(String
): قيمة رمز إذن، إذا كانت متوفرة. -
state
(String
): إن القيمة الدقيقة الواردة من رابط عالمي واردة.
المعلمات المستخدمة عند إرجاع نتيجة التفويض دون نجاح:
error
(String
)، مع القيم التالية:-
cancelled
: خطأ للاسترداد. سيحاول تطبيق Google ربط الحساب باستخدام عنوان URL للترخيص. بعض الأمثلة هي فشل المستخدم في تسجيل الدخول ، أو وجود جهاز غير متصل بالإنترنت أو انتهاء مهلة الاتصال. -
unrecoverable
: حدث خطأ غير قابل للاسترداد. على سبيل المثال ، يحاول المستخدم الارتباط بحساب معطل ، وسيقوم تطبيق Google بإلغاء ربط الحساب. -
invalid_request
: طلب المعلمات غير صالحة أو مفقودة. هذا خطأ قابل للاسترداد. سيحاول تطبيق Google ربط الحساب باستخدام عنوان URL للترخيص. -
access_denied
: المستخدم يرفض طلب الموافقة. هذا خطأ غير قابل للاسترداد ؛ تطبيق Google يحبط الربط.
-
error_description
(String
، اختياري): رسالة خطأ سهل الاستعمال.
لجميع أنواع الخطأ، يجب إرجاع البيانات استجابة لالمحدد REDIRECT_URI
لضمان trigerred وتراجع المناسب.
قم بتعديل نقطة نهاية التفويض الخاصة بك لدعم App Flip
قم بتكوين النظام الأساسي الخاص بك لقبول الطلبات باستخدام عناوين URL لإعادة توجيه App Flip من Google:
- صفحة Google الرئيسية التطبيق
https://oauth-redirect.googleusercontent.com/a/com.google.Chromecast.dev https://oauth-redirect.googleusercontent.com/a/com.google.Chromecast.enterprise https://oauth-redirect.googleusercontent.com/a/com.google.Chromecast https://oauth-redirect-sandbox.googleusercontent.com/a/com.google.Chromecast.dev https://oauth-redirect-sandbox.googleusercontent.com/a/com.google.Chromecast.enterprise https://oauth-redirect-sandbox.googleusercontent.com/a/com.google.Chromecast
- مساعد جوجل التطبيق
https://oauth-redirect.googleusercontent.com/a/com.google.OPA.dev https://oauth-redirect.googleusercontent.com/a/com.google.OPA.enterprise https://oauth-redirect.googleusercontent.com/a/com.google.OPA https://oauth-redirect-sandbox.googleusercontent.com/a/com.google.OPA.dev https://oauth-redirect-sandbox.googleusercontent.com/a/com.google.OPA.enterprise https://oauth-redirect-sandbox.googleusercontent.com/a/com.google.OPA
تأكد من أن client_id
وURL المحدد من قبل redirect_uri
المعلمة تتطابق مع القيم المتوقعة عند تلقي الطلب. إذا فشل التحقق العميل إرجاع الخطأ invalid_request
إلى redirect_uri
.