【问题标题】:OAuth and custom scheme result in a "ERR_UNKNOWN_URL_SCHEME" in ChromeOAuth 和自定义方案导致 Chrome 中出现“ERR_UNKNOWN_URL_SCHEME”
【发布时间】:2013-03-22 11:06:46
【问题描述】:

我已经坚持了好几个小时了,因为它之前工作正常,但突然停止以按预期运行。我真的不知道如何以及为什么,因为我一直在重新检查过程中的每一行代码,却看不出有什么问题,所以我向你们寻求帮助。

好的。所以我有一个LoginScreen 活动,带有一个按钮,在点击时开始一个新的Intent.ACTION_VIEW。这将在浏览器中启动 OAUTH 进程,并将 ApiManager.OAUTH_CALLBACK_URI 设置为 stjapp://oauthresponse

这是我在此活动中的AndroidManifest.xml 部分:

<activity
    android:name=".LoginScreen"
    android:label="@string/application"
    android:launchMode="singleTask">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <data android:scheme="stjapp" android:host="oauthresponse" />
    </intent-filter>
</activity>

我如何在我的活动中启动Intent.ACTION_VIEW

private View.OnClickListener loginHandler = new View.OnClickListener() {
        public void onClick(View v) {
             OAuthClientRequest request = null;
             try {
                request = OAuthClientRequest
                    .authorizationLocation(ApiManager.OAUTH_AUTHORIZE)
                    .setClientId(ApiManager.CLIENT_ID).setRedirectURI(ApiManager.OAUTH_CALLBACK_URI)
                    .buildQueryMessage();
            } 
            catch (OAuthSystemException e) { e.printStackTrace(); } 
            Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(request.getLocationUri() + "&response_type=code"));
            startActivity(intent);
        }
    };

这是浏览器中发生的屏幕截图:

在那里,我应该回到我的 LoginScreen 活动并在 onNewIntent 方法中处理 code 查询参数,但是......是的,事情不再按预期工作了。

任何帮助表示赞赏。

【问题讨论】:

  • 使用 Android 内置浏览器打开链接后一切正常。开始觉得我必须使用内部的WebView,而不是让这部分 OAuth 进程在外面。有什么想法吗?

标签: android android-intent android-manifest


【解决方案1】:

看起来这是Chromium bug。我正在使用的解决方法是 RedirectURI 的 PHP 登录页面,它通过 JavaScript 打开应用程序(不受该错误的影响):

<script language="javascript">
    window.location = 'myscheme://myhost/?<?=$_SERVER["QUERY_STRING"]?>';
</script>

【讨论】:

  • 当您链接到与铬相关的问题时,我将其标记为已接受的答案。我会看看哪些替代品适合我的需要。谢谢!
  • @Kyotoweb 很高兴为您提供帮助!
【解决方案2】:

我遇到了同样的错误,并通过在 URL 前加上 http:// 来解决它。

【讨论】:

    【解决方案3】:

    在 Chrome 40 及更高版本中,此错误再次出现,但前提是您在地址栏中手动输入重定向页面的 URL。问题在铬问题跟踪器here

    从问题粘贴的带有“解决方法”的响应:

    好的,我发现 window.location 通过意图重定向将 工作,只要它是从外部来源或链接点击 页。如果您手动将重定向页面的地址输入到 地址栏,应用程序的重定向/打开将失败并说 错误。

    因此,通过电子邮件或 SMS 发送指向重定向页面的链接即可 当用户点击链接时就好了。手动输入地址 进入地址栏会失败。 window.location = chromeUrl;应该 工作得很好。

    【讨论】:

      【解决方案4】:

      仅当您在地址栏中手动输入重定向页面的 URL 时。问题在铬问题跟踪器上。

      从问题粘贴的带有“解决方法”的响应:

      好的,我发现 window.location 通过意图重定向将起作用,只要从外部源或页面上的链接单击它。如果您在地址栏中手动输入重定向页面的地址,应用程序的重定向/打开将失败并出现上述错误。

      因此,当用户单击链接时,通过电子邮件或 SMS 发送指向重定向页面的链接就可以正常工作。在地址栏中手动输入地址将失败。 window.location = chromeUrl;应该可以正常工作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-04-04
        • 1970-01-01
        • 2016-01-30
        • 2017-10-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多