Android完整参考

Maven中央 Java文档

安装

编译的Android SDK占用空间为187kb

安装库项目

只需将implementation 'io.branch.sdk.android:library:2.+' 添加到build.gradle 文件的依赖项部分即可。

一些注意事项:

  • 如果您不打算使用Fabric Answers 集成的' t,而不想导入answers-shim ' t,则只需按以下步骤导入您的项目:
    implementation ('io.branch.sdk.android:library:3.+') {
    exclude module: 'answers-shim'
    }
    
  • 这支持最低sdk级别16。如果要支持最低sdk级别9,请考虑使用版本1.14.5。如果要支持至少15的SDK,请使用2.x版本。
  • Android SDK版本3.x及更高版本通过TLS1.2进行通信。
  • 如果要直接导入AAR,则可以在Nexus中找到此版本: https://search.maven.org/artifact/io.branch.sdk.android/library
  • 或者,您可以克隆此存储库并将源作为库导入到您的项目中

注册您的应用

您可以在 https://dashboard.branch.io 注册自己的应用程序ID。

注册活动以进行直接深层链接(可选,但建议)

在项目'的清单文件中,您可以通过添加第二个Intent过滤器块来注册应用程序以响应直接深层链接(在移动浏览器中为yourapp://)。另外,请确保将 yourapp 更改为代表您的应用程序名称的唯一字符串。

其次,确保此活动作为单个任务启动。这对于处理来自其他应用程序(如Facebook)的正确深层链接很重要。

通常,您将注册某种启动活动来处理应用程序的路由。

<activity
    android:name="com.yourapp.SplashActivity"
    android:label="@string/app_name"
    <!-- Make sure the activity is launched as "singleTask" -->
    android:launchMode="singleTask"
     >
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>

    <!-- Add this intent filter below, and change yourapp to your app name -->
    <intent-filter>
        <data android:scheme="yourapp" android:host="open" />
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
    </intent-filter>
</activity>

利用Android应用链接进行深层链接

如果您要构建针对Android M或更高版本的应用程序,则使用Branch可以非常轻松地使用App Links配置应用程序以进行深层链接。在项目'的清单文件中,您可以通过添加如下所示的意图过滤器将活动注册为App Linking。

如果使用app.link

使用app.link时,无需使用编码的ID即可为' ,而您只需要列出域即可。

<activity android:name="com.yourapp.your_activity">
    <!-- App Link your activity to Branch links-->
    <intent-filter android:autoVerify="true">
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
         <data android:scheme="https" android:host="yourapp-alternate.app.link" />
         <data android:scheme="https" android:host="yourapp.app.link" />
    </intent-filter>
</activity>

如果使用bnc.lt或自定义域

您为应用程序启用了App Linking支持后,只需知道可以从Branch仪表板上获得的live_app_alpha_encoded_idtest_app_alpha_encoded_id

<activity android:name="com.yourapp.your_activity">
    <!-- App Link your activity to Branch links-->
    <intent-filter android:autoVerify="true">
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
         <data android:scheme="https" android:host="bnc.lt" android:pathPrefix="/live_app_alpha_encoded_id" /> <!-- live_app_alpha_encoded_id can be obtained from the Branch Dashboard here: https://dashboard.branch.io/#/settings/link -->
         <data android:scheme="https" android:host="bnc.lt" android:pathPrefix="/test_app_alpha_encoded_id" /> <!-- test_app_alpha_encoded_id can be obtained from the Branch Dashboard here: https://dashboard.branch.io/#/settings/link -->
        <!-- If you set up a white label for your links in your Branch link settings then  only need to add the white label domain -->
        <data android:scheme="https" android:host="your.app.com"/>
    </intent-filter>
</activity>

您只需要' s。与链接关联的深层链接参数通过分支初始化过程传递。

注意:在使用应用程序链接时,请确保您已按照上一会话中的讨论注册了使用分支URI方案进行深度链接的活动,以便在Android
早期版本(不支持应用程序链接)上进行深度链接。

通过推送通知进行深层链接

您只需将分支链接添加到结果意图中,就可以从推送通知中深度链接内容。只需传递带有gcm有效负载的Branch链接并将其添加到键branch到您的resultIntent中即可。

        Intent resultIntent = new Intent(this, TargetClass.class);
        intent.putExtra("branch","http://bnc.lt/testlink");
        .....
       PendingIntent resultPendingIntent =  PendingIntent.getActivity(this, 0, resultIntent, PendingIntent.FLAG_UPDATE_CURRENT);

如果您想在应用程序处于前台状态时支持基于推送通知的路由,请在通知意图中添加以下内容。

       intent.putExtra("branch_force_new_session",true);

保证匹配

分支机构支持使用自定义Chrome标签,确保与基于Cookie的匹配实现100%匹配。如果您想通过深层链接元数据进行用户身份验证,则强烈建议这样做。
只需将以下内容添加到您的build.gradle文件中即可启用保证匹配

    implementation 'com.android.support:customtabs:23.3.0'

注意:添加其他依赖项可能会超出dex限制,并导致NoClassDefFoundErrorClassNotFoundException 。请确保您已启用Multi-dex支持以解决此问题。有关启用Multi-dex支持的更多信息,请参阅故障排除

配置您的AndroidManifest.xml

注意:提供互联网许可。 Branch SDK需要Internet访问才能与Branch API对话。

将您的分支键添加到您的项目。

注册应用程序后,可以在仪表板的“ 设置页面上检索分支键。将其(如果您要同时针对实时和测试应用程序执行此操作)将它们作为元数据添加到项目'的清单文件中。

编辑清单文件以包含上述各项

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="io.branch.sample"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-permission android:name="android.permission.INTERNET" />

    <application>
        <!-- Other existing entries -->

        <!-- Add this meta-data below, and change "key_live_xxxxxxx" to your actual live Branch key -->
        <meta-data android:name="io.branch.sdk.BranchKey" android:value="key_live_xxxxxxx" />

        <!-- For your test app, if you have one; Again, use your actual test Branch key -->
        <meta-data android:name="io.branch.sdk.BranchKey.test" android:value="key_test_yyyyyyy" />
    </application>
</manifest>

Proguard设置,用于利用Branch '的池匹配

为了收集谷歌广告ID,您必须确保proguard的没有按' t取出了必要的谷歌广告类。最可靠的方法是将其添加到您的proguard规则中。如果使用proguard启用了您的应用程序,则将以下说明添加到您的proguard.cfgproguard-rules.pro 文件中:

-keep class com.google.android.gms.** { *; }

如果您使用Facebook SDK支持通过Facebook广告进行的深层链接,请确保将Facebook SDK类保留在proguard中

-keep class com.facebook.applinks.** { *; }
-keepclassmembers class com.facebook.applinks.** { *; }
-keep class com.facebook.FacebookSdk { *; }

如果要添加对不带Google移动服务的华为设备的支持,请确保将其添加到您的保护规则中。

-keep class com.huawei.hms.ads.** { *; }
-keep interface com.huawei.hms.ads.** { *; }

即时应用深层链接和归因支持

Branch SDK使您可以更轻松地对Instant Apps进行深度链接和归因。由于分公司自动配置和主机为您assetlinks.json文件,你不'吨需要所有的参与建立Android应用程序链接的复杂性的担心。此外,Branch SDK可以轻松地将Instant App的深层链接推迟到完整的Android应用程序安装,从而为每一步提供了归因。请确保您已添加以下内容,以及针对即时应用启用项目的常规Branch实施

您可以在我们的Github上签出完整的演示应用程序 。我们' VE复制我们的原生Android演示应用程序 ,并修改它支持Android的即时应用。

1.初始化Branch SDK

转到您的核心库项目 ,在其中定义了Application类,并将代码片段放入onCreate()方法中,如下所示。

public void onCreate() {
  super.onCreate();

  // Initialize the Branch SDK
  Branch.getAutoInstance(this);
}

2.添加Branch键

由于存在许多不同的清单,Instant Apps可能会造成混乱,但是您想查找包含application 标记的清单。确保在此处定义了应用程序类名称,然后在元素application 内指定Branch键

<application
        android:allowBackup="true"
        android:label="@string/app_name"
        android:theme="@style/AppTheme"
        android:supportsRtl="true"
        android:name=".MyApplication">

  <meta-data android:name="io.branch.sdk.TestMode" android:value="false" /> <!-- Set to true to use Branch_Test_Key -->
  <meta-data android:name="io.branch.sdk.BranchKey" android:value="key_live_my_live_key" />
  <meta-data android:name="io.branch.sdk.BranchKey.test" android:value="key_test_my_test_key" />
</application>

3.将您的分支链接配置为Android应用链接

本指南假设您过去VE已经配置分局Android应用程序链接。如果你的避风港的连线配置了全面的本地应用程序使用科为Android应用程序链接, 请填写此指南将正确地配置仪表板和清单。

现在,您只需要编辑上面的清单,然后将以下代码段粘贴到 application 元素中。然后你'将需要更换xxxx 用自己的自定义子域,这将是可见的科链接设置仪表盘在页面的底部。如果您'重新使用自定义子域,则可以在上述链接中找到有关配置Android应用链接的高级说明。

<application
  ......

  <intent-filter android:autoVerify="true">
      <action android:name="android.intent.action.VIEW" />
      <category android:name="android.intent.category.DEFAULT" />
      <category android:name="android.intent.category.BROWSABLE" />
      <data android:scheme="https" android:host="xxxx.app.link" />
      <data android:scheme="https" android:host="xxxx-alternate.app.link" />
  </intent-filter>

</application>

4.检索分支深层链接数据

现在,您已经为Instant App项目配备了' ,现在,您可以为要在任何Activity分组中接收深层链接数据的活动注册深层链接路由器功能 ,类似于您在中获取深层链接数据的方式完整的应用程序。

5.配置从Instant App到Full App的深度链接

现在,用户已经进入您的Instant App,您'准备重新将其转换为安装完整的本机应用程序。唐'担心,科作为有你盖的!我们已经覆盖默认showInstallPrompt 与自动配置谷歌播放提示所有你需要通过安装进行上下文中的深层链接数据的方法。此外,我们可以为您提供有关此提示中转换了多少用户的完整归因。

Branch SDK提供了方便的方法来检查应用程序类型和完整的应用程序转换。这消除了对Google IA支持SDK( com.google.android.instantapp )的依赖。这里有一些使生活变得轻松的方法

  • Branch#isInstantApp()

此便捷方法会检查当前运行的应用程序版本是Instant App还是Full Android App,以便为您提供方便

  • Branch#showInstallPrompt()

此方法显示完整Android应用程序的安装提示,使您可以轻松地通过安装过程将Branch引用深度数据传递给完整应用程序。与Branch通常使用延迟的深度链接接类似,完整的应用程序将在句柄回调中接收深度链接接参数。

下例显示了如何创建自定义Branch通用对象,并将其与安装提示相关联,该提示将在用户安装后传递到完整的本机Android应用。

if (Branch.isInstantApp(this)) {
  myFullAppInstallButton.setVisibility(View.VISIBLE);
  myFullAppInstallButton.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
       BranchUniversalObject branchUniversalObject = new BranchUniversalObject()
           .setCanonicalIdentifier("item/12345")
           .setTitle("My Content Title")
           .setContentDescription("My Content Description")
           .setContentImageUrl("https://example.com/mycontent-12345.png")
           .setContentMetadata(new ContentMetadata()
                 .addCustomMetadata("property1", "blue")
                 .addCustomMetadata("property2", "red"));

      Branch.showInstallPrompt(myActivity, activity_ret_code, branchUniversalObject);
    }
  });
} else {
  myFullAppInstallButton.setVisibility(View.GONE);
}

初始化

如果您的最低sdk级别为15+,则要从Branch SDK接收深层链接参数,请调用initSession并传入BranchReferralInitListener。这将返回与刚刚单击的链接关联的referringParams字典。您可以随时随地调用此参数以获得参数。

如果您需要支持pre 15,Branch必须知道应用何时打开或关闭,以正确处理深层链接参数检索。您可以在[this docs site](/ developers-hub / docs / android-sdk-overview)上查看有关如何执行此操作的更多详细信息。基本上,如果您不'退出Branch会话,则'看到奇怪的行为,例如Deep第二次单击链接后,链接参数未显示。

初始化分支生命周期

新的自动会话管理自动完成初始化和关闭会话。

替代1:您有一个自定义应用程序类

如果您有一个自定义的Application类,只需在此调用中添加 onCreate

public void onCreate() {
    super.onCreate();
    Branch.getAutoInstance(this);
}

选择2:悠唐'吨有自定义应用程序类

如果您没有在整个项目中创建或使用Application类,则只需在清单中将BranchApp 声明为应用程序类即可。

 <application
    android:name="io.branch.referral.BranchApp">

注册深层链接路由器

Branch branch = Branch.getInstance(getApplicationContext());
branch.initSession(new BranchReferralInitListener(){
    @Override
    public void onInitFinished(JSONObject referringParams, BranchError error) {
        if (error == null) {
            // 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 ...
        } else {
            Log.i("MyApp", error.getMessage());
        }
    }
}, this.getIntent().getData(), this);

注意如果您'在一个片段中重新调用此方法,请使用getActivity()而不是传入this 。同样, this.getIntent().getData() 与传入意图关联的数据。

接下来,您需要将'挂接到Activity生命周期内指定的onNewIntent 方法中并设置意图。为了符合Facebook '的AppLink,这是必需的。验证'实施的活动在清单声明中是否将 launchMode 设置为 singleTask 。完成后,转到上述活动,并执行以下操作:

@Override
public void onNewIntent(Intent intent) {
    this.setIntent(intent);
}

initSession回调中分支提供的数据参数

此前,科没有任何信息返回给应用程序,如果initSession 被称为但是用户hadn '的链接对T点击。现在,Branch每次都会返回显式参数。这是一个列表,以及每个代表什么的描述。

  • ~ 表示分析
  • + 表示Branch添加的信息
  • (出于好奇, $ 表示用于控制Branch服务行为的保留关键字)
参数 意义
~channel 在创建链接时指定共享链接的通道
~feature 在链接创建时指定的功能,例如inviteshare
~tags 在链接创建时指定的任何标签
~campaign 与链接关联的广告系列,在链接创建时指定
~stage 在链接创建时指定的阶段
~creation_source 其中链路被创建( ' API ' , '仪表板' , ' SDK ' , '的iOS SDK ' , '的Android SDK ' ,或'的Web SDK ' )
+match_guaranteed 关于匹配是否以100%的准确性进行的判断是对还是错
+referrer 点击链接的引荐来源网址(如果点击了链接)
+phone_number 用户的电话号码(如果用户自己发短信给应用程序)
+is_first_session 表示这是第一个会话(安装)还是任何其他会话(打开)
+clicked_branch_link 表示用户是否点击了触发该会话的Branch链接
+click_timestamp 点击发生的时间时间戳记

检索会话(安装或打开)参数

这些会话参数将在此命令的以后随时可用。如果没有参数,则字典将为空。每次新会话都会刷新(应用安装并打开应用)

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

要同步检索此信息,请从非UI线程调用以下命令:

JSONObject sessionParams = branch.getLatestReferringParamsSync();

检索安装(仅安装)参数

如果要访问原始会话参数(仅为第一个安装事件传递的参数),则可以使用此行。如果您只想通过引荐链接或其他方式奖励刚安装该应用程序的用户,这将很有用。

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

要同步检索此信息,请从非UI线程调用以下命令:

JSONObject sessionParams = branch.getFirstReferringParamsSync();

持久身份

通常,您可能拥有自己的用户ID,或者希望引用和事件数据在各个平台之间保持不变或进行卸载/重新安装。它' ,如果你知道你的用户从不同的设备访问服务很有帮助。在这里我们介绍'身份'的概念。

要识别用户,只需调用:

Branch branch = Branch.getInstance(getApplicationContext());
branch.setIdentity(your user id); // your user id should not exceed 127 characters

登出

如果您在应用程序中提供注销功能,请确保在注销完成后清除用户。这将确保清除所有存储的参数,并将所有事件正确地归属于正确的标识。

警告此呼叫将清除设备上的推荐积分和归属。

Branch.getInstance(getApplicationContext()).logout();

注册自定义事件

Branch branch = Branch.getInstance(getApplicationContext());
branch.userCompletedAction("your_custom_event"); // your custom event name should not exceed 63 characters

或者,如果您想与事件一起存储某些状态

Branch branch = Branch.getInstance(getApplicationContext());
branch.userCompletedAction("your_custom_event", (JSONObject)appState); // same 63 characters max limit

您可能要跟踪的一些示例事件:

"complete_purchase"
"wrote_message"
"finished_level_ten"

分支通用对象(用于深层链接,内容分析和索引编制)

随着越来越多的方法在Android的演变,我们'已经找到了,这是越来越难以管理他们所有。我们尽可能多地抽象了一个分支通用对象的概念。这是与您要共享的事物(内容或用户)关联的对象。您可以设置与该对象关联的所有元数据,然后在其上调用操作方法以获取链接或注册视图。

Branch通用对象最佳做法

这是一组最佳实践,可确保您的分析正确无误,并且您的内容在Spotlight上有效地排名。

  1. 跨应用实例将canonicalIdentifier 设置为唯一的重复数据消除值
  2. 确保titlecontentDescriptionimageUrl 适当地表示对象
  3. 初始化Branch通用对象,并使用页面加载上的BranchEvent.VIEW 调用userCompletedAction
  4. 当用户执行需要链接的操作时,请在生命周期的稍后阶段调用showShareSheetcreateShortLink
  5. 当采取相应的用户操作时,调用其他对象事件(购买,共享完成等)

练习避免

  1. 唐' t将相同titlecontentDescriptionimageUrl 跨所有对象
  2. '分钟后等待初始化对象并注册视图,直到用户共享
  3. 不要等待'等待初始化对象,直到您方便地需要链接为止
  4. Don ' t一次创建许多对象,并在for 循环中注册视图。

定义分支通用对象

通用对象是您定义与要链接或索引的内容关联的所有自定义元数据的地方。请使用下面的构建器格式来创建一个。

 BranchUniversalObject branchUniversalObject = new BranchUniversalObject()

             // The identifier is what Branch will use to de-dupe the content across many different Universal Objects
            .setCanonicalIdentifier("item/12345")

            // The canonical URL for SEO purposes (optional)
            .setCanonicalUrl("https://branch.io/deepviews")

            // This is where you define the open graph structure and how the object will appear on Facebook or in a deepview
            .setTitle("My Content Title")
            .setContentDescription("My Content Description")
            .setContentImageUrl("https://example.com/mycontent-12345.png")

            // You use this to specify whether this content can be discovered publicly - default is public
            .setContentIndexingMode(BranchUniversalObject.CONTENT_INDEX_MODE.PUBLIC)

             // Here is where you can add custom keys/values to the deep link data
            .setContentMetadata(new ContentMetadata()
                             .addCustomMetadata("property1", "blue")
                             .addCustomMetadata("property2", "red"));

参量

canonicalIdentifier :这是内容的唯一标识符,可帮助Branch在同一事物的许多实例之间进行重复数据删除。如果您的网站带有路径,请随时使用。或者,如果您具有实体的数据库标识符,请使用这些标识符。

title :这是内容的名称,将自动用于OG标签。它将$ og_title插入到创建的任何链接的数据字典中。

contentDescription :这是内容的描述,将自动用于OG标签。它将$ og_description插入到任何已创建链接的数据字典中。

imageUrl :这是内容的图像URL,将自动用于OG标签。它将$ og_image_url插入到创建的任何链接的数据字典中。

元数据 :这些是您'想要与Branch Universal Object关联的任何额外参数。用户单击链接并打开应用程序后,即可使用这些功能。要添加更多键/值,只需使用方法addMetadataKey

price :与以下与商业相关的事件一起使用的商品价格。

货币 :代表 ISO 4217货币代码的价格的货币。默认为美元。

contentIndexMode :可以设置为ContentIndexModePublicContentIndexModePrivate的ENUM。公开表示您'希望此内容被其他应用发现。目前,此功能仅用于Spotlight索引编制,但将来会被Branch使用。

expirationDate :内容将不再可用或有效的日期。目前,此功能仅用于Spotlight索引编制,但将来会被Branch使用。

跟踪用户动作和事件

使用BranchEvent 类来跟踪特殊的用户操作或应用程序特定的事件,而不是应用程序的安装,打开和共享。您可以跟踪事件,例如用户何时将商品添加到在线购物车中或搜索关键字等
BranchEvent 提供了一个界面来添加由BranchUniversalObject表示的内容,以便关联内容与事件。
您可以查看在Branch仪表板上触发的BranchEvent的分析。 BranchEvents提供与许多第三方分析提供商的无缝集成,例如Google Analytics(分析),Criteo。
BRANCH_STANDARD_EVENT 枚举最常跟踪的事件和事件参数,可以与BranchEvent 一起使用以获得最佳结果。您始终可以使用自定义事件名称和事件参数。

new BranchEvent(BRANCH_STANDARD_EVENT.PURCHASE)
    .setAffiliation("affiliation_value")
    .setCoupon("coupon_value")
    .setCurrency(CurrencyType.USD)
    .setTax(12.3)
    .setRevenue(1.5)
    .setDescription("Event_description")
    .setSearchQuery("related_search_query")
    .addCustomDataProperty("Custom_Event_Property_Key", "Custom_Event_Property_Val")
    .addContentItems(contentBUO1, contentBUO2)
    .logEvent(context);
new BranchEvent("My_Custom_Event")
    .addCustomDataProperty("key1", "value1")
    .addCustomDataProperty("key2", "value2")
    .logEvent(context);

在对象上注册用户操作

不建议使用此功能。请考虑使用BranchEvent 来跟踪用户操作和事件,如此处所述

我们已经添加了一系列的自定义事件,您会要开始跟踪的丰富的分析和定位。下面的列表列出了一个示例片段,该片段调用了注册视图事件。

Key
BranchEvent.VIEW 用户查看了对象
BranchEvent.ADD_TO_WISH_LIST 用户将该对象添加到他们的愿望清单
BranchEvent.ADD_TO_CART 用户将对象添加到购物车
BranchEvent.PURCHASE_STARTED 用户开始签出
BranchEvent.PURCHASED 用户购买了该物品
BranchEvent.SHARE_STARTED 用户开始共享对象
BranchEvent.SHARE_COMPLETED 用户完成了分享
branchUniversalObject.userCompletedAction(BranchEvent.VIEW);

创建深层链接

一旦'创建了Branch Universal Object ,即对'感兴趣的内容的引用,则可以使用下面描述的机制返回到该链接。首先定义链接本身的属性。

LinkProperties linkProperties = new LinkProperties()
               .setChannel("facebook")
               .setFeature("sharing")
               .addControlParameter("$desktop_url", "http://example.com/home")
               .addControlParameter("$ios_url", "http://example.com/ios");

您可以通过在控制参数插入以下可选键来进行自定义重定向:

Key
"$fallback_url" 未安装应用程序时将所有平台的用户发送到何处。请注意,Branch会将所有机械手转发到此URL,从而覆盖在链接中输入的所有OG标签。
"$desktop_url" 在台式机或笔记本电脑上将用户发送到何处。默认情况下,它是Branch托管的text-me服务
"$android_url" 对于Play商店中的替换URL发送用户,如果他们没有应用。 仅在您想要移动网络启动时才需要
"$ios_url" 为App Store替换URL发送用户,如果他们没有应用。 仅在您想要移动网络启动时才需要
"$ipad_url" 与上述相同,但适用于iPad Store
"$fire_url" 与上述相同,但适用于Amazon Fire Store
"$blackberry_url" 与上述相同,但适用于Blackberry Store
"$windows_phone_url" 与上述相同,但适用于Windows Store

您可以通过在控制参数插入以下可选键来控制每个链接的直接深层链接:

Key
"$deeplink_path" 您希望我们追加到您的URI的深度链接接路径的值。例如,您可以指定" $ deeplink_path " : " radio / station / 456 "然后我们将使用URI " yourapp:// radio / station / 456?link_click_id = branch-identifier "打开应用程序。这主要是为了支持旧版深度链接接基础结构。
"$always_deeplink" 对或错。 (默认为不深链接第一)此键可以指定有我们的链接服务力量试图打开该应用程序,即使我们'不能确定用户已安装的应用程序。如果未安装该应用程序,我们将退回到相应的应用程序商店或$ platform_url密钥。默认情况下,我们只打开应用程序,如果我们'见过一个用户发起您的应用程序从一个分支连接会话(已的Cookie和科深联)

然后,向通用对象发出请求以创建URL。

branchUniversalObject.generateShortUrl(this, linkProperties, new BranchLinkCreateListener() {
    @Override
    public void onLinkCreate(String url, BranchError error) {
        if (error == null) {
            Log.i("MyApp", "got my Branch link to share: " + url);
        }
    }
});

列出带有应用索引的Google搜索中的链接

使用BranchUniversalObject非常容易地将您的Branch链接和应用程序内容显示在Google搜索中。一旦你'已经创建了迪布奥,请使用以下API通过火力地堡的App Indexing API列出在谷歌搜索中的应用内容。用户单击搜索结果后,将使用深层链接数据打开您的应用程序,并将跟踪会话。
这还将使您的内容在本地索引并显示在Google In Apps 搜索中。默认情况下,BranchUniversal对象是本地可索引的。如果要避免在本地建立索引,请将BranchUniversalObject '的本地索引模式设置为private

branchUniversalObject.listOnGoogleSearch(context);

注意请确保为您的应用程序启用了Firebase应用程序索引并添加了Firebase应用程序索引依赖项

'implementation 'com.google.firebase:firebase-appindexing:10.0.1'

要测试内容索引,请遵循此处的说明
请启用调试模式,并检查日志以获取用于索引的“分支”链接,并将其与上面的链接一起使用以验证内容索引。

注意使用BranchUniversalObject#removeFromLocalIndexing 方法从本地索引中删除内容。请确保在用户注销时从本地索引中删除用户特定的内容。

显示自定义共享表

我们已经意识到Android提供的本机工作表功能非常差,因此我们构建了自己的产品并将其捆绑到核心SDK中。该共享表是可自定义的,当用户选择要共享的频道时,它将自动生成链接。

Android分享表

要使用它,首先像这样定义自定义共享表样式。大多数这些完全是可选的,我们' VE,如果你不有一个伟大的默认设置的'吨要花费数小时定制。

ShareSheetStyle shareSheetStyle = new ShareSheetStyle(MainActivity.this, "Check this out!", "This stuff is awesome: ")
                .setCopyUrlStyle(getResources().getDrawable(android.R.drawable.ic_menu_send), "Copy", "Added to clipboard")
                .setMoreOptionStyle(getResources().getDrawable(android.R.drawable.ic_menu_search), "Show more")
                .addPreferredSharingOption(SharingHelper.SHARE_WITH.FACEBOOK)
                .addPreferredSharingOption(SharingHelper.SHARE_WITH.EMAIL)
                .setAsFullWidthStyle(true)
                .setSharingTitle("Share With");

要显示共享表,请在“分支通用对象”上调用以下内容。您可以根据自己的需要在我们的动画上添加许多回调方法,以进行自己的自定义。

branchUniversalObject.showShareSheet(this,
                                      linkProperties,
                                      shareSheetStyle,
                                       new Branch.ExtendedBranchLinkShareListener() {
    @Override
    public void onShareLinkDialogLaunched() {
    }
    @Override
    public void onShareLinkDialogDismissed() {
    }
    @Override
    public void onLinkShareResponse(String sharedLink, String sharedChannel, BranchError error) {
    }
    @Override
    public void onChannelSelected(String channelName) {
    }
    @Override
    public boolean onChannelSelected(String channelName, BranchUniversalObject buo, LinkProperties linkProperties) {
        return false;
    }
});

推荐奖励

推荐系统奖励功能

获得奖励余额

当采取某些操作(由您的规则定义)时,奖励余额在后端随机变化,因此您将需要进行'异步调用来检索余额。语法如下:

Branch branch = Branch.getInstance(getApplicationContext());
branch.loadRewards(new BranchReferralStateChangedListener() {
    @Override
    public void onStateChanged(boolean changed, Branch.BranchError error) {
        // changed boolean will indicate if the balance changed from what is currently in memory

        // will return the balance of the current user's credits
        int credits = branch.getCredits();
    }
});

兑换全部或部分奖励余额(商店状态)

我们将存储多少报酬已经部署,使你不'吨有跟踪它在你的结束。为了节省您将积分赠送给用户的情况,您可以致电兑换。赎回将永久减少未结余额的余额。

Branch branch = Branch.getInstance(getApplicationContext());
branch.redeemRewards(5);

获取信用记录

该呼叫将检索单个用户的全部贷记和赎回历史。要使用此调用,请像下面这样实现:

Branch branch = Branch.getInstance(getApplicationContext());
branch.getCreditHistory(new BranchListResponseListener() {
    public void onReceivingResponse(JSONArray list, Branch.BranchError error) {
        if (error == null) {
            // show the list in your app
        } else {
            Log.i("MyApp", error.getMessage());
        }
    }
});

响应将返回一个已从以下JSON解析的数组:

[
    {
        "transaction": {
                           "date": "2014-10-14T01:54:40.425Z",
                           "id": "50388077461373184",
                           "bucket": "default",
                           "type": 0,
                           "amount": 5
                       },
        "event" : {
            "name": "event name",
            "metadata": { your event metadata if present }
        },
        "referrer": "12345678",
        "referree": null
    },
    {
        "transaction": {
                           "date": "2014-10-14T01:55:09.474Z",
                           "id": "50388199301710081",
                           "bucket": "default",
                           "type": 2,
                           "amount": -3
                       },
        "event" : {
            "name": "event name",
            "metadata": { your event metadata if present }
        },
        "referrer": null,
        "referree": "12345678"
    }
]

推荐人 :此信贷交易的推荐用户的ID。如果不涉及引荐来源,则返回null。请注意,此ID是开发人员'自己的系统中的用户ID,之前传递给Branch '的'用户ID标识了用户API调用。

推荐人 :此信贷交易被推荐的用户的ID。如果不涉及裁判,则返回null。请注意,此ID是开发人员'自己的系统中的用户ID,之前传递给Branch '的'用户ID标识了用户API调用。

类型 :这是信贷交易的类型

  1. 0 用户完成动作或推荐后自动添加的奖励
  2. 1 手动添加的奖励
  3. 2 通过我们的API或SDK兑换的积分
  4. 3 这是一个非常特殊的情况,当我们检测到欺诈行为时,我们将自动扣除信用额

启用或禁用用户跟踪

为了符合跟踪要求,您可以在SDK级别禁用跟踪。只需致电:

Branch.getInstance().disableTracking(true);

除了深层链接,这将阻止任何分支请求通过网络发送。如果有人单击“分支”链接,但表示不被跟踪,则我们会将深层链接数据返回给客户端,但不会捕获捕获的信息。

在“不追踪”模式下,您仍然可以创建和共享链接。他们将没有可识别的信息。如果用户表示不被跟踪,则事件跟踪不会将数据传递回服务器。您可以随时更改此行为,但可以调用上述函数。此信息将被保存并保留。

大约一个月前更新

Android完整参考


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

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