認証に OAuth を使用するアプリを開発していますが、OAuth コールバックの処理に少し問題があります。
認証
私のアプリにはログイン画面としてwebview があり、webviewに認証フォームを読み込むための URL が与えられています。URLが次のとおりであるとしましょう:
https://myoauthhost.com/oauth/auth?response_type=code&client_id=XXXXXXX&redirect_uri=YYYYYYYY&scope=ZZZZZZZZZZ
認証アクティビティ(AuthActivity.java)には、次のものがあります。
String authURL = https://myoauthhost.com/oauth/auth?response_type=code&client_id=XXXXXXX&redirect_uri=YYYYYYYY&scope=ZZZZZZZZZZ
myWebView.loadUrl(authURL);
manifest.xml には、oauth コールバック処理について次のように記載されています。
<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>
問題
この URL を webview で (loadURL() メソッドを使用して) 使用すると、REAL OAUTH WEB FROM (webview にロードする必要があります) を含む別の URL にリダイレクトされます。問題は、このリダイレクトが Android のインテント選択を自動的に開始することです。URL は Web ブラウザーによって処理される必要があるため、Android では、電話で使用可能な Web ブラウザーのいずれかを選択して URL を開くことができます。
これは私が望んでいるものではないので、リダイレクトが webview 内で処理され、web ブラウザー (またはその他) が起動しないように、次のコードを含める必要があります。
myWebView.setWebViewClient(new WebViewClient());
したがって、このコードでは、リダイレクトは「webview 内」で処理され、ログイン画面が表示されます。
その後、資格情報を入力できます (例: Twitter 経由の oauth) が、認証が完了するとコールバックが受信されますが、コールバックを処理するはずのアクティビティ (マニフェストでコールバックを受信するように構成された AuthActivity) は起動されません。代わりに、URL コールバック (この例では、マニフェストで構成されている authprovider://auth/XXX?xxx=yyy) が見つからないというメッセージを表示する webview があります。
その理由は、次のコードである可能性があります。
myWebView.setWebViewClient(new WebViewClient());
は、webview がすべてを処理することを Android に伝えます。そのため、コールバック URL は Web URL ではないため、処理に問題があり、それを処理できるインテントを起動することさえできません。
質問
この問題を解決するにはどうすればよいですか? アクティビティがコールバックを処理できるようにする必要がありますが、webview がそれを読み込もうとしないようにする必要があります。
任意の助けをいただければ幸いです
前もって感謝します