إنشاء روابط ديناميكية على iOS

يمكنك إنشاء روابط ديناميكية قصيرة أو طويلة باستخدام واجهة برمجة تطبيقات Firebase Dynamic Links Builder. تقبل واجهة برمجة التطبيقات هذه إما رابطًا ديناميكيًا طويلًا أو كائنًا يحتوي على معلمات الارتباط الديناميكي، وتقوم بإرجاع عناوين URL مثل الأمثلة التالية:

https://example.com/link/WXYZ
https://example.page.link/WXYZ

المتطلبات الأساسية

قبل أن تبدأ، تأكد من إضافة Firebase إلى مشروع iOS الخاص بك .

استخدم Swift Package Manager لتثبيت تبعيات Firebase وإدارتها.

  1. في Xcode، مع فتح مشروع التطبيق الخاص بك، انتقل إلى File > Add Packages .
  2. عندما يُطلب منك ذلك، قم بإضافة مستودع Firebase Apple الأساسي لـ SDK:
  3.   https://github.com/firebase/firebase-ios-sdk.git
  4. اختر مكتبة الروابط الديناميكية.
  5. أضف علامة -ObjC إلى قسم إشارات الرابط الأخرى في إعدادات إنشاء هدفك.
  6. للحصول على تجربة مثالية مع الروابط الديناميكية، نوصي بتمكين Google Analytics في مشروع Firebase الخاص بك وإضافة Firebase SDK لـ Google Analytics إلى تطبيقك. يمكنك تحديد المكتبة بدون مجموعة IDFA أو مع مجموعة IDFA.
  7. عند الانتهاء، سيبدأ Xcode تلقائيًا في حل وتنزيل تبعياتك في الخلفية.

الآن قم بتنفيذ بعض خطوات التكوين:

  1. في وحدة تحكم Firebase، افتح قسم الروابط الديناميكية .
  2. إذا لم تكن قد قبلت بالفعل شروط الخدمة وقمت بتعيين بادئة URI للارتباطات الديناميكية الخاصة بك، فقم بذلك عندما يُطلب منك ذلك.

    إذا كان لديك بالفعل بادئة URI للارتباطات الديناميكية، فقم بتدوينها. يتعين عليك توفيرها عند إنشاء الارتباطات الديناميكية برمجيًا.

  3. موصى به : حدد أنماط عنوان URL المسموح بها في الروابط العميقة والروابط الاحتياطية. ومن خلال القيام بذلك، فإنك تمنع الأطراف غير المصرح لها من إنشاء روابط ديناميكية تعيد التوجيه من نطاقك إلى مواقع لا تتحكم فيها. راجع السماح بأنماط عنوان URL محددة .
  4. تأكد من تحديد معرف متجر التطبيقات الخاص بتطبيقك وبادئة معرف التطبيق في إعدادات تطبيقك. لعرض إعدادات تطبيقك وتعديلها، انتقل إلى صفحة إعدادات مشروع Firebase وحدد تطبيق iOS الخاص بك.

    تأكد من تكوين مشروع Firebase الخاص بك بشكل صحيح لاستخدام الروابط الديناميكية في تطبيق iOS الخاص بك عن طريق فتح ملف apple-app-site-association الذي تتم استضافته على مجال الروابط الديناميكية الخاص بك. سوف يقدم Firebase ملف apple-app-site-association من جذر النطاق بالإضافة إلى الدليل الفرعي .well-known . على سبيل المثال:

        https://example.com/apple-app-site-association
        https://example.com/.well-known/apple-app-site-association
        

    إذا كان تطبيقك متصلاً، فإن ملف apple-app-site-association يحتوي على مرجع إلى بادئة معرف التطبيق الخاص بتطبيقك ومعرف الحزمة. على سبيل المثال:

    {"applinks":{"apps":[],"details":[{"appID":"1234567890.com.example.ios","paths":["/*"]}]}}

    إذا كانت خاصية details فارغة، فتحقق جيدًا من أنك حددت بادئة معرف التطبيق الخاص بك. لاحظ أن بادئة معرف التطبيق الخاص بك قد لا تكون هي نفس معرف الفريق الخاص بك.

أضف Firebase إلى تطبيقك

  1. قم باستيراد وحدة FirebaseCore في UIApplicationDelegate ، بالإضافة إلى أي وحدات Firebase أخرى يستخدمها مندوب تطبيقك. على سبيل المثال، لاستخدام Cloud Firestore والمصادقة:

    سويفتويي

    import SwiftUI
    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          

    سويفت

    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          

    ج موضوعية

    @import FirebaseCore;
    @import FirebaseFirestore;
    @import FirebaseAuth;
    // ...
          
  2. قم بتكوين مثيل FirebaseApp مشترك في طريقة application(_:didFinishLaunchingWithOptions:) :

    سويفتويي

    // Use Firebase library to configure APIs
    FirebaseApp.configure()

    سويفت

    // Use Firebase library to configure APIs
    FirebaseApp.configure()

    ج موضوعية

    // Use Firebase library to configure APIs
    [FIRApp configure];
  3. إذا كنت تستخدم SwiftUI، فيجب عليك إنشاء مفوض تطبيق وإرفاقه ببنية App الخاص بك عبر UIApplicationDelegateAdaptor أو NSApplicationDelegateAdaptor . يجب عليك أيضًا تعطيل swizzling مندوب التطبيق. لمزيد من المعلومات، راجع تعليمات SwiftUI .

    سويفتويي

    @main
    struct YourApp: App {
      // register app delegate for Firebase setup
      @UIApplicationDelegateAdaptor(AppDelegate.self) var delegate
    
      var body: some Scene {
        WindowGroup {
          NavigationView {
            ContentView()
          }
        }
      }
    }
          

استخدم وحدة تحكم Firebase

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

استخدم واجهة برمجة تطبيقات iOS Builder

يمكنك استخدام iOS Builder API لإنشاء روابط ديناميكية من المعلمات، أو لتقصير رابط ديناميكي طويل.

لإنشاء ارتباط ديناميكي، قم بإنشاء كائن DynamicLinkComponents جديد وحدد معلمات الارتباط الديناميكي عن طريق تعيين الخصائص المقابلة للكائن. بعد ذلك، احصل على الرابط الطويل من خاصية url الخاص بالكائن أو احصل على الرابط القصير عن طريق استدعاء shorten() .

ينشئ المثال البسيط التالي رابطًا ديناميكيًا طويلًا إلى https://www.example.com/my-page الذي يفتح مع تطبيق iOS الخاص بك على iOS والتطبيق com.example.android على Android:

سويفت

ملاحظة: منتج Firebase هذا غير متوفر على أهداف macOS أو Mac Catalyst أو tvOS أو watchOS.
guard let link = URL(string: "https://www.example.com/my-page") else { return }
let dynamicLinksDomainURIPrefix = "https://example.com/link"
let linkBuilder = DynamicLinkComponents(link: link, domainURIPrefix: dynamicLinksDomainURIPRefix)
linkBuilder.iOSParameters = DynamicLinkIOSParameters(bundleID: "com.example.ios")
linkBuilder.androidParameters = DynamicLinkAndroidParameters(packageName: "com.example.android")

guard let longDynamicLink = linkBuilder.url else { return }
print("The long URL is: \(longDynamicLink)")

ج موضوعية

ملاحظة: منتج Firebase هذا غير متوفر على أهداف macOS أو Mac Catalyst أو tvOS أو watchOS.
NSURL *link = [[NSURL alloc] initWithString:@"https://www.example.com/my-page"];
NSString *dynamicLinksDomainURIPrefix = @"https://example.com/link";
FIRDynamicLinkComponents *linkBuilder = [[FIRDynamicLinkComponents alloc]
                                         initWithLink:link
                                               domainURIPrefix:dynamicLinksDomainURIPrefix];
linkBuilder.iOSParameters = [[FIRDynamicLinkIOSParameters alloc]
                             initWithBundleID:@"com.example.ios"];
linkBuilder.androidParameters = [[FIRDynamicLinkAndroidParameters alloc]
                                 initWithPackageName:@"com.example.android"];

NSLog(@"The long URL is: %@", linkBuilder.url);

لإنشاء ارتباط ديناميكي قصير، قم ببناء DynamicLinkComponents بنفس الطريقة، ثم قم باستدعاء shorten() .

يتطلب إنشاء رابط قصير استدعاء شبكة، لذا بدلًا من إرجاع الرابط مباشرة، يقبل الدالة shorten() ‎ معالج الإكمال، والذي يتم استدعاؤه عند اكتمال الطلب. على سبيل المثال:

سويفت

ملاحظة: منتج Firebase هذا غير متوفر على أهداف macOS أو Mac Catalyst أو tvOS أو watchOS.
linkBuilder.shorten() { url, warnings, error in
  guard let url = url, error != nil else { return }
  print("The short URL is: \(url)")
}

ج موضوعية

ملاحظة: منتج Firebase هذا غير متوفر على أهداف macOS أو Mac Catalyst أو tvOS أو watchOS.
[linkBuilder shortenWithCompletion:^(NSURL * _Nullable shortURL,
                                     NSArray<NSString *> * _Nullable warnings,
                                     NSError * _Nullable error) {
  if (error || shortURL == nil) { return; }
  NSLog(@"The short URL is: %@", shortURL);
}];
      

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

سويفت

ملاحظة: منتج Firebase هذا غير متوفر على أهداف macOS أو Mac Catalyst أو tvOS أو watchOS.
linkBuilder.options = DynamicLinkComponentsOptions()
linkBuilder.options.pathLength = .short
linkBuilder.shorten() { url, warnings, error in
  guard let url = url, error != nil else { return }
  print("The short URL is: \(url)")
}

ج موضوعية

ملاحظة: منتج Firebase هذا غير متوفر على أهداف macOS أو Mac Catalyst أو tvOS أو watchOS.
linkBuilder.dynamicLinkComponentsOptions = [[FIRDynamicLinkComponentsOptions alloc] init];
linkBuilder.dynamicLinkComponentsOptions.pathLength = FIRShortDynamicLinkPathLengthShort;
[linkBuilder shortenWithCompletion:^(NSURL * _Nullable shortURL,
                                     NSArray<NSString *> * _Nullable warnings,
                                     NSError * _Nullable error) {
  if (error || shortURL == nil) { return; }
  NSLog(@"The short URL is: %@", shortURL);
}];
      

يمكنك استخدام Dynamic Link Builder API لإنشاء روابط ديناميكية باستخدام أي من المعلمات المدعومة. راجع مرجع API للحصول على التفاصيل.

يقوم المثال التالي بإنشاء ارتباط ديناميكي مع مجموعة من المعلمات الشائعة:

سويفت

ملاحظة: منتج Firebase هذا غير متوفر على أهداف macOS أو Mac Catalyst أو tvOS أو watchOS.
guard let link = URL(string: "https://www.example.com/my-page") else { return }
let dynamicLinksDomainURIPrefix = "https://example.com/link"
let linkBuilder = DynamicLinkComponents(link: link, domainURIPRefix: dynamicLinksDomainURIPrefix)

linkBuilder.iOSParameters = DynamicLinkIOSParameters(bundleID: "com.example.ios")
linkBuilder.iOSParameters.appStoreID = "123456789"
linkBuilder.iOSParameters.minimumAppVersion = "1.2.3"

linkBuilder.androidParameters = DynamicLinkAndroidParameters(packageName: "com.example.android")
linkBuilder.androidParameters.minimumVersion = 123

linkBuilder.analyticsParameters = DynamicLinkGoogleAnalyticsParameters(source: "orkut",
                                                                       medium: "social",
                                                                       campaign: "example-promo")

linkBuilder.iTunesConnectParameters = DynamicLinkItunesConnectAnalyticsParameters()
linkBuilder.iTunesConnectParameters.providerToken = "123456"
linkBuilder.iTunesConnectParameters.campaignToken = "example-promo"

linkBuilder.socialMetaTagParameters = DynamicLinkSocialMetaTagParameters()
linkBuilder.socialMetaTagParameters.title = "Example of a Dynamic Link"
linkBuilder.socialMetaTagParameters.descriptionText = "This link works whether the app is installed or not!"
linkBuilder.socialMetaTagParameters.imageURL = "https://www.example.com/my-image.jpg"

guard let longDynamicLink = linkBuilder.url else { return }
print("The long URL is: \(longDynamicLink)")

ج موضوعية

ملاحظة: منتج Firebase هذا غير متوفر على أهداف macOS أو Mac Catalyst أو tvOS أو watchOS.
NSURL *link = [[NSURL alloc] initWithString:@"https://www.example.com/my-page"];
NSString *dynamicLinksDomainURIPrefix = @"https://example.com/link";
FIRDynamicLinkComponents *linkBuilder = [[FIRDynamicLinkComponents alloc]
                                         initWithLink:link
                                         domainURIPrefix:dynamicLinksDomainURIPrefix];

linkBuilder.iOSParameters = [[FIRDynamicLinkIOSParameters alloc]
                             initWithBundleID:@"com.example.ios"];
linkBuilder.iOSParameters.appStoreID = @"123456789";
linkBuilder.iOSParameters.minimumAppVersion = @"1.2.3";

linkBuilder.androidParameters = [[FIRDynamicLinkAndroidParameters alloc]
                                 initWithPackageName:@"com.example.android"];
linkBuilder.androidParameters.minimumVersion = 123;

linkBuilder.analyticsParameters = [[FIRDynamicLinkGoogleAnalyticsParameters alloc]
                                   initWithSource:@"orkut"
                                           medium:@"social"
                                         campaign:@"example-promo"];

linkBuilder.iTunesConnectParameters = [[FIRDynamicLinkItunesConnectAnalyticsParameters alloc] init];
linkBuilder.iTunesConnectParameters.providerToken = @"123456";
linkBuilder.iTunesConnectParameters.campaignToken = @"example-promo";

linkBuilder.socialMetaTagParameters = [[FIRDynamicLinkSocialMetaTagParameters alloc] init];
linkBuilder.socialMetaTagParameters.title = @"Example of a Dynamic Link";
linkBuilder.socialMetaTagParameters.descriptionText = @"This link works whether the app is installed or not!";
linkBuilder.socialMetaTagParameters.imageURL = @"https://www.example.com/my-image.jpg";

NSLog(@"The long URL is: %@", linkBuilder.url);

يمكنك تعيين معلمات الارتباط الديناميكي بالكائنات والخصائص التالية:

مكونات الارتباط الديناميكي
وصلة

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

domainURIPrefix بادئة عنوان URL للرابط الديناميكي، والتي يمكنك العثور عليها في وحدة تحكم Firebase. يشبه مجال الارتباط الديناميكي الأمثلة التالية:
https://example.com/link
https://example.page.link
معلمات DynamicLinkAndroid
returnURL الرابط الذي سيتم فتحه عندما لا يكون التطبيق مثبتًا. حدد هذا للقيام بشيء آخر غير تثبيت تطبيقك من متجر Play عندما لا يكون التطبيق مثبتًا، مثل فتح إصدار الويب للجوال من المحتوى، أو عرض صفحة ترويجية لتطبيقك.
miniVersion versionCode الخاص بالإصدار الأدنى لتطبيقك الذي يمكنه فتح الرابط. إذا كان التطبيق المثبت إصدارًا أقدم، فسيتم نقل المستخدم إلى متجر Play لترقية التطبيق.
DynamicLinkIOSParameters
معرف المتجر معرف متجر التطبيقات الخاص بتطبيقك، والذي يُستخدم لإرسال المستخدمين إلى متجر التطبيقات عندما لا يكون التطبيق مثبتًا
returnURL الرابط الذي سيتم فتحه عندما لا يكون التطبيق مثبتًا. حدد هذا للقيام بشيء آخر غير تثبيت تطبيقك من App Store عندما لا يكون التطبيق مثبتًا، مثل فتح إصدار الويب للجوال من المحتوى، أو عرض صفحة ترويجية لتطبيقك.
customScheme نظام عنوان URL المخصص لتطبيقك، إذا تم تعريفه على أنه شيء آخر غير معرف حزمة تطبيقك
iPadFallbackURL الرابط الذي سيتم فتحه على أجهزة iPad عندما لا يكون التطبيق مثبتًا. حدد هذا للقيام بشيء آخر غير تثبيت تطبيقك من App Store عندما لا يكون التطبيق مثبتًا، مثل فتح إصدار الويب من المحتوى، أو عرض صفحة ترويجية لتطبيقك.
iPadBundleID معرف حزمة تطبيق iOS المراد استخدامه على أجهزة iPad لفتح الرابط. يجب أن يكون التطبيق متصلاً بمشروعك من صفحة النظرة العامة في وحدة تحكم Firebase.
الحد الأدنىAppVersion رقم إصدار الحد الأدنى من إصدار تطبيقك الذي يمكنه فتح الرابط. يتم تمرير هذه العلامة إلى تطبيقك عند فتحه، ويجب أن يقرر تطبيقك ما يجب فعله بها.
DynamicLinkNavigationInfoParameters
forceRedirectEnabled إذا تم التعيين على "1"، فتخطى صفحة معاينة التطبيق عند فتح الرابط الديناميكي، وأعد التوجيه بدلاً من ذلك إلى التطبيق أو المتجر. يمكن لصفحة معاينة التطبيق (التي يتم تمكينها افتراضيًا) إرسال المستخدمين بشكل أكثر موثوقية إلى الوجهة الأكثر ملاءمة عند فتح الروابط الديناميكية في التطبيقات؛ ومع ذلك، إذا كنت تتوقع أن يتم فتح الارتباط الديناميكي فقط في التطبيقات التي يمكنها فتح الارتباطات الديناميكية بشكل موثوق بدون هذه الصفحة، فيمكنك تعطيله باستخدام هذه المعلمة. ستؤثر هذه المعلمة على سلوك الارتباط الديناميكي على نظام iOS فقط.
معلمات DynamicLinkSocialMetaTag
عنوان العنوان الذي سيتم استخدامه عند مشاركة الارتباط الديناميكي في منشور اجتماعي.
descriptionText الوصف الذي سيتم استخدامه عند مشاركة الارتباط الديناميكي في منشور اجتماعي.
رابط الصورة عنوان URL للصورة المرتبطة بهذا الرابط. يجب أن تكون الصورة بحجم 300 × 200 بكسل على الأقل، وأقل من 300 كيلو بايت.
DynamicLinkGoogleAnalyticsParameters
مصدر
واسطة
حملة
شرط
محتوى
معلمات تحليلات Google Play. يتم تمرير هذه المعلمات ( utm_source , utm_medium , utm_campaign , utm_term , utm_content ) إلى متجر Play بالإضافة إلى إلحاقها بحمولة الرابط.
DynamicLinkItunesConnectAnalyticsParameters
app.providerToken
التابعة
CampaignToken
معلمات تحليلات iTunes Connect. يتم تمرير هذه المعلمات ( pt ، at ، ct ) إلى متجر التطبيقات.

لتقصير رابط ديناميكي طويل، قم بتمرير الارتباط الديناميكي الطويل لتقصير shortenURL(url:options:) مع كائن DynamicLinkComponentsOptions إذا كنت تريد إنشاء رابط بلاحقة قصيرة:

سويفت

ملاحظة: منتج Firebase هذا غير متوفر على أهداف macOS أو Mac Catalyst أو tvOS أو watchOS.
DynamicLinkComponents.shortenURL(url: longLinkUrl, options: nil) { url, warnings, error in
  guard let url = url, error != nil else { return }
  print("The short URL is: \(url)")
}

ج موضوعية

ملاحظة: منتج Firebase هذا غير متوفر على أهداف macOS أو Mac Catalyst أو tvOS أو watchOS.
[FIRDynamicLinkComponents shortenURL:longLinkUrl
                             options:nil
                          completion:^(NSURL * _Nullable shortURL,
                                       NSArray<NSString *> * _Nullable warnings,
                                       NSError * _Nullable error) {
  if (error || shortURL == nil) { return; }
  NSLog(@"The short URL is: %@", shortURL);
}];

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

ومع ذلك، قد يرغب المطورون الذين يستخدمون بالفعل نظام URL مخصص لأغراض أخرى في استخدام نفس نظام URL المخصص للارتباطات الديناميكية الخاصة بهم أيضًا. إذا كنت في هذا الموقف، فيمكنك تحديد نظام عنوان URL مختلف لروابط Firebase الديناميكية الخاصة بك عن طريق اتباع الخطوات التالية:

  1. عند إعداد تطبيقك، تأكد من تحديد نظام عنوان URL الافتراضي الذي سيستخدمه تطبيقك قبل تكوين مثيل FirebaseApp المشترك:

    سويفت

    ملاحظة: منتج Firebase هذا غير متوفر على أهداف macOS أو Mac Catalyst أو tvOS أو watchOS.
    func application(_ application: UIApplication,
                     didFinishLaunchingWithOptions launchOptions: [UIApplication
                       .LaunchOptionsKey: Any]?) -> Bool {
      // Set deepLinkURLScheme to the custom URL scheme you defined in your
      // Xcode project.
      FirebaseOptions.defaultOptions()?.deepLinkURLScheme = customURLScheme
      FirebaseApp.configure()
    
      return true
    }
    

    ج موضوعية

    ملاحظة: منتج Firebase هذا غير متوفر على أهداف macOS أو Mac Catalyst أو tvOS أو watchOS.
    - (BOOL)application:(UIApplication *)application
        didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
      // Set deepLinkURLScheme to the custom URL scheme you defined in your
      // Xcode project.
      [FIROptions defaultOptions].deepLinkURLScheme = CUSTOM_URL_SCHEME;
      [FIRApp configure];
    
      return YES;
    }
  2. عندما تقوم بإنشاء أي رابط ديناميكي، ستحتاج إلى تحديد نظام عنوان URL المخصص الذي يستخدمه تطبيقك. يمكنك القيام بذلك من خلال وحدة تحكم Firebase، أو تعيين customScheme في Builder API، أو تحديد المعلمة ius في عنوان URL الخاص بك، أو إرسال المعلمة iosCustomScheme إلى REST API

الخطوات التالية

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

لتلقي الروابط الديناميكية في تطبيقك، راجع وثائق iOS و Android و C++ و Unity .