12

以前は機能していたので、何時間もこれに固執していましたが、突然停止して期待どおりに動作しなくなりました。何が問題なのかを確認することができずに、プロセス内のコードのすべての行を再チェックしているため、その方法と理由がよくわからないので、皆さんに助けを求めています.

大丈夫。そのため、クリック時LoginScreenに新しいボタンを開始するアクティビティがありIntent.ACTION_VIEWます。ApiManager.OAUTH_CALLBACK_URIこれにより、 に設定されたブラウザで OAUTH プロセスが開始され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 のバグのようです。私が使用している回避策は、JavaScript を介してアプリを開く RedirectURI の PHP ランディング ページです (これはそのバグの影響を受けません)。

<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

アドレス バーにリダイレクト ページの URL を手動で入力している場合のみ。この問題は、こちらのクロムの問題トラッカーにあります。

問題から貼り付けられた「回避策」を含む応答:

OK、外部ソースまたはページ上のリンクからクリックされている限り、意図を介した window.location リダイレクトが機能することがわかりました。リダイレクトページのアドレスをアドレスバーに手動で入力すると、リダイレクト/アプリを開くことが上記のエラーで失敗します。

したがって、電子メールまたは SMS でリダイレクト ページへのリンクを送信すると、ユーザーがリンクをクリックしたときに問題なく機能します。アドレス バーに手動でアドレスを入力すると失敗します。window.location = chromeUrl; うまくいくはずです。

于 2016-03-11T07:52:53.720 に答える
2

Chrome バージョン 40 以降では、アドレス バーにリダイレクト ページの URL を手動で入力している場合にのみ、このバグが再発しました。この問題は chromium issue tracker here にあります

問題から貼り付けられた「回避策」を含む応答:

OK、外部ソースまたはページ上のリンクからクリックされている限り、意図を介した window.location リダイレクトが機能することがわかりました。リダイレクトページのアドレスをアドレスバーに手動で入力すると、リダイレクト/アプリを開くことが上記のエラーで失敗します。

したがって、電子メールまたは SMS でリダイレクト ページへのリンクを送信すると、ユーザーがリンクをクリックしたときに問題なく機能します。アドレス バーに手動でアドレスを入力すると失敗します。 window.location = chromeUrl;うまくいくはずです。

于 2015-02-25T23:01:16.420 に答える