12

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

好的。所以我有一个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活动并处理方法中的code查询参数,onNewIntent但是......是的,事情不再按预期工作了。

任何帮助表示赞赏。

4

4 回答 4

7

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

<script language="javascript">
    window.location = 'myscheme://myhost/?<?=$_SERVER["QUERY_STRING"]?>';
</script>
于 2013-03-24T16:36:38.267 回答
4

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

于 2014-08-30T22:23:11.163 回答
2

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

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

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

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

于 2015-02-25T23:01:16.420 回答
2

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

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

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

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

于 2016-03-11T07:52:53.720 回答