Catch up on highlights from Firebase at Google I/O 2023. Learn more

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

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

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

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

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

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

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

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

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

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

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

    تأكد من تكوين مشروع Firebase الخاص بك بشكل صحيح لاستخدام الروابط الديناميكية في تطبيق iOS الخاص بك عن طريق فتح ملف apple-app-site-association المستضاف على نطاق Dynamic Links الخاص بك. سيعرض 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 والمصادقة:

    SwiftUI

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

    سويفت

    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          

    ج موضوعية

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

    SwiftUI

    // 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 . يجب عليك أيضًا تعطيل استخدام مفوض التطبيق. لمزيد من المعلومات ، راجع تعليمات SwiftUI .

    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 API

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

لإنشاء ارتباط ديناميكي ، قم بإنشاء كائن 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);

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

مكونات DynamicLink
وصلة

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

المجال بادئة عنوان URL للرابط الديناميكي ، والتي يمكنك العثور عليها في وحدة تحكم Firebase. يشبه مجال الارتباط الديناميكي الأمثلة التالية:
https://example.com/link
https://example.page.link
DynamicLinkAndroidParameters
عنوان URL الاحتياطي الرابط الذي سيتم فتحه عند عدم تثبيت التطبيق. حدد هذا للقيام بشيء آخر غير تثبيت التطبيق الخاص بك من متجر Play عندما لا يتم تثبيت التطبيق ، مثل فتح إصدار الويب للجوال من المحتوى ، أو عرض صفحة ترويجية لتطبيقك.
الإصدار الأدنى versionCode لأدنى إصدار من تطبيقك يمكنه فتح الرابط. إذا كان التطبيق المثبت إصدارًا أقدم ، فسيتم نقل المستخدم إلى متجر Play لترقية التطبيق.
DynamicLinkIOS المعلمات
معرف التطبيق معرّف App Store لتطبيقك ، يُستخدم لإرسال المستخدمين إلى App Store عندما لا يكون التطبيق مثبتًا
عنوان URL الاحتياطي الرابط الذي سيتم فتحه عند عدم تثبيت التطبيق. حدد هذا للقيام بشيء آخر غير تثبيت تطبيقك من App Store عندما لا يكون التطبيق مثبتًا ، مثل فتح إصدار الويب للجوال من المحتوى ، أو عرض صفحة ترويجية لتطبيقك.
customScheme مخطط عنوان URL المخصص لتطبيقك ، إذا تم تعريفه على أنه شيء آخر غير معرّف حزمة تطبيقك
iPadFallbackURL الرابط الذي سيتم فتحه على أجهزة iPad في حالة عدم تثبيت التطبيق. حدد هذا للقيام بشيء آخر غير تثبيت تطبيقك من App Store عندما لا يكون التطبيق مثبتًا ، مثل فتح إصدار الويب للمحتوى ، أو عرض صفحة ترويجية لتطبيقك.
iPadBundleID معرّف حزمة تطبيق iOS المراد استخدامه على أجهزة iPad لفتح الرابط. يجب أن يكون التطبيق متصلاً بمشروعك من صفحة "نظرة عامة" بوحدة تحكم Firebase.
الحد الأدنى رقم إصدار أقل إصدار لتطبيقك يمكنه فتح الرابط. يتم تمرير هذه العلامة إلى تطبيقك عند فتحه ، ويجب أن يقرر التطبيق ما يجب فعله به.
معلمات DynamicLinkNavigationInfoParameters
ForcedRedirectEnabled إذا تم التعيين على "1" ، فتخط صفحة معاينة التطبيق عند فتح الرابط الديناميكي ، وبدلاً من ذلك أعد التوجيه إلى التطبيق أو المتجر. يمكن لصفحة معاينة التطبيق (التي يتم تمكينها افتراضيًا) إرسال المستخدمين بشكل أكثر موثوقية إلى الوجهة الأكثر ملاءمة عند فتح الروابط الديناميكية في التطبيقات ؛ ومع ذلك ، إذا كنت تتوقع أن يتم فتح الرابط الديناميكي فقط في التطبيقات التي يمكنها فتح الروابط الديناميكية بشكل موثوق بدون هذه الصفحة ، فيمكنك تعطيله باستخدام هذه المعلمة. ستؤثر هذه المعلمة على سلوك الرابط الديناميكي فقط على نظام iOS.
معلمات DynamicLinkSocialMetaTagParameters
عنوان العنوان المراد استخدامه عند مشاركة الرابط الديناميكي في منشور اجتماعي.
وصف النص الوصف المطلوب استخدامه عند مشاركة الرابط الديناميكي في منشور اجتماعي.
رابط الصورة عنوان URL لصورة مرتبطة بهذا الارتباط. يجب أن تكون الصورة 300 × 200 بكسل على الأقل ، وأقل من 300 كيلوبايت.
DynamicLinkGoogleAnalyticsParameters
مصدر
واسطة
حملة
شرط
محتوى
معلمات تحليلات Google Play. يتم تمرير هذه المعلمات ( utm_source ، utm_medium ، utm_campaign ، utm_term ، utm_content ) إلى متجر Play بالإضافة إلى إلحاقها بحمولة الرابط.
DynamicLinkItunesConnectAnalytics المعلمات
ProviderToken
التابعة
حملة
معلمات تحليلات 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 .