Mời người dùng vào ứng dụng của bạn

Một trong những cách hiệu quả nhất để thu hút người dùng mới cài đặt ứng dụng của bạn là cho phép người dùng chia sẻ nội dung từ ứng dụng của bạn với bạn bè của họ. Với Liên kết động, bạn có thể tạo trải nghiệm chia sẻ giữa người dùng với người dùng tuyệt vời: người dùng nhận được đề xuất nội dung từ bạn bè của họ có thể nhấp vào liên kết và được đưa trực tiếp đến nội dung được chia sẻ trong ứng dụng của bạn, ngay cả khi họ phải truy cập Ứng dụng Store hoặc Cửa hàng Google Play để cài đặt ứng dụng của bạn trước.

Bằng cách kết hợp mức độ gắn bó của giới thiệu người dùng và tính bền bỉ của Liên kết động, bạn có thể tạo các tính năng giới thiệu và chia sẻ giữa người dùng với người dùng để mang lại người dùng mới bằng cách thu hút họ trực tiếp vào nội dung ứng dụng của bạn hoặc phân phát quảng cáo cùng có lợi cho người giới thiệu và người được giới thiệu .

Các lợi ích chính

  • Người dùng mới mở ứng dụng của bạn lần đầu tiên sẽ có được trải nghiệm lần đầu tiên được tùy chỉnh theo ngữ cảnh dựa trên những gì bạn bè của họ muốn chia sẻ với họ. Ví dụ: bạn có thể hiển thị nội dung đã được chia sẻ với họ hoặc tự động kết nối họ với người bạn đã mời họ.
  • Giúp người dùng dễ dàng chia sẻ nội dung với bạn bè của họ trên các nền tảng cho dù bạn bè của họ có cài đặt ứng dụng của bạn hay không.

Đây là cách bắt đầu!

Thiết lập một dự án căn cứ hỏa lực mới và cài đặt Links động SDK vào ứng dụng của bạn.

Việc cài đặt SDK liên kết động cho phép Firebase truyền dữ liệu về Liên kết động tới ứng dụng, kể cả sau khi người dùng cài đặt ứng dụng.

Bây giờ là lúc thiết lập các liên kết mà người dùng có thể gửi cho bạn bè của họ. Đừng lo lắng nếu bạn bè của người dùng của bạn chưa cài đặt ứng dụng; Liên kết động có thể giải quyết vấn đề đó cho bạn.

Đối với mỗi yếu tố của nội dung mà bạn muốn được chia sẻ, tạo một liên kết động .

Khi bạn tạo Link động, bạn sẽ cần phải cung cấp một HTTP hoặc HTTPS URL là link tham số sẽ được sử dụng để xác định các nội dung mà bạn đang chia sẻ. Nếu bạn có một trang web có nội dung tương đương, bạn nên sử dụng các URL của trang web của mình. Điều này sẽ đảm bảo rằng các liên kết này hiển thị chính xác trên nền tảng không hỗ trợ Liên kết động, chẳng hạn như trình duyệt trên máy tính để bàn. Ví dụ:

https://example.page.link/?link=https://www.example.com/content?item%3D1234&apn=com.example.android&ibi=com.example.ios&isi=12345

Bạn cũng có thể thêm thông tin bổ sung vào tải dữ liệu bằng cách thêm các thông số được mã hóa URL — ví dụ: để chỉ ra rằng liên kết dành cho một người dùng cụ thể, chẳng hạn như trong lời mời tham gia trò chơi.

https://example.page.link/?link=https://www.example.com/invitation?gameid%3D1234%26referrer%3D555&apn=com.example.android&ibi=com.example.ios&isi=12345

Trước khi bạn chia sẻ những liên kết này, bạn có thể muốn sử dụng shortener API căn cứ hỏa lực động Liên kết URL để tạo URL thân thiện hơn-tìm kiếm. Một ngắn vẻ Dynamic Link như ví dụ sau:

https://example.page.link/WXYZ

Cho dù liên kết bạn sử dụng, khi người dùng mở các liên kết động trên thiết bị của họ, ứng dụng theo quy định của apn tham số (trên Android) hoặc ibiisi thông số (trên iOS) sẽ đưa người dùng đến Cửa hàng Play hoặc App Store để cài đặt ứng dụng nếu nó chưa được cài đặt. Sau đó, khi ứng dụng được cài đặt và mở, URL được chỉ định trong thông số 'liên kết' sẽ được chuyển đến ứng dụng.

Trước tiên, hãy xem ví dụ đơn giản này về ứng dụng trò chuyện trong phòng như Hangouts tạo liên kết để mời mọi người vào phòng trò chuyện.

iOS

chat app screenshotchat app screenshot with share sheet

Android

chat app screenshotchat app screenshot with share sheet

Nhanh

Lưu ý: sản phẩm căn cứ hỏa lực này không có sẵn trên hệ điều hành MacOS, Mac Catalyst, tvOS, hoặc mục tiêu watchos.
func generateContentLink() -> URL {
  let baseURL = URL(string: "https://your-custom-name.page.link")!
  let domain = "https://your-app.page.link"
  let linkBuilder = DynamicLinkComponents(link: baseURL, domainURIPrefix: domain)
  linkBuilder?.iOSParameters = DynamicLinkIOSParameters(bundleID: "com.your.bundleID")
  linkBuilder?.androidParameters =
      DynamicLinkAndroidParameters(packageName: "com.your.packageName")


  // Fall back to the base url if we can't generate a dynamic link.
  return linkBuilder?.link ?? baseURL
}

Objective-C

Lưu ý: sản phẩm căn cứ hỏa lực này không có sẵn trên hệ điều hành MacOS, Mac Catalyst, tvOS, hoặc mục tiêu watchos.
- (NSURL *)generateContentLink {
  NSURL *baseURL = [NSURL URLWithString:@"https://your-custom-name.page.link"];
  NSString *domain = @"https://your-app.page.link";
  FIRDynamicLinkComponents *builder = [[FIRDynamicLinkComponents alloc] initWithLink:baseURL domainURIPrefix:domain];
  builder.iOSParameters = [FIRDynamicLinkIOSParameters parametersWithBundleID:@"com.your.bundleID"];
  builder.androidParameters = [FIRDynamicLinkAndroidParameters parametersWithPackageName:@"com.your.packageName"];

  // Fall back to the base url if we can't generate a dynamic link.
  return builder.link ?: baseURL;
}

Java

public static Uri generateContentLink() {
    Uri baseUrl = Uri.parse("https://your-custom-name.page.link");
    String domain = "https://your-app.page.link";

    DynamicLink link = FirebaseDynamicLinks.getInstance()
            .createDynamicLink()
            .setLink(baseUrl)
            .setDomainUriPrefix(domain)
            .setIosParameters(new DynamicLink.IosParameters.Builder("com.your.bundleid").build())
            .setAndroidParameters(new DynamicLink.AndroidParameters.Builder("com.your.packageName").build())
            .buildDynamicLink();

    return link.getUri();
}

Kotlin + KTX

fun generateContentLink(): Uri {
    val baseUrl = Uri.parse("https://your-custom-name.page.link")
    val domain = "https://your-app.page.link"

    val link = FirebaseDynamicLinks.getInstance()
            .createDynamicLink()
            .setLink(baseUrl)
            .setDomainUriPrefix(domain)
            .setIosParameters(DynamicLink.IosParameters.Builder("com.your.bundleid").build())
            .setAndroidParameters(DynamicLink.AndroidParameters.Builder("com.your.packageName").build())
            .buildDynamicLink()

    return link.uri
}

Sau khi có liên kết động, bạn có thể thêm nút chia sẻ vào giao diện người dùng của mình, nút này sẽ khởi chạy quy trình chia sẻ nền tảng tiêu chuẩn:

Nhanh

Lưu ý: sản phẩm căn cứ hỏa lực này không có sẵn trên hệ điều hành MacOS, Mac Catalyst, tvOS, hoặc mục tiêu watchos.
lazy private var shareController: UIActivityViewController = {
  let activities: [Any] = [
    "Learn how to share content via Firebase",
    URL(string: "https://firebase.google.com")!
  ]
  let controller = UIActivityViewController(activityItems: activities,
                                            applicationActivities: nil)
  return controller
}()

@IBAction func shareButtonPressed(_ sender: Any) {
  let inviteController = UIStoryboard(name: "Main", bundle: nil)
    .instantiateViewController(withIdentifier: "InviteViewController")
  self.navigationController?.pushViewController(inviteController, animated: true)
}

Objective-C

Lưu ý: sản phẩm căn cứ hỏa lực này không có sẵn trên hệ điều hành MacOS, Mac Catalyst, tvOS, hoặc mục tiêu watchos.
- (UIActivityViewController *)shareController {
  if (_shareController == nil) {
    NSArray *activities = @[
      @"Learn how to share content via Firebase",
      [NSURL URLWithString:@"https://firebase.google.com"]
    ];
    UIActivityViewController *controller = [[UIActivityViewController alloc] initWithActivityItems:activities applicationActivities:nil];
    _shareController = controller;
  }
  return _shareController;
}

- (IBAction)shareLinkButtonPressed:(UIView *)sender {
  if (![sender isKindOfClass:[UIView class]]) {
    return;
  }

  self.shareController.popoverPresentationController.sourceView = sender;
  [self presentViewController:self.shareController animated:YES completion:nil];
}

Java

private void onShareClicked() {
    Uri link = DynamicLinksUtil.generateContentLink();

    Intent intent = new Intent(Intent.ACTION_SEND);
    intent.setType("text/plain");
    intent.putExtra(Intent.EXTRA_TEXT, link.toString());

    startActivity(Intent.createChooser(intent, "Share Link"));
}

Kotlin + KTX

private fun onShareClicked() {
    val link = DynamicLinksUtil.generateContentLink()

    val intent = Intent(Intent.ACTION_SEND)
    intent.type = "text/plain"
    intent.putExtra(Intent.EXTRA_TEXT, link.toString())

    startActivity(Intent.createChooser(intent, "Share Link"))
}

Trong ví dụ này, giao diện người dùng chia sẻ mặc định tự động hiển thị danh sách các ứng dụng để chia sẻ liên kết, vì vậy, đó là thứ bạn có thể thiết lập trong ứng dụng của riêng mình chỉ với một vài dòng mã.

Thay vì để người dùng chọn địa chỉ liên hệ và soạn tin nhắn trong ứng dụng của bạn, những hành động này được ủy quyền cho ứng dụng mà họ chọn từ hộp thoại chia sẻ. Ngoài ra, việc ủy ​​quyền chia sẻ cho các ứng dụng khác có nghĩa là bạn không phải yêu cầu người dùng cấp quyền liên hệ và cho phép người dùng chọn từ danh sách liên hệ mở rộng trong ứng dụng họ đã chọn. Để tạo điều kiện tốt hơn chia sẻ xã hội, bạn có thể thêm phương tiện truyền thông xã hội preview siêu dữ liệu để liên kết động của bạn sẽ được hiển thị cùng với các liên kết trong các kênh xã hội lớn.

Tuy nhiên, đôi khi, chỉ gửi một liên kết không có văn bản là không đủ cho một giới thiệu hấp dẫn. Bằng cách kèm theo liên kết với một thông điệp ngắn và, nếu có thể, một bản trình bày phong phú hơn, người dùng có thể hiểu được đề xuất giá trị của giới thiệu khi họ nhận được nó:

iOS

rewarded referral screenshotrewarded referral screenshot with share sheet

Android

rewarded referral screenshotrewarded referral screenshot with share sheet

Mặc dù điều này phức tạp hơn ví dụ trước, nhưng cách tiếp cận sẽ ít nhiều giống nhau. Trên màn hình này có một đồ họa lớn với đề xuất giá trị của lời mời và các nút để chia sẻ với các kênh xã hội lớn. Có một số điểm dư thừa trong luồng giao diện người dùng này — một số kênh chia sẻ được trình bày riêng lẻ để cho phép tùy chỉnh thông điệp kênh cụ thể hơn, chẳng hạn như thêm dòng chủ đề vào lời mời qua email. Trong menu mời này, chúng tôi:

  • Trình bày email, tin nhắn văn bản và sao chép các nút chia sẻ liên kết, đồng thời tùy chỉnh các thông điệp của chúng một cách thích hợp. Email sẽ bao gồm một chủ đề và có thể bao gồm một phần nội dung dài hơn với các dấu ngắt dòng, hình ảnh và khoảng trắng; văn bản phải bao gồm phần nội dung ngắn hơn với các ngắt dòng nhưng ít khoảng trắng và không có hình ảnh; và sao chép liên kết chỉ nên sao chép liên kết và không có gì khác.
  • Sử dụng giao diện người dùng chia sẻ hệ thống cho mọi thứ khác, bao gồm cả một tin nhắn mời ngắn kèm theo liên kết.
  • Liên kết sâu thông qua lược đồ URL hoặc liên kết chung đến một ứng dụng khác có logic đặc biệt để xử lý lời mời ứng dụng của bạn. Điều này sẽ không hoạt động bên ngoài mối quan hệ đối tác giữa tổ chức của bạn và ứng dụng khác và có thể không phải là một tùy chọn cho các tổ chức nhỏ hơn. Điều đó nói rằng, một số ứng dụng có thể ghi lại công khai hành vi liên kết sâu / phổ quát của chúng. Chúng tôi sẽ triển khai một phiên bản giả của điều này trong mẫu của chúng tôi.

Đầu tiên, hãy xác định một loại nội dung lời mời, loại nội dung này chỉ gói gọn thông tin trong một lời mời và không chứa chức năng nào. Bằng cách này, bạn có thể bắt đầu với các loại dữ liệu và suy nghĩ về mã của bạn về cách nó ghép các dữ liệu đó lại với nhau.

Nhanh

Lưu ý: sản phẩm căn cứ hỏa lực này không có sẵn trên hệ điều hành MacOS, Mac Catalyst, tvOS, hoặc mục tiêu watchos.
/// The content within an invite, with optional fields to accommodate all presenters.
/// This type could be modified to also include an image, for sending invites over email.
struct InviteContent {

  /// The subject of the message. Not used for invites without subjects, like text message invites.
  var subject: String?

  /// The body of the message. Indispensable content should go here.
  var body: String?

  /// The URL containing the invite. In link-copy cases, only this field will be used.
  var link: URL

}

Objective-C

Lưu ý: sản phẩm căn cứ hỏa lực này không có sẵn trên hệ điều hành MacOS, Mac Catalyst, tvOS, hoặc mục tiêu watchos.
/// The content within an invite, with optional fields to accommodate all presenters.
/// This type could be modified to also include an image, for sending invites over email.
@interface InviteContent : NSObject <NSCopying>

/// The subject of the message. Not used for invites without subjects, like text message invites.
@property (nonatomic, readonly, nullable) NSString *subject;

/// The body of the message. Indispensable content should go here.
@property (nonatomic, readonly, nullable) NSString *body;

/// The URL containing the invite. In link-copy cases, only this field will be used.
@property (nonatomic, readonly) NSURL *link;

- (instancetype)initWithSubject:(nullable NSString *)subject
                           body:(nullable NSString *)body
                           link:(NSURL *)link NS_DESIGNATED_INITIALIZER;

- (instancetype)init NS_UNAVAILABLE;

@end

Java

/**
 * The content of an invitation, with optional fields to accommodate all presenters.
 * This type could be modified to also include an image, for sending invites over email.
 */
public class InviteContent {

    /**
     * The subject of the message. Not used for invites without subjects, like SMS.
     **/
    @Nullable
    public final String subject;

    /**
     * The body of the message. Indispensable content should go here.
     **/
    @Nullable
    public final String body;

    /**
     * The URL containing the link to invite. In link-copy cases, only this field will be used.
     **/
    @NonNull
    public final Uri link;

    public InviteContent(@Nullable String subject, @Nullable String body, @NonNull Uri link) {
        // ...
    }

}

Kotlin + KTX

/**
 * The content of an invitation, with optional fields to accommodate all presenters.
 * This type could be modified to also include an image, for sending invites over email.
 */
data class InviteContent(
    /** The subject of the message. Not used for invites without subjects, like SMS.  */
    val subject: String?,
    /** The body of the message. Indispensable content should go here.  */
    val body: String?,
    /** The URL containing the link to invite. In link-copy cases, only this field will be used.  */
    val link: Uri
)

Phần dữ liệu bắt buộc duy nhất ở đây là URL, nếu không có URL, bạn không thể mời người dùng vào ứng dụng của mình. Các phần dữ liệu khác có cấu trúc rõ ràng để gửi email, điều này khiến chúng hơi khó xử trong một số trường hợp khác - khi gửi lời mời qua văn bản, phần nổi bật đi kèm với liên kết có thể đọc tương tự như chủ đề email, nhưng khi chia sẻ lên mạng xã hội văn bản đi kèm liên kết có thể giống nội dung email hơn. Bạn sẽ phải thử nghiệm với chính mình này để tìm sự cân bằng tốt nhất cho ứng dụng của bạn, và nếu bạn không chắc chắn, bạn luôn có thể sử dụng một dịch vụ như từ xa Config để cho phép bạn thay đổi các giá trị văn bản sau khi ra mắt ứng dụng.

Nhanh

Lưu ý: sản phẩm căn cứ hỏa lực này không có sẵn trên hệ điều hành MacOS, Mac Catalyst, tvOS, hoặc mục tiêu watchos.
/// A type responsible for presenting an invite given using a specific method
/// given the content of the invite.
protocol InvitePresenter {

  /// The name of the presenter. User-visible.
  var name: String { get }

  /// An icon representing the invite method. User-visible.
  var icon: UIImage? { get }

  /// Whether or not the presenter's method is available. iOS devices that aren't phones
  /// may not be able to send texts, for example.
  var isAvailable: Bool { get }

  /// The content of the invite. Some of the content type's fields may be unused.
  var content: InviteContent { get }

  /// Designated initializer.
  init(content: InviteContent, presentingController: UIViewController)

  /// This method should cause the presenter to present the invite and then handle any actions
  /// required to complete the invite flow.
  func sendInvite()

}

Objective-C

Lưu ý: sản phẩm căn cứ hỏa lực này không có sẵn trên hệ điều hành MacOS, Mac Catalyst, tvOS, hoặc mục tiêu watchos.
/// A type responsible for presenting an invite given using a specific method
/// given the content of the invite.
@protocol InvitePresenter <NSObject>

/// The name of the presenter. User-visible.
@property (nonatomic, readonly) NSString *name;

/// An icon representing the invite method. User-visible.
@property (nonatomic, readonly, nullable) UIImage *icon;

/// Whether or not the presenter's method is available. iOS devices that aren't phones
/// may not be able to send texts, for example.
@property (nonatomic, readonly) BOOL isAvailable;

/// The content of the invite. Some of the content type's fields may be unused.
@property (nonatomic, readonly) InviteContent *content;

/// Designated initializer.
- (instancetype)initWithContent:(InviteContent *)content presentingViewController:(UIViewController *)controller;

/// This method should cause the presenter to present the invite and then handle any actions
/// required to complete the invite flow.
- (void)sendInvite;

@end

Java

/**
 * Presents the invite using a specific method, such as email or social.
 */
public class InvitePresenter {

    /**
     * The user-visible name of the invite method, like 'Email' or 'SMS'
     **/
    public final String name;

    /**
     * An icon representing the invite method.
     **/
    @DrawableRes
    public final int icon;

    /**
     * Whether or not the method is available on this device. For example, SMS is phone only.
     **/
    public final boolean isAvailable;

    /**
     * The Content of the invitation
     **/
    public final InviteContent content;

    public InvitePresenter(String name, @DrawableRes int icon, boolean isAvailable, InviteContent content) {
        // ...
    }

    /**
     * Send the invitation using the specified method.
     */
    public void sendInvite(Context context) {
        // ...
    }

}

Kotlin + KTX

/**
 * Presents the invite using a specific method, such as email or social.
 */
open class InvitePresenter(
    /** The user-visible name of the invite method, like 'Email' or 'SMS'  */
    val name: String,
    /** An icon representing the invite method.  */
    @param:DrawableRes @field:DrawableRes
    val icon: Int,
    /** Whether or not the method is available on this device. For example, SMS is phone only.  */
    val isAvailable: Boolean,
    /** The Content of the invitation  */
    val content: InviteContent
) {
    /**
     * Send the invitation using the specified method.
     */
    open fun sendInvite(context: Context) {
        // ...
    }
}

Bây giờ tất cả những gì còn lại là cắm nó vào một thành phần giao diện người dùng mà bạn chọn. Đối với việc thực hiện đầy đủ các dòng chảy mời này, vui lòng xem mẫu trên GitHub dành cho iOSAndroid .

Đây là tất cả các phương pháp cho phép người dùng của bạn gửi lời mời đến bạn bè của họ, đây là giải pháp lời mời nhẹ nhàng nhất. Nhiều ứng dụng phổ biến cũng gửi lời mời bằng cách gửi email thông qua chương trình phụ trợ của riêng chúng, yêu cầu tích hợp dịch vụ gửi thư, nhưng cung cấp một số lợi ích không có sẵn chỉ với một số nhược điểm nhỏ.

Ưu điểm:

  • Cho phép các email có đánh dấu phức tạp mà người dùng của bạn không thể sửa đổi trước khi gửi.
  • Cho phép theo dõi / phân tích chi tiết hơn (tức là gửi thành công và thất bại trên chương trình phụ trợ của bạn).

Nhược điểm:

  • Email có nhiều khả năng bị gắn cờ là thư rác
  • Yêu cầu tích hợp với dịch vụ gửi email
  • Yêu cầu quyền liên hệ trong ứng dụng

Nói chung, gửi lời mời thông qua dịch vụ gửi email của riêng bạn cung cấp trải nghiệm lời mời nhất quán hơn và có tiềm năng phong phú hơn với chi phí linh hoạt.

Mở nội dung được liên kết trong ứng dụng của bạn

Cuối cùng, bạn cần nhận được liên kết được chuyển đến ứng dụng của mình để bạn có thể hiển thị nội dung được liên kết cho người nhận. Điều này thật dễ dàng bằng cách sử dụng SDK liên kết động:

iOS

Trên iOS, bạn nhận được liên kết động bằng cách thực hiện các application:continueUserActivity:restorationHandler: phương pháp. Trong xử lý phục hồi, bạn có thể nhận được liên kết động bằng cách gọi handleUniversalLink:completion: . Nếu một liên kết động đã được thông qua để ứng dụng của bạn, bạn có thể lấy nó từ url tài sản của FIRDynamicLink . Ví dụ:

Objective-C

Lưu ý: sản phẩm căn cứ hỏa lực này không có sẵn trên hệ điều hành MacOS, Mac Catalyst, tvOS, hoặc mục tiêu watchos.
[[FIRDynamicLinks dynamicLinks]
    handleUniversalLink:userActivity.webpageURL
             completion:^(FIRDynamicLink * _Nullable dynamicLink,
                          NSError * _Nullable error) {
      NSString *link = dynamicLink.url;
      BOOL strongMatch = dynamicLink.matchConfidence == FIRDynamicLinkMatchConfidenceStrong;
      // ...
    }];

Nhanh

Lưu ý: sản phẩm căn cứ hỏa lực này không có sẵn trên hệ điều hành MacOS, Mac Catalyst, tvOS, hoặc mục tiêu watchos.
FIRDynamicLinks.dynamicLinks()?.handleUniversalLink(userActivity.webpageURL!) { (dynamiclink, error) in
    let link = dynamicLink.url
    let strongMatch = dynamicLink.matchConfidence == FIRDynamicLinkMatchConfidenceStrong
    // ...
}

Ngoài ra, bạn phải gọi dynamicLinkFromCustomSchemeURL: trong application:openURL:options: phương pháp để nhận động Liên kết truyền cho ứng dụng của bạn như URL chương trình tùy chỉnh. Ví dụ:

Objective-C

Lưu ý: sản phẩm căn cứ hỏa lực này không có sẵn trên hệ điều hành MacOS, Mac Catalyst, tvOS, hoặc mục tiêu watchos.
FIRDynamicLink *dynamicLink = [[FIRDynamicLinks dynamicLinks] dynamicLinkFromCustomSchemeURL:url];
if (dynamicLink) {
  NSString *link = dynamicLink.url;
  BOOL strongMatch = dynamicLink.matchConfidence == FIRDynamicLinkMatchConfidenceStrong;
  // ...
  return YES;
}

Nhanh

Lưu ý: sản phẩm căn cứ hỏa lực này không có sẵn trên hệ điều hành MacOS, Mac Catalyst, tvOS, hoặc mục tiêu watchos.
let dynamicLink = FIRDynamicLinks.dynamicLinks()?.dynamicLinkFromCustomSchemeURL(url)
if let dynamicLink = dynamicLink {
  let link = dynamicLink.url
  let strongMatch = dynamicLink.matchConfidence == FIRDynamicLinkMatchConfidenceStrong
  // ...
  return true
}

Bây giờ bạn có giá trị của các link tham số, bạn có thể hiển thị các nội dung liên quan đến người nhận, hoặc xử lý dữ liệu định bởi tham số trong một số cách khác. Một URL định tuyến thư viện như JLRoutes có thể giúp với nhiệm vụ này.

Nếu bạn nhận được một liên kết dành cho một người nhận cụ thể, đảm bảo rằng sự tự tin trận đấu Link động là strong trước khi chạy bất kỳ logic sử dụng cụ thể.

Android

Trên Android, bạn sử dụng getDynamicLink() phương pháp để lấy dữ liệu từ các liên kết động:

Java

FirebaseDynamicLinks.getInstance()
        .getDynamicLink(getIntent())
        .addOnCompleteListener(new OnCompleteListener<PendingDynamicLinkData>() {
            @Override
            public void onComplete(@NonNull Task<PendingDynamicLinkData> task) {
                if (!task.isSuccessful()) {
                    // Handle error
                    // ...
                }

                FirebaseAppInvite invite = FirebaseAppInvite.getInvitation(task.getResult());
                if (invite != null) {
                    // Handle invite
                    // ...
                }
            }
        });

Kotlin + KTX

Firebase.dynamicLinks
        .getDynamicLink(intent)
        .addOnCompleteListener { task ->
            if (!task.isSuccessful) {
                // Handle error
                // ...
            }

            val invite = FirebaseAppInvite.getInvitation(task.result)
            if (invite != null) {
                // Handle invite
                // ...
            }
        }

Bây giờ bạn có giá trị của các link tham số, bạn có thể hiển thị các nội dung liên quan đến người nhận, hoặc xử lý dữ liệu định bởi tham số trong một số cách khác. Thư viện định tuyến URL có thể giúp thực hiện nhiệm vụ này.