Google is committed to advancing racial equity for Black communities. See how.
ترجمت واجهة Cloud Translation API‏ هذه الصفحة.
Switch to English

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

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

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

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

تتطلب روابط Firebase الديناميكية نظام iOS 8 أو أحدث. يمكنك استهداف iOS 7 في تطبيقك ، لكن مكالمات Firebase Dynamic Links SDK تعمل فقط على التطبيقات التي تعمل بنظام iOS 8 أو أحدث.

  1. أضف Firebase إلى مشروع iOS الخاص بك . قم بتضمين Podfile التالية في Podfile الخاص بك:
    pod 'Firebase/Analytics'
    pod 'Firebase/DynamicLinks'
        
  2. قم بتشغيل pod install وافتح ملف .xcworkspace تم إنشاؤه.
  3. في وحدة تحكم Firebase ، افتح قسم الروابط الديناميكية .
  4. إذا لم تكن قد وافقت بالفعل على شروط الخدمة وقمت بتعيين بادئة URI للارتباطات الديناميكية الخاصة بك ، فقم بذلك عندما يُطلب منك ذلك.

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

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

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

    سويفت

    import Firebase

    ج موضوعية

    @import Firebase;
  2. قم FirebaseApp مثيل FirebaseApp المشترك ، عادةً في تطبيق تطبيقك application:didFinishLaunchingWithOptions: method:

    سويفت

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

    ج موضوعية

    // Use Firebase library to configure APIs
    [FIRApp configure];

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

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

استخدم iOS Builder API

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

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

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

سويفت

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)")

ج موضوعية

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() معالج الإكمال ، والذي يتم استدعاؤه عند اكتمال الطلب. فمثلا:

سويفت

linkBuilder.shorten() { url, warnings, error in
  guard let url = url, error != nil else { return }
  print("The short URL is: \(url)")
}

ج موضوعية

[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 :

سويفت

linkBuilder.dynamicLinkComponentsOptions = DynamicLinkComponentsOptions()
linkBuilder.dynamicLinkComponentsOptions.pathLength = .short
linkBuilder.shorten() { url, warnings, error in
  guard let url = url, error != nil else { return }
  print("The short URL is: \(url)")
}

ج موضوعية

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 للحصول على التفاصيل.

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

سويفت

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)")

ج موضوعية

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 ، ولا يمكن أن يكون رابطًا ديناميكيًا آخر.

domainURIPrefix بادئة عنوان 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 حاليًا ، ولكن قد يتم عرضها في النهاية على نظام Android. ستؤثر هذه المعلمة على سلوك الارتباط الديناميكي على كلا النظامين الأساسيين.
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 ) إلى App Store.

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

سويفت

DynamicLinkComponents.shortenURL(url: longLinkUrl, options: nil) { url, warnings, error in
  guard let url = url, error != nil else { return }
  print("The short URL is: \(url)")
}

ج موضوعية

[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 المشترك:

    سويفت

    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 = self.customURLScheme
      FirebaseApp.configure()
    
      return true
    }

    ج موضوعية

    - (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 المخصص الذي يستخدمه تطبيقك. يمكنك القيام بذلك من خلال وحدة تحكم customScheme ، أو إعداد customScheme في Builder API ، أو تحديد معلمة ius في عنوان URL الخاص بك ، أو إرسال معلمة iosCustomScheme إلى REST API

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

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

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