نظرية الروابط العالمية

الصورة

مقدمة


WWDC15 - Apple تعلن عن الانتقال إلى Universal Links. معناه باهظ - أرسل المستخدم إلى التطبيق إذا ذهب إلى صفحة الموقع التي يدعمها التطبيق. يُستخدم هذا غالبًا في الرسائل التي يتم إرسالها بعد التسجيل لتأكيد البريد الإلكتروني. وبالتالي ، فإن Universal Links يلغي الحاجة إلى عودة المستخدمين إلى التطبيق بأنفسهم - وهذا أمر جيد لكل من تجربة المستخدم والإحصاءات.

الصورة

قد يعتقد الكثيرون الآن أن هذه المقالة لا تتم كتابتها بشكل جيد للغاية ، ولكنك ، أيها القارئ العزيز ، ربما لم ترى ما يحدث في Stackoverflow حول موضوع الارتباطات العامة.

التنفيذ


الآن سنقوم بتحليل أربع نقاط من شأنها أن تسمح لك بتطبيق الروابط العالمية دون الألم الإضافي والمفاجآت العمياء التي واجهتها. في النهاية ، سنتطرق بسهولة إلى الأدبيات والروابط الأخرى ، والتي قد تمنحك فهمًا أعمق للروابط العامة.

دعنا ننتقل إلى النقطة الأولى.

النطاقات المرتبطة في معرفات التطبيقات


الصورة

إذا لم تقم بتسجيل معرف التطبيق لتطبيقك ، فقم بذلك الآن على موقع Apple Developer على الويب. عند التسجيل ، تأكد من توصيل المجالات المرتبطة. إذا كان معرف التطبيق مسجلاً بالفعل ، فما عليك سوى الانتقال إلى الخطوة التالية وتمكين Associated Domains مباشرة من Xcode.

المجالات المرتبطة في Xcode


XcodeProject / Targets / YourApp / Capabilities

لنكون واضحين حتى بالنسبة للمبتدئين ، لن نقوم بذلك مباشرة من خلال ملف .entitments ونسلك الطريق الواضح: Xcode → Project → Capabilities → Associated Domains.

هنا نحتاج إلى النقر فوق "+" وإضافة المجالات التي تهمنا. تتم إضافة المجالات بالضرورة عبر توقيع applink ، على سبيل المثال ...

applink:habr.com 

في هذه الحالة ، سنتظاهر بأننا نريد تعليم تطبيق Habr لفتحه عند التبديل إلى أحد المحاور ، حتى أتمكن من إخبار habr.com بأمان. في الواقع ، لن نتمكن من اختبار عمل Universal Links على Habré ، وإذا قررت على الفور التبديل من النظرية إلى الممارسة ، فإنني أوصي بإنشاء نطاق على Github Pages في الوقت الحالي والإشارة إليه من خلال applink.

AppDelegate.swift


هنا يكفي بالنسبة لنا لنسخ هذا الرمز ولصقه ، ولكن بعد ذلك يأتي تفسير الفضولي.

 func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: [Any?] -> Void) -> Bool { guard userActivity.activityType == NSUserActivityTypeBrowsingWeb, let url = userActivity.webpageURL else { return false } print(url) //    URL      . return true } 


عند تشغيل التطبيق من خلال Universal Link ، ستحصل على كائن NSUserActivity بقيمة valueType. تحتوي خاصية webpageURL على عنوان URL الذي نقر عليه المستخدم ، ويمكن تحليله إلى أجزاء باستخدام مكونات NSURLC.

NSURLComponents هو موضوع بسيط إلى حد ما تم اكتشافه عدة مرات من خلال المشاريع الصغيرة في Playground. إذا كنت لا تفهم ما يدور حوله ، فهنا لقطة شاشة جيدة .

ملف Apple-app-site-union


إنه ملف بدون امتداد ، لكنه يخزن البيانات بتنسيق JSON. يبدو تقريبا على النحو التالي.

 { "applinks": { "apps": [], "details": [{ "appID": "teamId.com.bundleId.of.your.app", "paths": ["/path-for-redirectionl/*"] }] } } 

أيضًا ، أحثك ​​على إصلاحه في الذاكرة الآن حيث يجب تخزين هذا الملف في الدليل الجذر للمجال .

في الكود ، في الواقع ، نحن مهتمون فقط بحلين. معرف التطبيق في Apple-app-site-Association هو مزيج من معرف الفريق ومعرف الحزمة. في الرمز أعلاه ، قمت بالفعل باستبدال البيانات بطريقة تجعلها أكثر ملاءمة لك لنسخها وتغيير سطرين.

كيف تبحث عن معرف الفريق؟ للقيام بذلك ، انتقل إلى developer.apple.com → الحساب → تسجيل الدخول → العضوية. الحقل الثالث هو معرف الفريق الخاص بك. بالنسبة لي هو 74D322Z5HV.

كيف تبحث عن معرف الحزمة؟ Xcode → مشروع → عام. تتم كتابة معرف الحزمة الخاص بك في قسم الهوية ، الحقل الثاني. بالنسبة لي ، هذا هو com.habrahabr.ios.application.

الآن ، لنجعل هذا appID لـ Apple-app-site-Association.

 "appID": "74D322Z5HV.com.habrahabr.ios.application" 

انتهى! انت مدهش! الآن لنتحدث عن المسارات. يشير هذا الحقل مباشرة إلى الجبهة إلى صفحات الموقع التي يدعمها التطبيق ، ومن أي الصفحات يجب أن ترسل إلى التطبيق. يمكنك إضافة صفحات بقدر ما تريد. علاوة على ذلك ، القليل من المساعدة حول كيفية عمل ذلك ولجعل الأمر أكثر وضوحًا لك ، أذكرك أننا نقدم طلبًا لموقع habr.com

 "paths": [ "/path-for-redirection/*" //        URLhabr.com/path-for-redirection/  -  (   *),     URL habr.com/path-for-redirection/ok/funny-video-with-dogs/      . "/path-for-redirection/" //        URLhabr.com/path-for-redirection/,    ,         , , habr.com/path-for-redirection/ok/. "*" //      -               . "NOT /path-for-redirection/*" //    ,     - URL   NOT –          ,  ,     NOT. ] 

وهنا سيبدو مثل Apple-app-site-Association إذا كان لدينا ، على سبيل المثال ، تطبيقان: أحدهما لمحور Swift والآخر لمحور تطوير iOS.

 { "applinks": { "apps": [], "details": [{ "appID": "74D322Z5HV.com.habrahabr.ios.application.iosdev", "paths": ["/hub/ios_dev/*"] }, { "appID": "74D322Z5HV.com.habrahabr.ios.application.swift", "paths": ["/hub/swift/*"] }] } } 

الآن يمكنك حفظ ملف apple-app-site-union بدون الامتداد (التنسيق) وتحميله على الخادم. ثم أرسل عنوان URL المطلوب إلى بريدك الإلكتروني ، وقم بتجميع مشروع في Xcode مع Associated Domains ورمز في AppDelegate.swift. يجب عليك التحقق من العمل بالانتقال إلى عنوان URL المطلوب من تطبيق البريد القياسي.

حقائق ونصائح جديرة بالملاحظة


  • لا تعمل Universal Links من المتصفح ، عندما تنتقل إلى عنوان URL المطلوب في Safari ، سترى لوحة تخبرك أنه يمكنك الانتقال إلى التطبيق.
  • لا تعمل Universal Links في سلاسل إعادة التوجيه. عند الوصول إلى عنوان URL المطلوب ، سيعرض الموقع ببساطة لوحة في الأعلى لإبلاغك أنه يمكنك الانتقال إلى التطبيق.
  • يمكن اختبار الارتباطات العامة بدون خادمها المخصص أو الافتراضي باستخدام صفحات GitHub.
  • يجب أن يبدأ عنوان URL للانتقال بالضرورة بـ "https: //".
  • يمكنك التحقق مما إذا كان كل شيء على ما يرام مع ملف apple-app-site-Association من خلال أداة التحقق من واجهة برمجة تطبيقات App Search .
  • لإحداث انتقال إلى التطبيق من عنوان URL المطلوب ، ليس من الضروري وجود أي محتوى على عنوان URL هذا. بمعنى ، سيتم تنفيذ النقل حتى إذا كان المتصفح الموجود على عنوان URL هذا يعطي 404.
  • سيطلب منك الضغط لفترة طويلة على Universal Link في تطبيق البريد الاختيار بين فتح التطبيق وفتح المتصفح.

المراجع والمراجع


في ضوء حقيقة أن أحد أهداف هذا المنشور هو إعطاء أقصى قدر من الفهم للارتباطات العالمية ، أود أن أنهيها بإشارات إلى الأدبيات التي تم استخدامها لكتابة المقالة و / أو توفر فقط فهمًا أعمق للارتباطات العالمية.


آمل أن يكون هذا المنشور هو أفضل ما وجدته حول هذا الموضوع باللغة الروسية. بالإضافة إلى ذلك ، يسعدني أن أقدم لك مزيدًا من التوجيه هنا (في التعليقات). إذا فاتتني بعض النقاط أو أخطأت في شيء ما ، فأنا أتوسل إليك أيضًا أن تخبرني بذلك.

شكرا لك!

Source: https://habr.com/ru/post/ar423315/


All Articles