0

我在我的应用程序中使用带有 branch.io 的深度链接。应用程序生成 url 并使用自定义方案打开它。在原生 android brawser、firefox 和 opera-mini 上运行正常,但在 chrome-android 上失败并出现 ERR_UNKNOWN_URL_SCHEME

下面的代码:清单

        <activity
        android:launchMode="singleTask"
        android:name=".ui.activity.ShareActivity"
        android:screenOrientation="portrait">
        <intent-filter>
            <data android:scheme="myapp" 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>
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

生成 url 的代码(文档:https ://dev.branch.io/getting-started/creating-links-in-apps/guide/android/ ):

    public static void generateShortUrl(@NonNull Context aContext,
                                    @Nullable String aMediaId,
                                    @Nullable String aCollectionId,
                                    @NonNull CanonicalIdentifier aCanonicalIdentifier,
                                    @NonNull String aDesktopUrl,
                                    @NonNull Branch.BranchLinkCreateListener aListener){

    BranchUniversalObject branchUniversalObject = new BranchUniversalObject()
            .setCanonicalIdentifier(String.valueOf(aCanonicalIdentifier.ordinal() + 1))
            .setContentIndexingMode(BranchUniversalObject.CONTENT_INDEX_MODE.PUBLIC)
            .addContentMetadata(SHARE_MEDIA_ID, aMediaId);


    if(BuildConfig.DEBUG){
        Log.e("BranchConfigTest","share date:"+branchUniversalObject.convertToJson().toString());
    }

    if(!TextUtils.isEmpty(aCollectionId))
        branchUniversalObject.addContentMetadata(SHARE_COLLECTION_ID,aCollectionId);

    if(!TextUtils.isEmpty(aMediaId))
        branchUniversalObject.addContentMetadata(SHARE_MEDIA_ID,aMediaId);

    LinkProperties linkProperties = new LinkProperties()
            .setFeature("sharing")
            .addControlParameter("$desktop_url", aDesktopUrl);

    branchUniversalObject.generateShortUrl(aContext,linkProperties,aListener);
}
4

1 回答 1

3

Alex 和 Branch 在这里:不幸的是,这是 Chrome 的一个已知问题。基本上,在 Chrome 40 的某些版本中,已决定键入和粘贴的 URL 应防止自动重定向,例如 Branch 用于打开 Play 商店或启动您的应用程序的重定向。去年夏天,我们与 Chromium 团队合作开发了一个解决方案,但几周前我们注意到该问题仅针对键入的URL 进行了修复,而不针对用户直接粘贴到 Chrome 地址栏中的 URL。

好消息是,在野外,这非常非常罕见。它通常只在分支集成的测试阶段由开发人员触发——绝大多数用户只会点击链接(而不是粘贴 URL),因此永远不会遇到这种情况。显然,这仍然不是一个理想的解决方案,所以如果您愿意,请随时使用 Chromium 提交雷达。我们可以支持它并要求我们的团队也提供示例。

于 2016-03-07T03:43:51.090 回答