当前位置: 首页 > 知识库问答 >
问题:

使用不直接提供APK的自定义URL处理延迟的深度链接

尹辰沛
2023-03-14

我正在使用branch.io为我的Android应用程序实现一个延迟的深度链接

我正在处理用户点击链接但没有安装应用程序的用例(安装应用程序时我的链接已经起作用了)。目前,我的应用程序不是放在Play Store上,而是放在Fabric上。因此,我设置了深度链接,将用户重定向到类似https://betas.to/...的url。这样他最终就可以下载测试版,然后再下载应用程序。

不幸的是,我无法使以下用例工作:

->用户点击来自Android设备的深度链接(不带app)

->用户访问Fabric web页面以提供其电子邮件进行测试

->用户打开Fabric电子邮件

->用户下载测试版(可选)

->用户下载测试版应用程序

->App启动,并考虑延迟的深度链接

问题出现在最后一步:初始的深度链接不再被考虑。我猜这是因为app最终没有从链接打开。

我能期望这个流以某种方式工作吗?如果不是,我想知道我在Branch dashboard中提供的URL是否必须直接指向一个APK文件。

更新1

我刚刚意识到,当我测试我的延迟深度链接(遵循branch deferred deeplink测试过程)时,我得到了一个与branch相关的错误。这个错误只发生在我刚点击链接就从Android Studio安装应用程序的时候。我觉得有什么东西在阻止Branch正确捕获应用程序安装事件。

我得到的是:

null

下面一行是:

BranchSDK:无法解析:lcom/Android/InstallReferrer/API/InstallReferrerClient;

共有2个答案

石正卿
2023-03-14

TLDR;您应该始终在activity开始时调用此方法:

Branch.getInstance().initSession(BranchReferralInitListener callback, @NonNull Uri data, Activity activity)

即使您有一个空Uri

由于Branch API用@nonnull注释了这个参数,所以我感到困惑。

我检查了源代码,确认Branch正确处理了空值。当传入null时,Branch将自动检测它是冷启动还是延迟的深度链接。

这是他们github中的相关代码:

// In case of a cold start by clicking app icon or bringing app to foreground Branch link click is always false.
if (intent.getData() == null || (!isActivityCreatedAndLaunched && isIntentParamsAlreadyConsumed(activity))) {
    // Considering the case of a deferred install. In this case the app behaves like a cold start but still Branch can do probabilistic match.
    // So skipping instant deep link feature until first Branch open happens
    if (!prefHelper_.getInstallParams().equals(PrefHelper.NO_STRING_VALUE)) {
        JSONObject nonLinkClickJson = new JSONObject();
        try {
            nonLinkClickJson.put(Defines.Jsonkey.Clicked_Branch_Link.getKey(), false);
            nonLinkClickJson.put(Defines.Jsonkey.IsFirstSession.getKey(), false);
            prefHelper_.setSessionParams(nonLinkClickJson.toString());
                isInstantDeepLinkPossible = true;
        } catch (JSONException e) {
             e.printStackTrace();
        }
    }
}
缪志新
2023-03-14

缺少的类(com.android.InstallReferrer.InstallReferrerClient)是Branch的依赖项,但不会自动包含。您必须自己将其添加到构建中。

implementation 'com.android.installreferrer:installreferrer:1.0'

在Branch的分级文件里看到了。

它是在2.17版中添加的,但文档似乎没有跟上。

有可能这个堆栈跟踪是有点危险的。在阅读提交之后。库捕获ClassNotFound异常并记住该类不可用。它还有助于打印异常。

然而,install referrer包涉及到跨安装跟踪引用程序,因此匹配您的步骤以再现。

 类似资料:
  • 我们正在尝试在一款iOS应用中实现延迟深度链接,以鼓励用户邀请好友使用该应用,并根据用户的推荐链接安装次数来奖励用户。与Tapstream的产品基本相似。 请考虑以下示例: 因此,UserA在他们想要的任何网络上共享他们的链接“ourappurl.com/refer?id=UserA”。UserB点击这个链接,这个链接会把他们带到Safari,然后弹出到应用程序商店页面,在那里UserB下载应用程

  • 我的清单中定义了以下内容: 我将onCreate()定义为: 这是按照Android留档:Android深度链接 所以问题是: 如何测试URI深层链接?根据留档,我运行类似 adb shell am start-W-aAndroid系统。意图行动视图-d“example://gizmos“com.app.package 但这产生了: 错误:活动未启动,无法解决意图{act=android.inte

  • 我在我的应用程序中以编程方式创建了一些Firebase动态链接,当它们是长ULR时可以正常工作,我的意思是,Firebase创建的默认动态链接。如果用户没有安装应用程序,则打开Play store,安装应用程序后打开深度链接。另一方面,如果用户安装了app,则直接打开深度链接。 嗯,在那之后,我尝试创建一个简短的动态链接版本,因为URL太长了,看起来不“漂亮”,并且隐藏了一些出现在链接中的信息。

  • 问题内容: 我有一个启用HTML5模式的Angular.js应用程序。 我要实现的是获取一些URL或标签来执行正常的浏览行为,而不是使用HTML5历史API更改地址栏中的URL并使用Angular控制器对其进行处理。 我有这个链接: 我希望浏览器将用户重定向到,以便将用户重定向到身份验证服务。 有什么办法可以做到吗? 问题答案: 在Angular 1.0.1中添加作品: 记录了此功能(https:

  • 我们正在为我们的android应用程序实现延迟的深度链接,但是当从facebook广告下载时,无法获得安装推荐器。 采取的步骤, 1.从分支创建深度链接。io仪表板= 2.对于在android中的重定向(当应用程序未安装时),web url设置为所需的推荐值。例如https://play.google.com/store/apps/details?id=mypackagename 3.当用户直接点

  • 在我阅读的过程中,iOS 9引入了通用链接。在苹果应用程序搜索编程指南的“支持通用链接”一节中,它说这与URL方案的深度链接并不完全相同,但我对这个话题并不完全清楚: 通用链接和URL方案之间的区别是什么?是不是通用链接只适用于网站中的超链接,以及邮件或消息应用程序? 通用链接取代URL方案吗? 通用链接是一种深层链接吗?