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 sự 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 các chương trình khuyến mại 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 dự án Firebase mới và cài đặt SDK liên kết động 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 phần tử của nội dung bạn muốn có thể chia sẻ được, hãy tạo một Liên kết động .

Khi tạo Liên kết động, bạn sẽ cần cung cấp URL HTTP hoặc HTTPS làm thông số link sẽ được sử dụng để xác định nội dung 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ụ: để cho biết 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 chia sẻ các liên kết này, bạn có thể muốn sử dụng API trình rút ngắn URL liên kết động Firebase để tạo các URL trông thân thiện hơn. Một Liên kết Động ngắn trông giống như ví dụ sau:

https://example.page.link/WXYZ

Cho dù bạn sử dụng liên kết nào, khi người dùng mở Liên kết động trên thiết bị của họ, ứng dụng được chỉ định bởi thông số apn (trên Android) hoặc thông số ibiisi (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 Firebase này không khả dụng trên các mục tiêu macOS, Mac Catalyst, tvOS hoặc 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 Firebase này không khả dụng trên các mục tiêu macOS, Mac Catalyst, tvOS hoặc 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 Firebase này không khả dụng trên các mục tiêu macOS, Mac Catalyst, tvOS hoặc 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 Firebase này không khả dụng trên các mục tiêu macOS, Mac Catalyst, tvOS hoặc 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 thuận lợi hơn cho việc chia sẻ trên mạng xã hội, bạn có thể thêm siêu dữ liệu xem trước phương tiện truyền thông xã hội vào liên kết động sẽ được hiển thị cùng với liên kết trong các kênh xã hội chính.

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 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 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 Firebase này không khả dụng trên các mục tiêu macOS, Mac Catalyst, tvOS hoặc 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 Firebase này không khả dụng trên các mục tiêu macOS, Mac Catalyst, tvOS hoặc 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 kèm theo 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 tự mình thử nghiệm điều này để tìm ra sự cân bằng tốt nhất cho ứng dụng của mình và nếu không chắc chắn, bạn luôn có thể sử dụng dịch vụ như Cấu hình từ xa để cho phép bạn thay đổi các giá trị văn bản sau khi khởi chạy ứng dụng.

Nhanh

Lưu ý: Sản phẩm Firebase này không khả dụng trên các mục tiêu macOS, Mac Catalyst, tvOS hoặc 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 Firebase này không khả dụng trên các mục tiêu macOS, Mac Catalyst, tvOS hoặc 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. Để triển khai đầy đủ quy trình mời này, hãy xem các 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à spam hơn
  • 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 triển khai application:continueUserActivity:restorationHandler: method. Trong trình xử lý khôi phục, bạn có thể lấy Liên kết động bằng cách gọi handleUniversalLink:completion: Nếu một Liên kết động đã được chuyển đến ứng dụng của bạn, bạn có thể lấy nó từ thuộc tính url của FIRDynamicLink . Ví dụ:

Objective-C

Lưu ý: Sản phẩm Firebase này không khả dụng trên các mục tiêu macOS, Mac Catalyst, tvOS hoặc 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 Firebase này không khả dụng trên các mục tiêu macOS, Mac Catalyst, tvOS hoặc 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: để nhận các Liên kết động được chuyển đến ứng dụng của bạn dưới dạng URL lược đồ tùy chỉnh. Ví dụ:

Objective-C

Lưu ý: Sản phẩm Firebase này không khả dụng trên các mục tiêu macOS, Mac Catalyst, tvOS hoặc 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 Firebase này không khả dụng trên các mục tiêu macOS, Mac Catalyst, tvOS hoặc 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 tham số link , bạn có thể hiển thị nội dung được liên kết cho người nhận hoặc xử lý dữ liệu được chỉ định bởi tham số theo một số cách khác. Thư viện định tuyến URL chẳng hạn như JLRoutes có thể giúp thực hiện nhiệm vụ này.

Nếu bạn đang nhận được một liên kết dành cho một người nhận cụ thể, hãy đảm bảo rằng độ tin cậy đối sánh của Liên kết động là strong trước khi chạy bất kỳ logic nào dành cho người dùng cụ thể.

Android

Trên Android, bạn sử dụng phương thức getDynamicLink() để lấy dữ liệu từ 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 tham số link , bạn có thể hiển thị nội dung được liên kết cho người nhận hoặc xử lý dữ liệu được chỉ định bởi tham số theo 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.