OAuth的和定制方案,结果在Chrome浏览器“ERR_UNKNOWN_URL_SCHEME”(O

2019-07-22 15:16发布

我一直停留在这几个小时,现在的事情是以前的工作,但突然停下来像预期的那样。 我真的不知道如何和为什么,因为我一直在重新检查的过程中每一行代码,而不能看到什么是错的,所以我要问你的帮助球员。

好的。 所以我有一个LoginScreen活动的一个按钮启动一个新的Intent.ACTION_VIEW上点击。 这开始与浏览器中的OAUTH proccess 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活动和处理code中的查询参数onNewIntent方法,但...是啊,事情并不如预期了工作。

任何帮助表示赞赏。

Answer 1:

看起来这是一个铬错误 。 我使用的解决方法是为RedirectURI一个PHP登陆页面打开通过JavaScript(这是不受这个bug)的应用程序:

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


Answer 2:

我有同样的错误,并通过前缀来解决URL它http://



Answer 3:

在Chrome版本40及以上,这个bug已经复出,但只有当你手动输入重定向页面的URL地址栏。 这个问题是关于铬的问题跟踪器在这里 。

与“解决办法”,从问题粘贴的回应:

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

所以,当用户点击链接的电子邮件或短信发送的链接重定向页面会工作得很好。 手动键入地址到地址栏会失败。 window.location = chromeUrl; 应该只是罚款。



Answer 4:

只有当你手动输入重定向页面的URL地址栏。 这个问题是关于铬的问题跟踪器在这里。

与“解决办法”,从问题粘贴的回应:

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

所以,当用户点击链接的电子邮件或短信发送的链接重定向页面会工作得很好。 手动键入地址到地址栏会失败。 window.location的= chromeUrl; 应该只是罚款。



文章来源: OAuth and custom scheme result in a “ERR_UNKNOWN_URL_SCHEME” in Chrome