OAuthを認証に使用するアプリケーションを開発していますが、OAuthコールバックの処理には少し問題があります。Webviewで認証が行われた場合、インテントフィルタでOAuth URLコールバックを処理する方法は?
認証
私のアプリはログイン画面としてのWebViewを持って、私は私のWebViewで認証フォームをロードするためのURLを与えられています。
https://myoauthhost.com/oauth/auth?response_type=code&client_id=XXXXXXX&redirect_uri=YYYYYYYY&scope=ZZZZZZZZZZ
と認証活動(AuthActivity.java)で
、私は次ています:manifest.xmlに中String authURL = https://myoauthhost.com/oauth/auth?response_type=code&client_id=XXXXXXX&redirect_uri=YYYYYYYY&scope=ZZZZZZZZZZ
myWebView.loadUrl(authURL);
、私はOAuthのコールバックのために、次のしているのは、URLがあるとしましょう取り扱い:
<activity
android:name=".AuthActivity"
android:label="@string/app_name"
android:screenOrientation="portrait" >
<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:host="authprovider"
android:scheme="auth" />
</intent-filter>
</activity>
PROBLEM
このURLはwebview(loadURL()メソッドで使用)でREAL OAUTH WEB FROM(webviewにロードする必要があります)を含む別のURLにリダイレクトします。問題は、このリダイレクトは、インテントの選択をAndroidで自動的に起動することです.URLはWebブラウザで処理する必要があるため、電話で利用可能なWebブラウザの1つを選択してURLを開きます。
これは私が欲しいものではありませんので、私はリダイレクトがWebViewの内部で処理されますが、Webブラウザ(または何でも)を起動しないように、次のコードを含める必要があります:
myWebView.setWebViewClient(new WebViewClient());
ので、これとコードでは、リダイレクトは「webview内で」処理され、ログイン画面が表示されます。
認証が完了すると、認証が行われるとコールバックが受信されますが、コールバックを処理するはずのアクティビティ(AuthActivityがマニフェストでコールバックを受信するように設定されています)起動されません。代わりに、webviewにurlコールバック(私たちの場合、マニフェストで設定されているauthprovider:// auth/XXX?xxx = yyy)が見つかりませんというメッセージが表示されます。
理由は、次のコードということがあります先に紹介し
myWebView.setWebViewClient(new WebViewClient());
は、WebViewのすべてを処理するのAndroidに伝えます。コールバックURLはWeb URLではないので、これを処理するのが難しく、処理できるインテントを起動することさえできません。
QUESTION
どのように私はこの問題を解決することができますか? 私は、アクティビティにコールバックを処理させることはできますが、webviewにはロードさせません。ある場合
任意のヘルプは、
私はOAuthを 'AccountManager'と統合しようとしていましたが、' android:launchMode = "singleInstance" 'は私のために働いていました。 – d370urn3ur