به نام خدا

یکی از کارهایی که توی ساخت اپ های بزرگ باید انجام بدید اینه که اگه یه لینکی توی گوشی باشه و مربوط به اپلیکیشن باشه شما بتونید اون لینک رو از سیستم عامل بگیرید و برنامه خودتون رو باز کنید و اون چیزی که باید نمایش بدید رو نشون بدید.

مثلا دیجی کالا که شما میتونید با کلیک روی لینک محصولاتش توی هرجایی از گوشیتون (مثل تلگرام) وارد برنامه دیجی کالا و صفحه همون محصول بشید.

توی اندروید ساخت یه چنین چیزی کار دشواری نیست و کافیه توی منیفست با چند تا تگ xml اون url خودتون رو به اندروید معرفی کنید و بهش بگید هرموقع چنین سایتی خواست باز بشه به کاربر برنامه شما رو نشون بده همچنین باید اسم یه اکتیویتی هم بهش بدید تا وقتی میخواد برنامه رو باز کنه اون صفحه رو نشون بده.

خب برای اینکار توی آی او اس از چه تکنیک ها و روش هایی باید استفاده کرد؟

نکته مهم: برای انجام چنین کاری باید یه اکانت دولوپر اپل از نوع پولی داشته باشید (سالانه ۹۹ دلار)

ابتدا باید بدونید که اون لینکی رو که قراره باز کنید حتما باید مدیریت سایتش دست خودتون باشه یعنی لازم هست که یه فایل توی صفحه اصلی اون سایت ریخته بشه.

یعنی اپل برای تامین امنیت این کار شما رو ملزم به ساخت یه فایل جیسون (که در ادامه توضیح میدم) و انتقال اون به هاست یا سرور در آدرس مشخصی میکنه. پس در صورتی که سایتی که قصد باز کردنش توی اپلیکیشن خودتون رو دارید مال شما نیست و به هاست یا سرورش دسترسی ندارید نمیتونید از Universal Links استفاده کنید. همچنین داشتن گواهینامه SSL روی دامنه اون سایت الزامیه.

چهار ویژگی لینک های سراسری:

۱. منحصربه فرد: اگر قبلا توی برنامه تون از URL Scheme ها استفاده کرده باشید (به شکل myphotoapp:Vacation?index=1) پس حتما میدونید که برای ساخت این URL Scheme ها هیچ احراز هویتی یا هیچ تضمین امنیتی برای اینکه این url scheme مال شماست انجام نمیدید یعنی در آن واحد چندین برنامه میتونن یه url scheme مشابه داشته باشند اما توی Universal Links فقط برنامه شما هست که میتونه ادعا کنه که لینک مال برنامه شماست و سایر برنامه ها نمیتونن چنین ادعایی داشته باشن (دلیل: همون فایلی که شما باید توی سایت آپلود کنید)

۲. امنیت: وقتی که کاربر برنامه رو روی گوشی نصب میکنه سیستم عامل iOS به اون لینکی که شما توی برنامه معرفی کردید میره و چک میکنه آیا اون فایل جیسون توی اون سایت وجود داره یا نه؟ این کار باعث میشه که امنیت شما حفظ بشه و شما میتونید مطمئن باشید که لینک ها فقط توی اپلیکیشن خودتون باز میشن.

۳. انعطاف پذیری: یکی از خوبی های دیگه لینک های سراسری اینه که شما قراره روی لینک سایت کلیک کنید و توی برنامه باز کنید، خب این یه مزیت بزرگه چون اگه کاربر برنامه شما رو نصب نکرده باشه شما میتونید مطمئن باشید که اون لینک توی سافاری باز میشه و شما میتونید ادامه کار رو از اون لینک توی سایت پیگیری کنید اما توی URL Scheme ها در صورتی که کاربر روی لینک کلیک میکرد و برنامه نصب نبود هیچ اتفاقی نمیفتاد و کاربر نمیدونست باید چیکار کنه.

۳. ساده:  یه مزیت دیگش اینه که شما با یه لینک هم میتونید سایت رو داشته باشید هم اپلیکیشن رو

۴. خصوصی:  مزیت آخر هم برای اینه که وقتی برنامه های دیگه میخوان با برنامه شما در ارتباط باشن لازم نیست که از نصب بودن برنامه شما اطمینان حاصل کنن.

 

پیاده سازی لینک های سراسری کار سختی نیست و کافیه مراحل زیر رو باهم طی کنیم:

۱. ساخت یه فایل جیسون به اسم apple-app-site-association (بدون هیچ پسوند و فرمتی) که حاوی یک جیسون هست که در ادامه براتون قرار دادیم.

۲. آپلود فایل مذکور در هاست یا سرورتون (در قسمت روت هاست یا سرور یعنی باید این لینک موجود باشه => https:///apple-app-site-association

۳. آماده کردن برنامه برای هندل کردن لینک

 

ساخت و آپلود فایل ارتباط دهنده:

برای تضمین امنیت و برقراری یه اتصال امن شما نیاز دارید که بین برنامه و سایت یک رابطه برقرار کنید برای اینکار:

ابتدا یه فایل تکست به اسم apple-app-site-association بسازید و درونش متن زیر رو کپی کنید.

{
  "applinks": {
    "apps": [],
    "details": [
      {
        "appID": "TeamID.BundleID",
        "paths": [
          "*"
        ]
      }
    ]
  }
}

 

خب قبل از اینکه فایل رو ذخیره کنید باید مقدار appID رو تغییر بدید.

AppID چیه؟ اپ آیدی به شکل زیر TeamID.BundleID نوشته میشه. شما تیم آیدی رو از توی پنل توسعه دهنده پیدا کنید و بعد به فرمتی که گفته شد بنویسید

مثلا اگر تیم آیدی من به شکل BNTDTT947L باشه و باندل آیدی هم com.mybundle.iran باشه اپ آیدی برنامه من به شکل BNTDTT947L.com.mybundle.iran میشه

نکته: چیز جالبی که شاید بد نباشه بدونید app identifier شما توی  entitlements برنامه شما وقتی که برنامه بیلد میشه برابر با همین مقداره.

بعد از جایگزینی اپ آیدی میتونید فایل رو با همون اسمی که گفتم بدون پسوند و پیشوند اضافی (و بدون هیچ فرمت خاصی مثل txt و..) اونو توی روت هاست خودتون آپلود کنید.

 

هندل کردن لینک دریافتی توی برنامه

حالا وارد ایکس کد بشید و از قسمت مدیریت اپلیکیشنتون اونجا که باندل آیدی و اینا رو تنظیم میکنید از منوی کناری که تارگت رو انتخاب میکنید برنامه رو کلیک کنید و تب Capabilities رو بزنید حالا به دنبال Associated Domains باشید و بعد از اینکه پیداش کردید از سمت راست، اونو فعال کنید حالا کافیه که با زدن دکمه + یه دامنه جدید (همون دامنه ای که شما اون فایل رو توی هاستش آپلود کردید) رو بنویسید

و به این شکل هم باید بنویسید:

applinks:www.mywebsite.com

توجه کنید که در اینجا چون محتوی وبسایت در هر دو حالت www دار و بدون www یکسان هست پس تفاوتی نمیکند که پشت آدرس سایت اینو بنویسید یا ننویسید.

اگر کار شما کمی پیچیده تر هست و نیاز دارید که برخی از ساب دامنه ها رو پشتیبانی کنید ولی بعضی هاشونو نکنید میتونید به این لینک برید و توضیحات کاملتری رو بخونید

خب حالا رسیدیم به هندل کردن لینک دریافتی از سیستم عامل

الان تا جایی پیش رفتیم که کاربر اگه جایی روی لینک ما کلیک کنه برنامه ما باز میشه ولی اینکه برنامه باید بفهمه به کجا برود رو پیاده نکردیم.

خب وارد AppDelegate.swift میشیم.

تابع زیر رو به کلاس اضافه کنید:

 func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([Any]?) -> Void) -> Bool {
       
    }

برای گرفتن اون لینک هم از کد زیر توی این تابع استفاده کنید تا اون لینک رو به صورت استرینگ بگیرید

userActivity.webpageURL?.absoluteString

موفق باشید

امیدوارم استفاده کنید.

سوالی بود در خدمتم یاعلی