Unity

GitHub版本(最新日期)GitHub版本(最新日期)

📘

iOS 14 实施

为了帮助您全面管理用户体验,Branch SDK 将不会触发 IDFA 许可模式。

然而,如果您选择触发这一模式,在可行的情况下,Branch 仍然可以收集并使用 IDFA。

了解更多

❗️

iOS 11.2上通用链接行为不一致

将设备更新到iOS 11.2后,我们发现在安装应用程序后,该应用程序的AASA文件不再可靠地下载到您用户的设备上。因此,单击“通用”链接将不再始终打开该应用程序。

您可以在分支链接上设置强制uri重定向模式,以使用URI方案打开应用程序。在Apple Bug报告中查看问题的详细信息。

❗️

Google Play 服务版本17+

如果您引用的是 Google Play 服务版本17或更高版本,则必须在此处完成 Google 的更新说明。

由于 Google Play 服务于2019年6月进行了重大更改,未完成更新步骤将导致 Branch 的 Android SDK(以及其他各种跨平台 SDK,例如 Unity)停止收集 Android AID,我们使用该 ID 来确保准确的深度链接和归因。

如果您运行的 Google Play 服务版本低于17,则无需更新。

注意:要将17以下的Google Play服务版本用于以后的应用构建,请按照以下变通方法实施步骤进行操作

配置 Branch

图片图片

  • 自定义您的app.link域:

图片图片

配置分支SDK

配置应用

  • 将Branch预制资产添加到Unity项目的first scene

更新您的Branch预制

图片图片

完成后,请不要忘记单击“更新iOS包装器”和“更新Android清单”按钮。

预制领域

栏位名称描述
模拟全新安装此复选框启用调试模式。这使您可以在每次卸载并重新安装该应用程序时进行全新模拟。在发布您的应用程序之前,请确保取消选中此框。
测试模式此复选框从您的Branch预制中选择测试密钥。如果未选中此框,则默认情况下,将使用活动的分支键。
测试分支键这是在“测试分支”应用程序的“应用程序设置”页面上找到的测试分支键
测试分支URI这是您在“测试分支”应用程序的“ 链接设置”页面 为应用程序设置的测试URI方案
测试Android路径前缀仅当您位于Test Branch应用程序的bnc.lt域中时,此字段才适用。启用应用链接后,您可以在“ 链接设置”页面 上标记为SHA256证书指纹的字段下方找到它。它看起来像这样: /WSuf (应包含首字母/字符)。
测试应用链接如果您要为域启用APPLINKSUNIVERSAL LINKS ,则此字段适用。请确保添加正确的域,该域位于Test Branch应用程序的“ 链接设置”页面 的底部。添加-alternate域,使您的Branch链接从您的 Deepviews Journeys 深链接。如果您没有使用app.links域,请联系我们的 支持团队
实时分支密钥这是在Live Branch应用程序的“应用程序设置”页面上找到的Live Branch键。
实时分支URI这是您在Live Branch应用程序的“链接设置”页面上为应用程序设置的Live URI方案
实时Android路径前缀仅当您位于Live Branch应用的bnc.lt链接设置页 上时,此字段才适用。启用应用链接后,您可以在“ 链接设置”页面 上标记为SHA256证书指纹的字段下方找到它。它看起来像这样: /WSuf (应包含首字母/字符)。
实时应用链接如果您要为域启用APPLINKSUNIVERSAL LINKS ,则此字段适用。请确保添加在Live Branch应用的“ 链接设置”页面 底部找到的正确域。添加-alternate域,使您的Branch链接从您的 Deepviews Journeys 深链接。如果您没有使用app.links域,请联系我们的 支持团队
  • Android笔记

    有时,由于与Branch无关的一般性问题,在添加我们的库后,Android会倒转。请参阅此Android故障排除部分

初始化 Branch

  • 将“分支”添加到第一个场景的Monobehavior脚本中
using UnityEngine;
    using System.Collections;

    public class Spin : MonoBehaviour {

        // Use this for initialization
        void Start () {
            Branch.initSession(CallbackWithBranchUniversalObject);
        }

        void CallbackWithBranchUniversalObject(BranchUniversalObject buo,
                                                BranchLinkProperties linkProps,
                                                string error) {
            if (error != null) {
                System.Console.WriteLine("Error : "
                                        + error);
            } else if (linkProps.controlParams.Count > 0) {
                System.Console.WriteLine("Deeplink params : "
                                        + buo.ToJsonString()
                                        + linkProps.ToJsonString());
            }
        }

        // Update is called once per frame
        void Update () {
            //rotate 90 degress per second
            transform.Rotate(Vector3.up * Time.deltaTime*90);
        }
    }

测试深度链接

  • 在分支仪表板上创建一个快速链接

  • 从设备中删除您的应用程序

  • 将快速链接粘贴到Google Hangouts (Android)Notes (iOS)

  • 点击快速链接以打开您的应用

  • 编译您的应用并将其下载到设备

  • 您应该在应用中看到延迟的深层链接数据显示

实施功能

创建内容参考

  • Branch Universal Object封装了您要与链接共享的内容
BranchUniversalObject universalObject = new BranchUniversalObject();
    // Content index mode: 0 - private mode, 1 - public mode
    universalObject.contentIndexMode = 1;
    //Identifier that helps Branch dedupe across many instances of the same content.
    universalObject.canonicalIdentifier = "id12345";
    // OG title
    universalObject.title = "id12345 title";
    // OG Description
    universalObject.contentDescription = "My awesome piece of content!";
    // OG Image
    universalObject.imageUrl = "https://s3-us-west-1.amazonaws.com/branchhost/mosaic_og.png";
    // User defined key value pair
    universalObject.metadata.Add("foo", "bar");

创建深度链接

  • 创建Branch Universal Object ,定义链接属性
BranchLinkProperties linkProperties = new BranchLinkProperties();
    linkProperties.tags.Add("tag1");
    linkProperties.tags.Add("tag2");
    // Feature link is associated with. Eg. Sharing
    linkProperties.feature = "invite";
    // The channel where you plan on sharing the link Eg.Facebook, Twitter, SMS etc
    linkProperties.channel = "Twitter";
    // The Campaign that drives this link
    linkProperties.campaign = "referral";
    linkProperties.stage = "2";
    // Parameters used to control Link behavior
    linkProperties.controlParams.Add("$desktop_url", "http://example.com");
  • 生成分支链接
Branch.getShortURL(universalObject, linkProperties, (params, error) => {
        if (error != null) {
            Debug.LogError("Branch.getShortURL failed: " + error);
        } else if (params != null) {
            Debug.Log("Branch.getShortURL shared params: " + url);
        }
    });

分享深度链接

  • 在用户和应用之间共享深层链接
Branch.shareLink(universalObject, linkProperties, "Sharing link: ", (parameters, error) => {
        if (error != null) {
            Debug.LogError("Branch.shareLink failed: " + error);
        } else if (parameters != null) {
            Debug.Log("Branch.shareLink: " + parameters["sharedLink"].ToString() + " " + parameters["sharedChannel"].ToString());
  }
    });

读取深度链接

public void CallbackWithBranchUniversalObject(BranchUniversalObject universalObject, BranchLinkProperties linkProperties, string error) {
        if (error != null) {
            Debug.LogError("Branch Error: " + error);
        } else {
            Debug.Log("Branch initialization completed: ");
            Debug.Log("Universal Object: " + universalObject.ToJsonString());
            Debug.Log("Link Properties: " + linkProperties.ToJsonString());
        }
    }

这与每个会话(应用安装和应用打开)相关

分支初始化后从任何地方读取安装(安装或打开)参数

BranchUniversalObject obj = Branch.getFirstReferringBranchUniversalObject();
BranchLinkProperties link = Branch.getFirstReferringBranchLinkProperties();

导航和显示内容

  • 使用链接参数来确定要加载的视图
public class MyCoolBehaviorScript : MonoBehaviour {
        void Start () {
            Branch.initSession(delegate(Dictionary<string, object> parameters, string error) {
                if (parameters.ContainsKey("picture_id") {
                    // load the Scene to show the picture
                    SceneManager.LoadSceneAsync("ImageScene", LoadSceneMode.Additive);
                } else {
                    // load your normal Scene
                    SceneManager.LoadSceneAsync("NormalScene", LoadSceneMode.Single);
                }
            });
        }
    }

跟踪内容

  • 如果要跟踪用户查看BUO内容的次数
Branch.registerView(universalObject);

跟踪用户

在登录/注册上设置用户ID

Branch.setIdentity("your user id");

注销时取消设置用户标识

Branch.logout();

追踪用户操作和事件

使用BranchEvent类可跟踪特殊的用户操作或特定于应用程序的事件,而不仅仅是应用程序的安装,打开和共享。您可以跟踪事件,例如用户何时将商品添加到在线购物车中或搜索关键字等。BranchEvent提供一个接口来添加由BranchUniversalObject表示的内容,以便将内容与事件。您可以查看在“分支”仪表板上触发的BranchEvent的分析。 BranchEventType枚举最常跟踪的事件以及可以与BranchEvent一起使用以获得最佳结果的事件参数。您始终可以使用自定义事件名称和事件参数。

BranchEvent e01 = new BranchEvent (BranchEventType.COMPLETE_REGISTRATION);

e01.SetAffiliation("my_affilation");
e01.SetCoupon("my_coupon");
e01.SetCurrency(BranchCurrencyType.USD);
e01.SetTax(10.0f);
e01.SetRevenue(100.0f);
e01.SetShipping(1000.0f);
e01.SetDescription("my_description");
e01.SetSearchQuery("my_search_query");
e01.AddCustomData("custom_data_key01", "custom_data_value01");
e01.AddContentItem(universalObject);

Branch.sendEvent (e01);


BranchEvent e02 = new BranchEvent ("MY_CUSTOM_EVENT");

e02.SetAffiliation("my_affilation");
e02.SetCoupon("my_coupon");
e02.SetCurrency(BranchCurrencyType.USD);
e02.SetTax(10.0f);
e02.SetRevenue(100.0f);
e02.SetShipping(1000.0f);
e02.SetDescription("my_description");
e02.SetSearchQuery("my_search_query");
e02.AddCustomData("custom_data_key01", "custom_data_value01");
e02.AddContentItem(universalObject);

Branch.sendEvent (e02);

排查问题

iOS + Unity 4.6注意

Branch需要ARC,并且我们不打算在整个SDK中添加检查以尝试并支持ARC之前的版本。
但是,您可以将标志添加到项目中,以使用ARC编译Branch文件。如果您想这样做
-fobjectivec-arc添加到所有分支文件。

注意:默认情况下,我们会选中此标志,但请在为iOS构建之前进行检查。

Android-使用您自己的自定义应用程序类

如果您使用自己的Custom Application类,则需要在您的项目中添加Branch android库,并在OnCreate()方法中调用以下代码:

Branch.getAutoInstance(this.getApplicationContext());

如果您使用自己的自定义Activity类,请确保您覆盖以下Activity:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
}

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

支持分支与不同的插件

Branch SDK具有自己的自定义activityapplication类。其他使用自己的插件
定制活动和应用程序类可能导致这些类之间的“冲突”。解决这些冲突:

  1. 创建一个空的android库
  2. 将Branch插件以及其他插件添加到您的项目中
  3. 创建一个自定义的Activity和Application类,其中将包含所有插件的自定义逻辑
  4. 建立你的图书馆
  5. 将您的库添加到Unity项目
  6. 在清单的application标记中将android:name更改为自定义Application类的名称
  7. 在清单的activity标记中将android:name更改为自定义Activity类的名称

支持几个IMPL_APP_CONTROLLER_SUBCLASS

Branch Unity SDK插件使用其自己的UnityAppController来扩展默认AppController。这用于捕获通用链接。

@interface BranchAppController : UnityAppController
{
}
@end

@implementation BranchAppController

- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray *))restorationHandler {
    BOOL handledByBranch = [[BranchUnityWrapper sharedInstance] continueUserActivity:userActivity];
    return handledByBranch;
}

@end

IMPL_APP_CONTROLLER_SUBCLASS(BranchAppController)

某些插件会扩展默认的AppController,就像Branch的Cardboard SDK插件一样。解决冲突:

  1. 将所有自定义AppController合并到一个。
  2. 注释其他AppController中的代码(或删除其他AppController)。

示例应用

使用Google Play服务<版本17的变通办法实施步骤

  1. 安装BranchUnityWrapper.unitypackage

  2. 从Assets-> Plugins-> Branch-> Android-> libs中删除android-support-customtabs-23.3.0.jar

  3. 创建一个Assets-> Plugins-> Branch-> Editor文件夹。

  4. 将附加的BranchPluginDependencies.xml添加到新的Editor文件夹中。

  5. https://github.com/googlesamples/unity-jar-resolver安装最新的Google Play解析器

  6. 它应该自动解决依赖关系,但是您可能需要从播放解析器菜单中列出库来进行确认。您应该看到以下块:

dependencies {implementation 'com.android.installreferrer:installreferrer:1.0' // Assets/Plugins/Editor/BranchPluginDependencies.xml:11implementation 'com.android.support:customtabs:23.3.0' // Assets/Plugins/Editor/BranchPluginDependencies.xml:13implementation 'com.google.android.gms:play-services-ads:16.0.0' // Assets/Plugins/Editor/BranchPluginDependencies.xml:12}

4个月前更新


Unity


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

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