使用 C++ 创建动态链接

您可以使用 Firebase Dynamic Links API 创建短动态链接或长动态链接。该 API 采用若干个可选的参数结构来构建链接。您也可以基于以前生成的长链接来创建短链接。Firebase Dynamic Links 可生成如下所示的网址:

https://example.page.link/WXYZ

C++ SDK 适用于 Android 和 iOS,但需要针对各个平台进行一些额外设置。

准备工作

在使用 Firebase 动态链接之前,您需要:

  • 注册 C++ 项目并将其配置为使用 Firebase。

    如果您的 C++ 项目已在使用 Firebase,那么该项目已经注册并已配置为使用 Firebase。

  • Firebase C++ SDK 添加到您的 C++ 项目。

请注意,将 Firebase 添加到 C++ 项目需要在 Firebase 控制台中和打开的 C++ 项目中执行若干任务(例如,从控制台下载 Firebase 配置文件,然后将配置文件移动到 C++ 项目中)。

Android

  1. 在 Firebase 控制台中,打开 Dynamic Links 部分。
  2. 如果您尚未接受服务条款并为动态链接设置 URI 前缀,请在收到提示时执行相关操作。

    如果您已有动态链接 URI 前缀,请记下它。在以编程方式创建动态链接时,您需要提供动态链接 URI 前缀。

  3. 推荐:指定可以在您的深层链接和后备链接中使用的网址格式。这样做可以防止未经授权者创建动态链接,从您的网域重定向至您无法控制的网站。请参阅白名单网址格式

iOS

  1. 在 Firebase 控制台中,打开 Dynamic Links 部分。
  2. 如果您尚未接受服务条款并为动态链接设置 URI 前缀,请在收到提示时执行相关操作。

    如果您已有动态链接 URI 前缀,请记下它。在以编程方式创建动态链接时,您需要提供动态链接网域。

  3. Firebase Dynamic Links C++ 客户端库在 iOS 上采用自定义网址方案来处理链接。您必须为您的应用添加自定义网址方案,才可接收动态链接:
    1. 要打开您的项目配置,请在左侧的树状视图中双击项目名称。从目标部分中选择您的应用,再选择信息标签页,然后展开网址类型部分。
    2. 点击 + 按钮,并为您的倒序客户端 ID 添加一个网址方案。要找到这个值,请打开 GoogleService-Info.plist 配置文件,然后查找 REVERSED_CLIENT_ID 键。复制该键的值,并将其粘贴到配置页面上的网址方案框中。将其他字段留空。
    3. 点击 + 按钮,然后添加第二个网址方案。这个值与您应用的软件包 ID 相同。例如,如果您的软件包 ID 为 com.example.ios,请将该值输入网址方案框中。您可以在项目配置的常规标签页(身份 > 软件包标识符)中找到您的应用的软件包 ID。

使用 Firebase 控制台

如果您想生成一个动态链接(无论是出于测试目的,还是为了让您的营销团队轻松创建可以在社交媒体帖子等地方使用的链接),最简单的方法就是访问 Firebase 控制台并按照分步说明手动创建一个。

自定义网域

您可以使用自己的网域(而非 goo.glpage.link 子网域)来更好地控制动态链接的品牌塑造。请按照这些说明为项目设置自定义网域。

使用 Firebase Dynamic Links API

创建并初始化应用

您需要先创建并初始化一个 firebase::App 对象,然后才能创建动态链接。

包含 firebase::App 的头文件:

#include "firebase/app.h"

下一部分因平台而异:

Android

创建 firebase::App,将 JNI 环境和 jobject 引用以参数形式传递到 Java Activity:

app = ::firebase::App::Create(::firebase::AppOptions("APPLICATION NAME"), jni_env, activity);

iOS

创建 firebase::App

app = ::firebase::App::Create(::firebase::AppOptions("APPLICATION NAME"));

初始化 Dynamic Links 库

创建动态链接之前,您必须先初始化动态链接库:

::firebase::dynamic_links::Initialize(app, null);

使用参数创建长动态链接

要创建动态链接,请创建一个 DynamicLinkComponents 对象,设置任何用于额外配置的可选成员,然后将该对象传递到 dynamic_links::GetShortLinkdynamic_links::GetLongLink

下面这个极为简单的示例创建了一个指向 https://www.example.com/ 的长动态链接,此链接会在您的 Android 应用 com.example.android.package_name 和 iOS 应用 com.example.ios 中打开:

firebase::dynamic_links::IOSParameters ios_parameters("com.example.ios");

firebase::dynamic_links::AndroidParameters android_parameters(
    "com.example.android.package_name");

firebase::dynamic_links::DynamicLinkComponents components(
    "https://www.example.com/", "example.page.link");
components.android_parameters = &android_parameters;
components.ios_parameters = &ios_parameters;

firebase::dynamic_links::GeneratedDynamicLink long_link =
    firebase::dynamic_links::GetLongLink(components);

创建短动态链接

要创建短动态链接,请将之前生成的长链接传递给 GetShortLink 或采用与上面相同的方式构建 DynamicLinkComponents

GetShortLink 可以选择性地接受包含 PathLength 的额外 DynamicLinkOptions 配置参数;这样一来,您就可以控制链接的生成方式。生成短链接需要向 Firebase 后端发出网络请求,因此,GetShortLink 是异步的,会返回一个 Future<GeneratedLink>

例如:

firebase::dynamic_links::DynamicLinkOptions short_link_options;
short_link_options.path_length = firebase::dynamic_links::kPathLengthShort;

firebase::Future<firebase::dynamic_links::GeneratedDynamicLink> result =
    firebase::dynamic_links::GetShortLink(components, short_link_options);

如果您的程序有定期(如每秒 30 次或 60 次)运行的更新循环,那么您可以在每次更新时检查一次结果:

if (result.status() == firebase::kFutureStatusComplete) {
  if (result.error() == firebase::dynamic_links::kErrorCodeSuccess) {
    firebase::dynamic_links::GeneratedDynamicLink link = *result.result();
    printf("Create short link succeeded: %s\n", link.url.c_str());
  } else {
    printf("Created short link failed with error '%s'\n",
           result.error_message());
  }
}