2

Android 開発の初心者ここで説明されている Web 認証方法を適用しようとしています: https://sites.google.com/site/oauthgoog/oauth-practices/mobile-apps-for-complex-login-systems/samplecode

結果コードは次のとおりです。

public class LoginActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        requestWindowFeature(Window.FEATURE_PROGRESS);
        WebView webview = new WebView(this);
        webview.getSettings().setJavaScriptEnabled(true);


        webview.setWebChromeClient(new WebChromeClient() {
            // Show loading progress in activity's title bar.
            @Override
            public void onProgressChanged(WebView view, int progress) {
                setProgress(progress * 100);
            }
        });

        webview.setWebViewClient(new WebViewClient() {
            // When start to load page, show url in activity's title bar
            @Override
            public void onPageStarted(WebView view, String url,
                    Bitmap favicon) {
                setTitle(url);
            }

            @Override
            public void onPageFinished(WebView view, String url) {
                CookieSyncManager.getInstance().sync();
                // Get the cookie from cookie jar.
                String cookie = CookieManager.getInstance().getCookie(url);
                if (cookie == null) {
                    return;
                }
                // Cookie is a string like NAME=VALUE [; NAME=VALUE]
                String[] pairs = cookie.split(";");
                for (int i = 0; i < pairs.length; ++i) {
                    String[] parts = pairs[i].split("=", 2);
                    // If token is found, return it to the calling activity.
                    parts[0] = parts[0].trim();
                    if (parts.length == 2 && parts[0].equalsIgnoreCase("MY_PRIVATE_TOKEN")) {
                        Intent result = new Intent();
                        result.putExtra("token", parts[1]);
                        setResult(RESULT_OK, result);
                        finish();
                    }
                }
            }
        });

        String queryStringAndroidId = "?aid="+Secure.getString(this.getContentResolver(),Secure.ANDROID_ID);


        setContentView(webview);

        String urlToLoginPage =getString(R.string.web_login_page).concat(queryStringAndroidId);

        webview.loadUrl(urlToLoginPage);

    }

}

私の問題はonPageFinishedメソッドにあります。WebView が初めて表示されると、このメソッドが呼び出されますが、これは予期していませんでした。認証 Cookie が既に存在する場合、アクティビティはすぐに閉じられます。私の理解では、このメソッドは、別のページが webview に表示されている場合 (最初に呼び出したページ以外) にのみ呼び出されることになっていますが、間違っていますか? 誰かがこの行動に光を当てることができますか? どうもありがとう。

ところで、私はこの解決策を見ました:WebページをレンダリングするときにonPageFinishedが正しく起動しませんが、このような回避策は好きではありません。予期しないときにメソッドが起動する理由を理解しています。ありがとう。

4

0 に答える 0