私はOAuth
Androidアプリを介してライブ接続のフローを実装しようとしています。認証と同意の部分ではWebView
、ユーザーを対応するページにリダイレクトするために使用しています。私が実装しようとしているフローは-
- 起動し
MyActivity
ます。 - で
onCreate()
、起動auth url
して待機します。 - ユーザーはアカウントを使用してログインし、同意ページにリダイレクトされます。
- ユーザーはアクセス許可に同意します。
- 認証コードを解析します。
- に戻り、コード
MyActivity
を使用してアクションを実行しauth
ます。
以下はコードスニペットです:
public class MyActivity extends Activity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState)
WebView myWebView = (WebView) findViewById(R.id.webview);
AuthFlowWebView authView = new AuthFlowWebView(); //AuthFlowWebView extends WebViewClient
myWebView.getSettings().setJavaScriptEnabled(true);
myWebView.setWebViewClient(authView);
myWebView.loadUrl("https://login.live.com/oauth20_authorize.srf?client_id=<CLIENT_ID>&scope=wl.signin%20wl.offline_access&response_type=code&redirect_uri=https%3A%2F%2Flogin.live.com%2Foauth20_desktop.srf&display=touch");
Log.i("", "Here already before the auth process is complete");
}
}
//Here is the Overriden onPageFinished method used to parse the auth code in AuthFlowWebView class:
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
Thread.dumpStack();
if (url.contains("oauth20_desktop.srf?code=")) {
authSuccess = true;
Uri uri = Uri.parse(url);
authCode = uri.getQueryParameter("code");
Log.i("", "CODE : " + authCode);
authProcessComplete = true;
}
MyActivity
手順3〜5が完了するまで待つことに固執しています。そのようなフローを実装するための代替案を提案してください。