chrome android 未知方案

chrome android unknown scheme

我在我的应用程序中使用 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);
}

Alex 和 Branch 在这里:不幸的是,这是 Chrome 的一个已知问题。基本上,在 Chrome 40 的某个版本中,已决定键入和粘贴的 URL 应该防止自动重定向,就像 Branch 用来打开 Play 商店或启动您的应用程序一样。我们 worked on a solution with the Chromium team last summer,但几周前我们注意到该问题仅针对 输入的 URL 得到解决,而不是针对用户直接粘贴到 [=] 的 URL 20=]的地址栏。

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