应用内路由

概述

打开“分支”链接后,您的应用程序将启动或用户被带到应用程序/播放商店进行下载。应用启动后,深层链接通过将用户直接路由到特定内容来改善此过程。使用Branch,即使用户必须先停止并下载该应用程序(也称为"延迟的深层链接" )也可以使用。深层链接是提供高质量用户体验的极其重要的部分。

下面我们将引导您完成3个配置选项:

  • 选项1:在路由回调中建立自定义路由-在打开应用后立即进行路由
  • 选项2:让Branch使用您现有的深度链接接路由
  • 选项3:使用Branch '的简单配置深度链接路由-自动路由

选项1:在路由回调中构建自定义路由

在应用打开时立即进行路由

在您在initSession中注册的深层链接处理程序回调中,您将需要检查参数字典以确定用户是否打开了Branch链接。以下是假定链接对应于图片的示例。以下是我们从iOS和Android的一些例子'再使用pictureId 关键路线,但你可以看到更多的代码片段对于这里的其他平台。

iOS

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

      // initialize the session, setup a deep link handler
      [[Branch getInstance] initSessionWithLaunchOptions:launchOptions
                              andRegisterDeepLinkHandler:^(NSDictionary *params, NSError *error) {

        // start setting up the view controller hierarchy
        UINavigationController *navC = (UINavigationController *)self.window.rootViewController;
        UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
        UIViewController *nextVC;

        // If the key 'pictureId' is present in the deep link dictionary
        // then load the picture screen with the appropriate picture
        NSString *pictureId = [params objectForKey:@"pictureId"];
        if (pictureId) {
          nextVC = [storyboard instantiateViewControllerWithIdentifier:@"PicVC"];
          [nextVC setNextPictureId:pictureId];
        } else {
          nextVC = [storyboard instantiateViewControllerWithIdentifier:@"MainVC"];
        }

        // navigate!
        [navC setViewControllers:@[nextVC] animated:YES];
      }];

      return YES;
    }

安卓

@Override
        public void onStart() {
            super.onStart();

            Branch.sessionBuilder(this).withCallback(new BranchReferralInitListener(){
                @Override
                public void onInitFinished(JSONObject referringParams, Branch.BranchError error) {
                    if (error == null) {
                        // params are the deep linked params associated with the link that the user clicked before showing up
                        // params will be empty if no data found
                        String pictureID = referringParams.optString(""picture_id"", """");
                        if (pictureID.equals("""")) {
                            startActivity(new Intent(this, HomeActivity.class));
                        }
                        else {
                            Intent i = new Intent(this, ViewerActivity.class);
                            i.putExtra(""picture_id"", pictureID);
                            startActivity(i);
                        }
                    } else {
                        Log.e(""MyApp"", error.getMessage());
                    }
                }
            }).withData(this.getIntent().getData()).init();
        }

Branch添加的参数

除了在链接数据字典中指定的任何自定义键/值对之外,每次会话初始化时,Branch还返回一些其他有用的参数。即使用户未单击“分支”链接,每次初始化会话时也将返回这些参数。这是一个列表,以及每个代表什么的描述。

  • ~ 表示分析
  • + 表示Branch添加的信息
  • 该数据将无法用于来自Facebook或其他自我归因平台的深度链接接
  • 出于好奇,$表示用于控制Branch服务行为的保留关键字。在Configuring Links 页上阅读有关控制参数的更多信息

参数

意义

+is_first_session

表示这是第一个会话(安装)还是任何其他会话(重新安装,打开)

+clicked_branch_link

表示用户是否点击了触发该会话的Branch链接

+match_guaranteed

关于匹配是否以100%的准确性进行的判断是对还是错

+referrer

点击链接的引荐来源网址(如果点击了链接)

+click_timestamp

点击发生的时间时间戳记

+url

驱动安装/打开的链接的完整URL(如果存在)(例如,yourapp.app.link / abcde12345)

~channel

在创建链接时指定共享链接的通道

~feature

在链接创建时指定的功能,例如邀请或共享

~tags

在链接创建时指定的任何标签

~campaign

与链接关联的广告系列,在链接创建时指定

~creation_source

其中链路被创建( ' API ' , '仪表板' , ' SDK ' , '的iOS SDK ' , '的Android SDK ' ,或'的Web SDK ' )

~id

自动生成驱动安装/打开的链接的18位ID号(如果存在)(对于动态和3P链接为0)

稍后访问深度链接接参数

您可以随时通过调用以下方法之一从“分支”单例中检索深层链接数据。如果您要在提示用户登录后进行深链接,则可以使用此方法。您可以在此处查看其他平台的代码段。

获取最新的会话引用参数

这将从点击的最新链接中返回最新的深度链接接数据集。如果您最小化该应用程序并重新打开它,则该会话将被清除,该数据也将被清除。

iOS

NSDictionary *params = [[Branch getInstance] getLatestReferringParams];

安卓

JSONObject sessionParams = Branch.getInstance().getLatestReferringParams();

获取第一次会话引用参数

这将返回曾经引用用户的第一组深度链接接数据。一旦为给定用户设置了' ,就永远无法更新。这对于推荐很有用。

iOS

NSDictionary *params = [[Branch getInstance] getFirstReferringParams];

安卓

JSONObject installParams = Branch.getInstance().getFirstReferringParams();

选项2:让Branch使用您现有的深度链接接路由

如果你的应用程序中使用URI路径已经支持深度链接接,你可以填充$deeplink_path$ios_deeplink_path$android_deeplink_path ,以在该应用内显示与内容的URI路径的链路参数。当Branch SDK收到包含这些参数之一的链接时,它将自动加载指定的URI路径。

🚧

对iOS的不完全支持

通用链接Spotlight不支持通过URI路径进行深层链接。如果使用$deeplink_path$ios_deeplink_path ,则需要实现一些自定义逻辑。 点击这里查看更多信息。

如何将自定义深度链接接路由插入Branch链接

下面的所有示例均创建链接,这些链接将导致Branch在启动后显示myapp://content/1234 。请不要在$deeplink_path 参数上添加URI方案;我们会自动附加在信息中心的“配置”页面中指定的方案。

动态创建链接时
如果您通过附加查询参数'重新创建链接,则只需将控制参数附加到URL。请确保对所有内容进行URL编码,否则链接将断开。

"https://[branchsubdomain]?%24deeplink_path=content%2F1234"

使用移动SDK时

iOS

BranchLinkProperties *linkProperties = [[BranchLinkProperties alloc] init];
linkProperties.feature = @"sharing";
linkProperties.channel = @"facebook";
[linkProperties addControlParam:@"$deeplink_path" withValue:@"content/1234"];

安卓

LinkProperties linkProperties = new LinkProperties()
.setChannel("facebook")
.setFeature("sharing")
.addControlParameter("$deeplink_path", "content/1234");

📘

When Creating Quick Links on the Branch Dashboard

您可以通过将键和值插入“深层链接数据(高级)”部分来指定单个快速链接的控制参数。

如何使用通用链接或应用程序链接处理URI路径

因为通用链接,Spotlight和Android应用程序链接不使用URI方案进行深度链接接路由。如果填充$deeplink_path$ios_deeplink_path$android_deeplink_path 与URI路径,则需要一点额外的工作,以确保按照原来的模式是分公司的联系途径。

  1. 按照应用程序配置步骤中所述初始化会话。
  2. 在回调函数中,添加一些自定义代码以在params读取相应的$deeplink_path 参数。
  3. 使用此值来调用现有的路由逻辑,以将用户路由到应用程序中的正确位置

选项3:使用Branch '的简单配置深度链接路由

在iOS中自动路由

配置View Controller以接受深度链接接

打开您要在用户点击链接时显示的视图控制器。例如,这可能是显示产品的视图。首先,导入Branch框架:

#import "Branch.h"

为委托BranchDeepLinkingController注册您的视图控制器:

@interface ExampleDeepLinkingController : UIViewController <BranchDeepLinkingController>

接收从链接点击加载视图控制器时将调用的委托方法:

@synthesize deepLinkingCompletionDelegate;
    - (void)configureControlWithData:(NSDictionary *)data {
        NSString *pictureUrl = data[@"product_picture"];

        // show the picture
        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
            NSData *imageData = [NSData dataWithContentsOfURL:[NSURL URLWithString:pictureUrl]];
            UIImage *image = [UIImage imageWithData:imageData];
            dispatch_async(dispatch_get_main_queue(), ^{
                self.productImageView.image = image;
            });
        });
    }

什么是链接数据密钥?
示例键product_picture是单击的链接data dictionary中的参数,并且在创建链接时已定义。

- (IBAction)closePressed {
    [self.deepLinkingCompletionDelegate deepLinkingControllerCompleted];
}

注册View Controller以进行深度链接接路由

最后,您需要告诉Branch刚刚配置的视图控制器,以及链接'的数据字典中使用的密钥。

[branch initSessionWithLaunchOptions:launchOptions andRegisterDeepLinkHandler:^(NSDictionary *params, NSError *error) {
        if (!error && params) {
            // params are the deep linked params associated with the link that the user clicked -> was re-directed to this app
            // params will be empty if no data found
            // ... insert custom logic here ...
            print(@"params: %@", params.description);
        }
    }];

将其删除,然后将此片段插入相同的位置:

ExampleDeepLinkingController *controller = [[UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]] instantiateViewControllerWithIdentifier:@"DeepLinkingController"];

    [branch registerDeepLinkController:controller forKey:@"product_picture" withPresentation:BNCViewControllerOptionShow];
    [branch initSessionWithLaunchOptions:launchOptions automaticallyDisplayDeepLinkController:YES

Now whenever your app launches from a Branch link that has the product_picture key set in its data dictionary, the ExampleDeepLinkingController view controller will be displayed!

选项

意义

BNCViewControllerOptionShow

该选项将视图控制器以与showViewController类似的方式推入导航堆栈

BNCViewControllerOptionPush

该选项将视图控制器以与pushViewController类似的方式推入导航堆栈

BNCViewControllerOptionPresent

此选项以类似于presentViewController的方式将视图控制器呈现到窗口的根视图控制器上

📘

查看控制器

BNCViewControllerOptionShow BNCViewControllerOptionPush 选项仅在窗口的根视图控制器的类型为 UINavigationViewController 时才推送视图控制器。否则,默认情况下将显示视图控制器。

Android中的自动路由

配置活动以接受深度链接接

打开您要在用户点击链接时显示的活动。例如,这可以是展示产品的活动。从链接点击加载“活动”时,插入以下代码片段以显示您的内容:

@Override
protected void onResume() {
    super.onResume();
    if (Branch.isAutoDeepLinkLaunch(this)) {
        try {
            String autoDeeplinkedValue = Branch.getInstance().getLatestReferringParams().getString("product_picture");
            launch_mode_txt.setText("Launched by Branch on auto deep linking!"
                    + "\n\n" + autoDeeplinkedValue);
        } catch (JSONException e) {
            e.printStackTrace();
        }
    } else {
        launch_mode_txt.setText("Launched by normal application flow");
    }
}

📘

什么是链接数据密钥?

示例键product_picture 是单击的链接data dictionary 中的参数,并且在创建链接时已定义。

注册活动以进行深度链接接路由

最后,您需要从链接'的数据字典中告诉Branch刚刚配置的Activity,以及正在使用的密钥。在清单文件中,找到上面“活动”的定义,然后添加以下元数据标记:

<meta-data android:name="io.branch.sdk.auto_link_keys" android:value="product_picture" />

现在,只要您的应用程序从在其数据字典中设置了product_picture 键的Branch链接启动,就会显示此活动!

4个月前更新


应用内路由


建议的编辑仅限于API参考页

您只能建议对Markdown正文内容进行修改,而不能建议对API规范进行修改。