以前は問題なく機能していたので、何時間もこれに悩まされていましたが、予期したとおりに動作するために突然停止しました。何がどのように、なぜなのかはわかりません。何が問題なのかわからないまま、プロセスのすべてのコード行を再チェックしているので、皆さんに助けを求めています。
よし。ですから、ボタンをクリックして新しいIntent.ACTION_VIEW
を開始するLoginScreen
アクティビティがあります。これにより、ブラウザーでApiManager.OAUTH_CALLBACK_URI
をstjapp://oauthresponse
に設定してOAUTHプロセスを開始します。
これがこのアクティビティの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
メソッド内で処理することになっていますが、そうです。もう期待。
助けてくれてありがとう。
これは Chromiumバグ のようです。私が使用している回避策は、PHP JavaScript経由でアプリを開くRedirectURIのランディングページです(このバグの影響を受けません):
<script language="javascript">
window.location = 'myscheme://myhost/?<?=$_SERVER["QUERY_STRING"]?>';
</script>
同じエラーが発生し、URLの前にhttp://
を付けることで解決しました。
アドレスバーにリダイレクトページのURLを手動で入力している場合のみ。問題はここのクロム問題追跡システムにあります。
問題から貼り付けられた「回避策」を含む応答:
OK、インテントを介したwindow.locationリダイレクトが、ページ上の外部ソースまたはリンクからクリックされたときに動作することを発見しました。リダイレクトページのアドレスをアドレスバーに手動で入力すると、リダイレクト/アプリの起動が上記のエラーで失敗します。
そのため、リダイレクトページへのリンクを電子メールまたはSMSで送信すると、ユーザーがリンクをクリックすると正常に機能します。アドレスをアドレスバーに手動で入力すると失敗します。window.location = chromeUrl ;正常に動作するはずです。
Chromeバージョン40以降では、このバグが再び表面化しましたが、アドレスバーにリダイレクトページのURLを手動で入力している場合のみです。問題はchromiumの問題トラッカーにあります ここ 。
問題から貼り付けられた「回避策」を含む応答:
OK、インテントを介したwindow.locationリダイレクトが、ページ上の外部ソースまたはリンクからクリックされたときに動作することを発見しました。リダイレクトページのアドレスをアドレスバーに手動で入力すると、リダイレクト/アプリの起動が上記のエラーで失敗します。
そのため、リダイレクトページへのリンクを電子メールまたはSMSで送信すると、ユーザーがリンクをクリックすると正常に機能します。アドレスバーにアドレスを手動で入力すると失敗します。
window.location = chromeUrl;
は問題なく動作するはずです。