Unity

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

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

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

Google Play服务版本17+

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

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

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

注意 :若要将17以下的Google Play服务版本用于将来的应用构建,请遵循以下替代方法实施步骤

配置 Branch

图像

  • 自定义您的app.link域:

图像

配置分支SDK

配置应用

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

更新您的Branch预制

图像

完成操作后,请不要忘记点击 Update iOS Wrapper Update Android Manifest 按钮。

预制领域

栏位名称 描述
Simulate Fresh Installs 此复选框启用调试模式。这使您可以在每次卸载并重新安装该应用程序时进行全新模拟。在发布您的应用程序之前,请确保取消选中此框。
Test Mode 此复选框从您的Branch预制中选择测试密钥。如果未选中此框,则默认情况下,将使用活动的Branch键。
Test Branch Key 这是在您的测试Branch应用程序的“ 应用程序设置”页面上找到的测试Branch键。
Test Branch URI 这是您在“测试Branch”应用程序的“ 链接设置”页面为应用程序设置的测试URI方案
Test Android Path Prefix 仅当您位于Test Branch应用程序的bnc.lt 域时,此字段才适用。启用应用程序链接后,您可以在“ 链接设置”页面上标记为SHA256证书指纹的字段下方找到它。它看起来像这样: /WSuf (应包含首字母/字符)。
Test App Links 如果要为您的域启用APPLINKSUNIVERSAL LINKS ,则此字段适用。请确保添加正确的域,该域位于Test Branch应用程序的 Link Settings页面的底部。添加-alternate域,使您的Branch链接从您的 Deepviews Journeys 深度链接。如果您使用的不是app.links 域,请写入 [电子邮件保护]
Live Branch Key 这是Live Branch应用程序的 App Settings页面上的Live Branch键。
Live Branch URI 这是您在Live Branch应用程序的链接设置页面为应用程序设置的Live URI方案
Live Android Path Prefix 仅当您位于Live Branch应用的bnc.lt链接设置页面上时,此字段才适用。启用应用链接后,您可以在链接设置第页上的SHA256证书指纹字段下找到它。它看起来像这样: /WSuf (应包含首字母/字符)。
Live App Links 如果要为您的域启用APPLINKSUNIVERSAL LINKS ,则此字段适用。请确保添加在Live Branch应用的 Link Settings页面底部找到的正确域。添加-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链接
 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());
  }
    });

读取深度链接

  • 阅读深度链接接从PARAMS BUOBranchInitSession callback

  • 返回深度链接属性

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());
        }
    }

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

在Branch初始化会话后从任何地方读取安装(安装或打开)参数

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表示的内容,以便将内容与事件。您可以查看在“Branch”仪表板上触发的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编译分支文件。如果您希望这样做
-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与不同的插件

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. 创建资产>插件>Branch>编辑器文件夹。

  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}

2个月前更新

Unity


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

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