首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用WebView实现Android WebView

使用WebView实现Android WebView
EN

Stack Overflow用户
提问于 2013-03-02 17:00:13
回答 1查看 4.9K关注 0票数 0

我正试图通过一个安卓应用程序实现实时连接的OAuth流。对于身份验证和同意部分,我使用WebView将用户重定向到相应的页面。我想要实现的流程是-

  1. 启动MyActivity
  2. onCreate()中,启动auth url并等待。
  3. 用户使用帐户登录并重定向到“同意”页面。
  4. 用户同意访问权限。
  5. 解析auth代码。
  6. 返回到MyActivity并使用auth代码执行操作。

下面是代码片段:

代码语言:javascript
复制
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完成为止。请提出实现这一流程的备选方案。

EN

回答 1

Stack Overflow用户

发布于 2013-03-04 16:44:01

更新了我的WebViewClient实现,如下所示,这解决了问题。希望有人能找到有用的东西。

代码语言:javascript
复制
myWebView.setWebViewClient(new WebViewClient() {

        boolean authComplete = false;
        Intent resultIntent = new Intent();

        @Override public void onPageStarted(WebView view, String url, Bitmap favicon){
         super.onPageStarted(view, url, favicon);
         pDialog = ProgressDialog.show(view.getContext(), "",
                    "Connecting to " + provider + " server", false);
        }

        @Override
        public void onPageFinished(WebView view, String url) {
            super.onPageFinished(view, url);
                pDialog.dismiss();

            if (url.contains("?code=") && authComplete != true) {
                Uri uri = Uri.parse(url);
                authCode = uri.getQueryParameter("code");
                Log.i("", "CODE : " + authCode);
                authComplete = true;
                resultIntent.putExtra("code", authCode);
                WebActivity.this
                        .setResult(Activity.RESULT_OK, resultIntent);
                resultIntent.putExtra("status", WebActivity.Status.SUCCESS.toString());
                setResult(Activity.RESULT_CANCELED, resultIntent);
                finish();
            }else if(url.contains("error=access_denied")){
                Log.i("", "ACCESS_DENIED_HERE");
                resultIntent.putExtra("code", authCode);
                resultIntent.putExtra("status", WebActivity.Status.ACCESS_DENIED.toString());
                authComplete = true;
                setResult(Activity.RESULT_CANCELED, resultIntent);
                finish();
            }
        }
    });
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15177042

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档