إنشاء روابط ديناميكية في تطبيق Flutter

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

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

قبل أن تتمكّن من إنشاء الروابط الديناميكية في تطبيق Android، عليك تضمين حزمة Firebase SDK. إذا كان تطبيقك معدًا لتلقّي الروابط الديناميكية، تكون قد أكملت هذه الخطوات ويمكنك تخطّي هذا القسم.

  1. ثبِّت حِزم Firebase SDK لتطبيق Flutter وبدِّئها إذا لم يسبق لك إجراء ذلك.

  2. من دليل جذر مشروع Flutter، نفِّذ الأمر التالي لتثبيت مكوّن Dynamic Links الإضافي:

    flutter pub add firebase_dynamic_links
    
  3. إذا كنت بصدد إنشاء تطبيق Android، افتح صفحة إعدادات المشروع في "وحدة تحكّم Firebase" وتأكَّد من تحديد مفتاح التوقيع SHA-1. إذا كنت تستخدم روابط التطبيقات، حدِّد أيضًا مفتاح SHA-256.

  4. في "وحدة تحكّم Firebase"، افتح قسم الروابط الديناميكية.

    1. إذا لم يسبق لك إعداد نطاق لروابطك الديناميكية، انقر على الزر البدء واتّبِع التعليمات.

      إذا كان لديك نطاق للروابط الديناميكية، سجِّله. عليك تقديم نطاق للروابط الديناميكية عند إنشاء روابط ديناميكية بشكلٍ آلي.

    2. مُقترَح: من قائمة "المزيد" (⋮)، حدِّد أنماط عناوين URL المسموح بها في روابطك العميقة وروابطك الاحتياطية. من خلال إجراء ذلك، يمكنك منع جهات غير مأذون لها من إنشاء روابط ديناميكية تعيد التوجيه من نطاقك إلى مواقع إلكترونية لا تتحكّم بها.

      يمكنك الاطّلاع على مقالة السماح بأنماط عناوين URL محدّدة.

لإنشاء رابط ديناميكي، أنشئ عنصر DynamicLinkParameters جديدًا ومرِّره إلى buildLink() أو buildShortLink().

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

final dynamicLinkParams = DynamicLinkParameters(
  link: Uri.parse("https://www.example.com/"),
  uriPrefix: "https://example.page.link",
  androidParameters: const AndroidParameters(packageName: "com.example.app.android"),
  iosParameters: const IOSParameters(bundleId: "com.example.app.ios"),
);
final dynamicLink =
    await FirebaseDynamicLinks.instance.buildLink(dynamicLinkParams);

لإنشاء رابط ديناميكي قصير، مرِّر عنصر DynamicLinkParameters إلى buildShortLink(). يتطلّب إنشاء الرابط القصير إجراء طلب على الشبكة. على سبيل المثال:

final dynamicLinkParams = DynamicLinkParameters(
  link: Uri.parse("https://www.example.com/"),
  uriPrefix: "https://example.page.link",
  androidParameters: const AndroidParameters(packageName: "com.example.app.android"),
  iosParameters: const IOSParameters(bundleId: "com.example.app.ios"),
);
final dynamicLink =
    await FirebaseDynamicLinks.instance.buildShortLink(dynamicLinkParams);

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

ومع ذلك، إذا كانت روابطك القصيرة تؤدي إلى معلومات خاصة بالمستخدم، عليك إنشاء روابط أطول تتضمّن لاحقات مؤلفة من 17 حرفًا تجعل من غير المرجّح أن يتمكّن أحد المستخدمين من تخمين رابط ديناميكي صالح. لإجراء ذلك، مرِّر ShortDynamicLinkType.unguessable إلى طريقة buildShortLink():

final unguessableDynamicLink = await FirebaseDynamicLinks.instance.buildShortLink(
    dynamicLinkParams,
    shortLinkType: ShortDynamicLinkType.unguessable,
);

يمكنك استخدام واجهة برمجة التطبيقات Dynamic Link Builder API لإنشاء روابط ديناميكية تتضمّن أيًا من المَعلمات المتاحة. يمكنك الاطّلاع على مرجع واجهة برمجة التطبيقات.

ينشئ المثال التالي رابطًا ديناميكيًا تم ضبط عدة مَعلمات شائعة له:

final dynamicLinkParams = DynamicLinkParameters(
  link: Uri.parse("https://www.example.com/"),
  uriPrefix: "https://example.page.link",
  androidParameters: const AndroidParameters(
    packageName: "com.example.app.android",
    minimumVersion: 30,
  ),
  iosParameters: const IOSParameters(
    bundleId: "com.example.app.ios",
    appStoreId: "123456789",
    minimumVersion: "1.0.1",
  ),
  googleAnalyticsParameters: const GoogleAnalyticsParameters(
    source: "twitter",
    medium: "social",
    campaign: "example-promo",
  ),
  socialMetaTagParameters: SocialMetaTagParameters(
    title: "Example of a Dynamic Link",
    imageUrl: Uri.parse("https://example.com/image.png"),
  ),
);
final dynamicLink =
    await FirebaseDynamicLinks.instance.buildShortLink(dynamicLinkParams);

يمكنك ضبط مَعلمات الروابط الديناميكية باستخدام الطرق التالية:

مَعلمات الروابط الديناميكية
setLink الرابط الذي سيفتحه تطبيقك حدِّد عنوان URL يمكن لتطبيقك معالجته، ويكون عادةً محتوى التطبيق أو حمولته، ما يؤدي إلى بدء منطق خاص بالتطبيق (مثل إضافة رصيد قسيمة للمستخدم أو عرض شاشة ترحيب). يجب أن يكون هذا الرابط عنوان URL منسّقًا بشكلٍ جيد، وأن يكون مشفّرًا بشكلٍ صحيح باستخدام التشفير على مستوى عنوان URL، وأن يستخدم بروتوكول HTTP أو HTTPS، ولا يمكن أن يكون رابطًا ديناميكيًا آخر.
setDomainUriPrefix بادئة عنوان URL للرابط الديناميكي، والتي يمكنك العثور عليها في "وحدة تحكّم Firebase" يبدو نطاق الرابط الديناميكي مثل الأمثلة التالية:
https://example.com/link
https://example.page.link
AndroidParameters
setFallbackUrl الرابط الذي يتم فتحه عندما لا يكون التطبيق مثبَّتًا حدِّد هذا الخيار لتنفيذ إجراء آخر غير تثبيت تطبيقك من "متجر Play" عندما لا يكون التطبيق مثبَّتًا، مثل فتح إصدار الويب المتوافق مع الأجهزة الجوّالة من المحتوى، أو عرض صفحة ترويجية لتطبيقك.
setMinimumVersion الرمز versionCode لأدنى إصدار من تطبيقك يمكنه فتح الـ رابط. إذا كان التطبيق المثبَّت إصدارًا أقدم، يتم نقل المستخدم إلى متجر Play لترقية التطبيق.
IosParameters
setAppStoreId رقم تعريف تطبيقك في App Store، والذي يُستخدم لإرسال المستخدمين إلى App Store عندما لا يكون التطبيق مثبَّتًا
setFallbackUrl الرابط الذي يتم فتحه عندما لا يكون التطبيق مثبَّتًا حدِّد هذا الخيار لتنفيذ إجراء آخر غير تثبيت تطبيقك من App Store عندما لا يكون التطبيق مثبَّتًا، مثل فتح إصدار الويب المتوافق مع الأجهزة الجوّالة من المحتوى، أو عرض صفحة ترويجية لتطبيقك.
setCustomScheme مخطّط URL مخصّص لتطبيقك، إذا تم تحديده ليكون مختلفًا عن معرِّف الحزمة لتطبيقك
setIpadFallbackUrl الرابط الذي يتم فتحه على أجهزة iPad عندما لا يكون التطبيق مثبَّتًا حدِّد هذا الخيار لتنفيذ إجراء آخر غير تثبيت تطبيقك من App Store عندما لا يكون التطبيق مثبَّتًا، مثل فتح إصدار الويب من المحتوى، أو عرض صفحة ترويجية لتطبيقك.
setIpadBundleId رقم تعريف حزمة تطبيق iOS الذي سيتم استخدامه على أجهزة iPad لفتح الرابط يجب ربط التطبيق بمشروعك من صفحة "نظرة عامة" في "وحدة تحكّم Firebase".
setMinimumVersion رقم الإصدار لأدنى إصدار من تطبيقك يمكنه فتح الـ رابط. يتم تمرير هذه العلامة إلى تطبيقك عند فتحه، ويجب أن يقرّر تطبيقك الإجراء الذي سيتخذه بشأنها.
NavigationInfoParameters
setForcedRedirectEnabled إذا تم ضبط هذه المَعلمة على "1"، سيتم تخطّي صفحة معاينة التطبيق عند فتح الرابط الديناميكي، وسيتم بدلاً من ذلك إعادة التوجيه إلى التطبيق أو المتجر. يمكن لصفحة معاينة التطبيق (المفعّلة تلقائيًا) إرسال المستخدمين بشكلٍ أكثر موثوقية إلى الوجهة الأنسب عندما يفتحون روابط ديناميكية في التطبيقات. ومع ذلك، إذا كنت تتوقّع فتح رابط ديناميكي في التطبيقات فقط التي يمكنها فتح الروابط الديناميكية بشكلٍ موثوق بدون هذه الصفحة، يمكنك إيقافها باستخدام هذه المَعلمة. لن تؤثّر هذه المَعلمة في سلوك الرابط الديناميكي إلا على أجهزة iOS.
SocialMetaTagParameters
setTitle العنوان الذي سيتم استخدامه عند مشاركة الرابط الديناميكي في منشور على وسائل التواصل الاجتماعي
setDescription الوصف الذي سيتم استخدامه عند مشاركة الرابط الديناميكي في منشور على وسائل التواصل الاجتماعي
setImageUrl عنوان URL لصورة ذات صلة بهذا الرابط يجب أن تكون الصورة بحجم 300×200 بكسل على الأقل، وأقل من 300 كيلوبايت.
GoogleAnalyticsParameters
setSource
setMedium
setCampaign
setTerm
setContent
مَعلمات "إحصاءات Google Play" يتم تمرير هذه المَعلمات (`utm_source` و`utm_medium` و `utm_campaign` و`utm_term` و`utm_content`) إلى "متجر Play" بالإضافة إلى إلحاقها بحمولة الرابط.
ItunesConnectAnalyticsParameters
setProviderToken
setAffiliateToken
setCampaignToken
مَعلمات "إحصاءات iTunes Connect" يتم تمرير هذه المَعلمات (`pt`، `at`، و`ct`) إلى App Store.