在用户之间共享内容

要吸引新用户安装您的应用,最有效的方式之一是鼓励现有用户与好友分享应用中的内容。借助动态链接,您可以打造出色的用户间分享体验,即用户在收到好友推荐的内容后,点击链接便可直接访问您应用中分享的内容(但是他们可能必须先转到 App Store 或 Google Play 商店安装您的应用)。

主要优势

  • 第一次打开您的应用的新用户可享受您为其特别定制的首次运行体验。例如,您可以显示分享给他们的内容,或者自动在这些用户与邀请他们的朋友之间建立联系。
  • 让用户可以向多个平台上的好友轻松分享内容,无论这些好友是否安装了您的应用。

下面介绍如何开始使用此功能。

设置 Firebase 和 Dynamic Links SDK

建立一个新的 Firebase 项目,并将 Dynamic Links SDK 安装到您的应用中。请分别参阅适用于 iOSAndroidC++Unity 的安装说明。安装 Dynamic Links SDK 后,Firebase 就能向应用传递有关动态链接的数据,包括在用户安装应用后传递数据。如果没有此 SDK,则应用无法将“安装后”的用户与“安装前”的点击关联在一起。

创建动态链接

现在我们来设置用户可发送给好友的链接。如果您用户的好友还没有安装应用,您也不用担心,因为动态链接可以帮您搞定。

为应用内每个可供分享的内容元素生成动态链接

创建动态链接时,您需要提供 HTTP 或 HTTPS 网址作为 link 参数,用于标识您要分享的内容。如果您的网站上具有同等内容,您应当使用该网站的网址。这将确保这些链接在不支持动态链接的平台(如桌面浏览器)上正确打开。例如:

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

您还可以通过向网址中添加网址编码参数来发送数据负载,比如指明该链接针对的是特定人员(如在游戏邀请中)。

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

在分享这些链接之前,您可能需要使用 Firebase Dynamic Links URL Shortener API 来生成更简练的网址。短动态链接的形式如下所示:

https://example.page.link/WXYZ

无论您发送的是完整的链接还是短链接,当用户在其设备上打开动态链接时,如果尚未安装 apn 参数(针对 Android)或者 ibiisi 参数(针对 iOS)所指定的应用,则用户会被引导至 Play 商店或 App Store 安装该应用。随后应用打开,系统会向其传递 link 参数中指定的网址。

添加用于发送动态链接的“分享”按钮

接下来,将“分享”按钮添加到您应用的内容中,以便用户通过所选应用将动态链接发送给好友。接收者可以打开动态链接并查看分享的内容,但在此之前他们可能需要先安装应用。

iOS

在 iOS 设备上,您的“分享”按钮可能会提供一个 UIActivityViewController

Objective-C

NSString *myDynamicLink = LINK_TO_SHARE;
NSString *msg = [NSString stringWithFormat:@"Hey, check this out: %@", myDynamicLink];
UIActivityViewController *shareSheet =
    [[UIActivityViewController alloc] initWithActivityItems:@[ msg ]
                                      applicationActivities:nil];
[shareSheet popoverPresentationController].sourceView = self.view
[self presentViewController:shareSheet animated:YES completion:nil];

Swift

let myDynamicLink = LINK_TO_SHARE;
let msg = "Hey, check this out: " + myDynamicLink
let shareSheet = UIActivityViewController(activityItems: [ msg ], applicationActivities: nil)
shareSheet.popoverPresentationController?.sourceView = self.view
self.presentViewController(shareSheet, animated: true, completion: nil)

Android

在 Android 设备上,您的“分享”按钮会启动一个含 ACTION_SEND Intent 的 Activity:

Intent sendIntent = new Intent();
String msg = "Hey, check this out: " + myDynamicLink;
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_TEXT, msg);
sendIntent.setType("text/plain");
startActivity(sendIntent);

在您的应用中打开链接的内容

最后,您需要接收被传递至应用的链接,以便将链接对应的内容显示给接收者。使用 Dynamic Links SDK 可以轻松实现此功能:

iOS

在 iOS 上,您可通过实现 application:continueUserActivity:restorationHandler: 方法来接收动态链接。在恢复处理程序中,您可以通过调用 handleUniversalLink:completion: 来获取动态链接。如果已经有一个动态链接传递至您的应用,您可以从 FIRDynamicLinkurl 属性中获取该动态链接。例如:

Objective-C

[[FIRDynamicLinks dynamicLinks]
    handleUniversalLink:userActivity.webpageURL
             completion:^(FIRDynamicLink * _Nullable dynamicLink,
                          NSError * _Nullable error) {
      NSString *link = dynamicLink.url;
      BOOL strongMatch = dynamicLink.matchConfidence == FIRDynamicLinkMatchConfidenceStrong;
      // ...
    }];

Swift

FIRDynamicLinks.dynamicLinks()?.handleUniversalLink(userActivity.webpageURL!) { (dynamiclink, error) in
    let link = dynamicLink.url
    let strongMatch = dynamicLink.matchConfidence == FIRDynamicLinkMatchConfidenceStrong
    // ...
}

此外,您必须在 application:openURL:options: 方法中调用 dynamicLinkFromCustomSchemeURL: 才能收到作为自定义架构网址传递至您的应用的动态链接。例如:

Objective-C

FIRDynamicLink *dynamicLink = [[FIRDynamicLinks dynamicLinks] dynamicLinkFromCustomSchemeURL:url];
if (dynamicLink) {
  NSString *link = dynamicLink.url;
  BOOL strongMatch = dynamicLink.matchConfidence == FIRDynamicLinkMatchConfidenceStrong;
  // ...
  return YES;
}

Swift

let dynamicLink = FIRDynamicLinks.dynamicLinks()?.dynamicLinkFromCustomSchemeURL(url)
if let dynamicLink = dynamicLink {
  let link = dynamicLink.url
  let strongMatch = dynamicLink.matchConfidence == FIRDynamicLinkMatchConfidenceStrong
  // ...
  return true
}

现在您已经获得了 link 参数的值,可以向接收者显示链接的内容,或者以其他方式处理参数指定的数据了。JLRoutes 等网址路由库可以帮助执行此任务。

如果您收到的是面向特定接收者的链接,在运行任何针对特定用户的逻辑之前,请确保动态链接的匹配置信度为 strong

Android

在 Android 设备上,您可以使用 getInvitation() 方法从动态链接中获取数据:

AppInvite.AppInviteApi.getInvitation(mGoogleApiClient, this, false).setResultCallback(/* ... */);

然后,在回调函数中,您可以通过调用 getDeepLink() 方法获取动态链接的 link 参数中传递的数据:

String link = AppInviteReferral.getDeepLink(intent);

现在您已经获得了 link 参数的值,可以向接收者显示链接的内容,或者以其他方式处理参数指定的数据了。网址路由库可以帮助执行此任务。

发送以下问题的反馈:

此网页
需要帮助?请访问我们的支持页面