يمكنك إنشاء روابط ديناميكية قصيرة أو طويلة باستخدام واجهة برمجة تطبيقات Firebase Dynamic Links Builder. تقبل واجهة برمجة التطبيقات هذه إما رابطًا ديناميكيًا طويلًا أو كائنًا يحتوي على معلمات الارتباط الديناميكي، وتقوم بإرجاع عناوين URL مثل الأمثلة التالية:
https://example.com/link/WXYZ https://example.page.link/WXYZ
المتطلبات الأساسية
قبل أن تبدأ، تأكد من إضافة Firebase إلى مشروع iOS الخاص بك .
قم بإعداد Firebase وDynamic Links SDK
استخدم Swift Package Manager لتثبيت تبعيات Firebase وإدارتها.
- في Xcode، مع فتح مشروع التطبيق الخاص بك، انتقل إلى File > Add Packages .
- عندما يُطلب منك ذلك، قم بإضافة مستودع Firebase Apple الأساسي لـ SDK:
- اختر مكتبة الروابط الديناميكية.
- أضف علامة
-ObjC
إلى قسم إشارات الرابط الأخرى في إعدادات إنشاء هدفك. - للحصول على تجربة مثالية مع الروابط الديناميكية، نوصي بتمكين Google Analytics في مشروع Firebase الخاص بك وإضافة Firebase SDK لـ Google Analytics إلى تطبيقك. يمكنك تحديد المكتبة بدون مجموعة IDFA أو مع مجموعة IDFA.
- عند الانتهاء، سيبدأ Xcode تلقائيًا في حل وتنزيل تبعياتك في الخلفية.
https://github.com/firebase/firebase-ios-sdk.git
الآن قم بتنفيذ بعض خطوات التكوين:
- في وحدة تحكم Firebase، افتح قسم الروابط الديناميكية .
إذا لم تكن قد قبلت بالفعل شروط الخدمة وقمت بتعيين بادئة URI للارتباطات الديناميكية الخاصة بك، فقم بذلك عندما يُطلب منك ذلك.
إذا كان لديك بالفعل بادئة URI للارتباطات الديناميكية، فقم بتدوينها. يتعين عليك توفيرها عند إنشاء الارتباطات الديناميكية برمجيًا.
- موصى به : حدد أنماط عنوان URL المسموح بها في الروابط العميقة والروابط الاحتياطية. ومن خلال القيام بذلك، فإنك تمنع الأطراف غير المصرح لها من إنشاء روابط ديناميكية تعيد التوجيه من نطاقك إلى مواقع لا تتحكم فيها. راجع السماح بأنماط عنوان URL محددة .
تأكد من تحديد معرف متجر التطبيقات الخاص بتطبيقك وبادئة معرف التطبيق في إعدادات تطبيقك. لعرض إعدادات تطبيقك وتعديلها، انتقل إلى صفحة إعدادات مشروع 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 إلى تطبيقك
- قم باستيراد وحدة
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; // ...
- قم بتكوين مثيل
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];
- إذا كنت تستخدم 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:
سويفت
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.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)") }
ج موضوعية
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);
يمكنك تعيين معلمات الارتباط الديناميكي بالكائنات والخصائص التالية:
مكونات الارتباط الديناميكي | |
---|---|
وصلة | الرابط الذي سيفتحه تطبيقك. حدد عنوان 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
إذا كنت تريد إنشاء رابط بلاحقة قصيرة:
سويفت
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 المخصص للارتباطات الديناميكية الخاصة بهم أيضًا. إذا كنت في هذا الموقف، فيمكنك تحديد نظام عنوان URL مختلف لروابط Firebase الديناميكية الخاصة بك عن طريق اتباع الخطوات التالية:
- عند إعداد تطبيقك، تأكد من تحديد نظام عنوان 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; }
- عندما تقوم بإنشاء أي رابط ديناميكي، ستحتاج إلى تحديد نظام عنوان URL المخصص الذي يستخدمه تطبيقك. يمكنك القيام بذلك من خلال وحدة تحكم Firebase، أو تعيين
customScheme
في Builder API، أو تحديد المعلمةius
في عنوان URL الخاص بك، أو إرسال المعلمةiosCustomScheme
إلى REST API
الخطوات التالية
الآن بعد أن قمت بإنشاء الارتباطات الديناميكية، تحتاج إلى إعداد تطبيقك لتلقي الارتباطات الديناميكية وإرسال المستخدمين إلى المكان الصحيح في تطبيقك بعد أن يفتحهم المستخدم.
لتلقي الروابط الديناميكية في تطبيقك، راجع وثائق iOS و Android و C++ و Unity .