بعد تنفيذ OAuth 2.0، يمكنك اختياريًا ضبط App Flip المستند إلى OAuth، والذي يسمح لمستخدمي iOS بربط حساباتهم في نظام المصادقة بحساباتهم على Google بسرعة أكبر. توضّح الأقسام التالية كيفية تصميم وتنفيذ App Flip لدمج Cloud-to-cloud على نظام التشغيل iOS.
إرشادات التصميم
يوضّح هذا القسم متطلبات التصميم واقتراحات بشأن شاشة الموافقة على ربط الحساب في App Flip. بعد أن يتصل Google بتطبيقك، يعرض تطبيقك شاشة الموافقة للمستخدم.
المتطلبات
- يجب أن يتضمّن التطبيق بيانًا بشأن تخويل Google، مثل "بعد الربط، سيصبح بإمكان Google التحكّم في أجهزتك".
- عليك توضيح أنّه سيتم ربط حساب المستخدم بحساب على Google، وليس بمنتج معيّن من Google، مثل Google Home أو "مساعد Google".
- يجب تضمين عبارة واضحة تحثّ المستخدم على اتّخاذ إجراء في شاشة الموافقة، واستخدام عبارة "الموافقة والربط" لإجراء الربط. ويرجع ذلك إلى أنّ المستخدمين بحاجة إلى معرفة البيانات التي يُطلب منهم مشاركتها مع Google لربط حساباتهم.
- يجب توفير طريقة للمستخدمين تتيح لهم الرجوع أو الرفض أو الإلغاء إذا اختاروا عدم الربط. استخدِم كلمة "إلغاء" للإشارة إلى إجراء الإلغاء.
- يجب تنفيذ سير العمل التالي: بعد النقر على "الموافقة والربط"، يجب عرض رسالة تفيد بنجاح عملية الربط وإعادة توجيه المستخدم تلقائيًا إلى تطبيق Google Home. من المفترض أن يظهر للمستخدم الآن الجهاز المرتبط في تطبيق Google Home مع الإجراء الذي اتّخذته. بعد النقر على "إلغاء"، عليك إعادة توجيه المستخدم إلى تطبيق Google Home.
الاقتراحات
ننصحك باتّخاذ الإجراءات التالية:
عرض سياسة خصوصية Google تضمين رابط يؤدي إلى سياسة خصوصية Google في شاشة طلب الموافقة
البيانات التي ستتم مشاركتها استخدِم لغة واضحة وموجزة لتوضيح البيانات التي تطلبها Google من المستخدمين وسبب طلبها.
إمكانية إلغاء الربط: توفير آلية للمستخدمين لإلغاء الربط، مثل عنوان URL يؤدي إلى إعدادات حساباتهم على منصتك بدلاً من ذلك، يمكنك تضمين رابط يؤدي إلى حساب Google حيث يمكن للمستخدمين إدارة حساباتهم المرتبطة.
إمكانية تغيير حساب المستخدم اقترِح طريقة تتيح للمستخدمين التبديل بين حساباتهم. ويكون ذلك مفيدًا بشكل خاص إذا كان المستخدمون يميلون إلى امتلاك حسابات متعدّدة.
- إذا كان على المستخدم إغلاق شاشة الموافقة للتبديل بين الحسابات، أرسِل خطأ قابلاً للاسترداد إلى Google ليتمكّن المستخدم من تسجيل الدخول إلى الحساب المطلوب باستخدام ربط الحسابات عبر OAuth ومسار الربط الضمني.
تضمين شعارك: عرض شعار شركتك على شاشة الموافقة استخدِم إرشادات الأسلوب لتحديد موضع شعارك. إذا كنت تريد عرض شعار Google أيضًا، يُرجى الاطّلاع على الشعارات والعلامات التجارية.
إعداد App Flip المستند إلى OAuth
توضّح الأقسام التالية المتطلبات الأساسية لميزة "ربط التطبيقات بسرعة" المستندة إلى بروتوكول OAuth وكيفية ضبط مشروع "ربط التطبيقات بسرعة" في Google Home Developer Console.
إنشاء عملية دمج من السحابة الإلكترونية إلى السحابة الإلكترونية وإعداد خادم OAuth 2.0
قبل أن تتمكّن من ضبط App Flip، عليك إجراء ما يلي:
- إعداد خادم OAuth 2.0 لمزيد من المعلومات حول إعداد خادم OAuth، يُرجى الاطّلاع على مقالة تنفيذ خادم OAuth 2.0.
- إنشاء عملية دمج من السحابة الإلكترونية إلى السحابة الإلكترونية لإنشاء عملية تكامل، اتّبِع التعليمات الواردة في إنشاء عملية تكامل من السحابة الإلكترونية إلى السحابة الإلكترونية.
ضبط ميزة "ربط التطبيقات بسرعة" في Developer Console
يوضّح القسم التالي كيفية ضبط ميزة "ربط التطبيقات بسرعة" في Developer Console.
- املأ جميع الحقول ضمن معلومات عميل OAuth. (إذا لم يكن بروتوكول App Flip متاحًا، يتم استخدام بروتوكول OAuth العادي كخيار بديل).
- ضمن استخدام تطبيقك لربط الحساب(اختياري)، ضَع علامة في المربّع تفعيل لنظام التشغيل iOS.
- املأ حقل الرابط العام. لمزيد من المعلومات حول الروابط العامة، يُرجى الاطّلاع على مقالة السماح للتطبيقات والمواقع الإلكترونية بالربط بمحتواك.
- إذا أردت ضبط برنامجك اختياريًا، أضِف النطاقات وانقر على إضافة نطاق ضمن ضبط برنامجك (اختياري).
- انقر على حفظ.
يمكنك الآن الانتقال إلى القسم التالي لتنفيذ App Flip في تطبيق iOS.
تنفيذ App Flip في تطبيقاتك الأصلية
لتنفيذ App Flip، عليك تعديل رمز تفويض المستخدم في تطبيقك لقبول رابط عميق من Google.
يؤدي ربط التطبيقات بسرعة المستند إلى OAuth إلى فتح تطبيق iOS من تطبيق Google لمساعدة مستخدم تطبيق Google في ربط حسابه بسهولة أكبر. عليك إجراء تغييرات بسيطة على الرمز البرمجي لتطبيق iOS من أجل تنفيذ هذه الميزة.
في هذا المستند، ستتعرّف على كيفية تعديل تطبيق iOS لإتاحة ميزة "ربط التطبيقات بسرعة".
تجربة النموذج
يوضّح نموذج تطبيق ربط التطبيقات بسرعة عملية دمج ربط الحسابات على نظام التشغيل iOS المتوافق مع ربط التطبيقات بسرعة. يمكنك استخدام هذا التطبيق للتحقّق من كيفية الردّ على رابط عام وارد من ميزة "ربط التطبيقات بسرعة" من تطبيقات Google للأجهزة الجوّالة.
تم ضبط نموذج التطبيق مسبقًا ليتكامل مع أداة اختبار ميزة "ربط التطبيقات بسرعة" لنظام التشغيل iOS، والتي يمكنك استخدامها للتحقّق من تكامل تطبيق iOS مع ميزة "ربط التطبيقات بسرعة" قبل ضبط ربط الحساب مع Google. يحاكي هذا التطبيق الرابط العام الذي يتم تشغيله بواسطة تطبيقات Google للأجهزة الجوّالة عند تفعيل ميزة "ربط التطبيقات بسرعة".
آلية العمل
في ما يلي خطوات عملية الربط التي يتّخذها تطبيق Google وتطبيقك عند حدوث عملية "ربط التطبيقات بسرعة":
يحاول تطبيق Google فتح الرابط العام لتطبيقك. ويمكنه فتح تطبيقك إذا كان مثبّتًا على جهاز المستخدم ومرتبطًا بالرابط العام. لمزيد من التفاصيل، يُرجى الاطّلاع على إتاحة الروابط العامة.
يتحقّق تطبيقك من أنّ المَعلمتَين
client_idوredirect_uriالمرمّزتَين في عنوان URL الوارد تتطابقان مع رابط Google العام المتوقّع.يطلب تطبيقك رمز تفويض من خادم OAuth2. في نهاية هذا المسار، يعرض تطبيقك إما رمز تفويض أو رسالة خطأ لتطبيق Google. ولتنفيذ ذلك، يفتح التطبيق الروابط العامة من Google مع إضافة مَعلمات لرمز التفويض أو رسالة الخطأ.
يتعامل تطبيق Google مع الرابط العام الوارد من Google ويواصل تنفيذ بقية خطوات العملية. في حال تقديم رمز تفويض، يتم إكمال عملية الربط على الفور. يتم تبادل الرموز المميّزة بين الخوادم، بالطريقة نفسها التي يتم بها في عملية الربط باستخدام OAuth المستندة إلى المتصفّح. إذا تم عرض رمز خطأ، تستمر عملية الربط مع الخيارات البديلة.
تعديل تطبيق iOS لإتاحة ميزة "ربط التطبيقات بسرعة"
لإتاحة ميزة "ربط التطبيقات بسرعة"، عليك إجراء التغييرات التالية على الرمز البرمجي لتطبيق iOS:
- تعامل مع
NSUserActivityTypeBrowsingWebفي App Delegate. - التقِط المَعلمتَين
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): حساب Google (client_id) المسجَّل ضمن تطبيقك -
scope(List of String): قائمة بالنطاقات المطلوبة مفصولة بمسافات state(String): رقم خاص تستخدمه Google للتحقّق من أنّ نتيجة التفويض هي استجابة لطلب Google الصادر.redirect_uri(String): الروابط العامة من Google. معرّف الموارد المنتظم (URI) لـ "flip" لفتح تطبيق 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 المحدّد لضمان تفعيل الإجراء الاحتياطي المناسب.
تعديل نقطة نهاية التفويض لإتاحة ميزة "ربط التطبيقات بسرعة"
اضبط منصتك لقبول الطلبات باستخدام عناوين URL لإعادة التوجيه في ميزة "ربط التطبيقات بسرعة" من Google:
- تطبيق Google Home
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
- تطبيق "مساعد Google"
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
بالنسبة إلى Google Home app (GHA)، يستخدم ربط حسابات الأجهزة المنزلية المزوّدة بأجهزة ذكية عناوين URL لإعادة التوجيه في com.google.Chromecast. تأكَّد من أنّ خادم التفويض يسمح بعناوين URL لإعادة التوجيه هذه.
تأكَّد من أنّ client_id وعنوان URL المحدّد من خلال المَعلمة redirect_uri
يتطابقان مع القيم المتوقّعة عند تلقّي طلب. إذا تعذّر التحقّق من العميل،
يجب عرض الخطأ invalid_request إلى redirect_uri.
اختبار App Flip على جهازك
بعد إنشاء عملية دمج من السحابة الإلكترونية إلى السحابة الإلكترونية وضبط ميزة "ربط التطبيقات بسرعة" في وحدة التحكّم وفي تطبيقك، يمكنك اختبار ميزة "ربط التطبيقات بسرعة" على جهازك الجوّال. يمكنك استخدام تطبيق Google Home لاختبار ميزة "ربط التطبيقات بسرعة".
لاختبار "App Flip" من تطبيق "Google Home"، يُرجى اتّباع الخطوات التالية:
- انتقِل إلى Developer Console واختَر مشروعك.
- انتقِل إلى من السحابة الإلكترونية إلى السحابة الإلكترونية > اختبار.
- ابدأ عملية ربط الحساب من تطبيق Home:
- افتح Google Home app (GHA).
- انقر على الزر +.
- انقر على إعداد الجهاز.
- انقر على هل لديك أجهزة سبق وتمّ إعدادها؟
- اختَر عملية الدمج من السحابة الإلكترونية إلى السحابة الإلكترونية من قائمة مقدّمي الخدمات. وسيتم إضافة بادئة "[اختبار]" في القائمة. عند اختيار عملية الدمج [الاختبارية] من القائمة، من المفترض أن يفتح تطبيقك.
- تأكَّد من تشغيل تطبيقك وابدأ باختبار عملية التفويض.