Facebook登录后使用SDK登录WebView Android

时间:2017-03-08 23:57:44

标签: android facebook webview facebook-login facebook-sdk-4.0

我正在做一个Android应用,它包含一个重定向到网址的网页视图。 加载的网站有登录选项通过Facebook。由于不建议使用webview登录facebook,我在facebook教程中添加了一个登录按钮以供SDK使用。该按钮调用设备中的Facebook应用程序,并正确显示配置文件用户的信息,所以我认为一切都很好。 我已经将所有代码都放在登录的成功案例中,在那里创建了webview,所以它们都在同一个活动中。 问题是页面加载后无法识别登录访问权限,因此用户必须再次插入数据。如果用户尝试通过webview登录,则登录后会出现空白页面。如果我尝试在没有应用程序的移动设备中使用该网站,例如使用chrome,一切正常。 我使用了facebook-android-sdk-4.20.0。 Android Studio 2.3。 这是代码:

public class MainActivity extends AppCompatActivity {

WebView webView;
CallbackManager callbackManager;

@Override
protected void onCreate(Bundle savedInstanceState) {
    FacebookSdk.sdkInitialize(getApplicationContext());
    super.onCreate(savedInstanceState);
    callbackManager = CallbackManager.Factory.create();

    LoginButton loginButton = (LoginButton) findViewById(R.id.login_button);
    setContentView(R.layout.activity_main);

    LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("public_profile"));
    LoginManager.getInstance().registerCallback(callbackManager,
            new FacebookCallback<LoginResult>() {
                @Override
                public void onSuccess(LoginResult loginResult) {

                    WebView webView = (WebView) findViewById(R.id.webView);
                    CookieManager cookieManager = CookieManager.getInstance();
                    cookieManager.setAcceptCookie(true);
                    WebSettings webSettings = webView.getSettings();
                    webSettings.setJavaScriptEnabled(true);
                    webView.setWebViewClient(new WebViewClient());
                    webView.setWebChromeClient(new WebChromeClient());
                    webView.loadUrl("mywebviewpage.com");


                }

                @Override
                public void onCancel() {
                    // App code
                }

                @Override
                public void onError(FacebookException exception) {
                    // App code
              }
            });
      }


  public void onCreateView(

        LayoutInflater inflater,
        ViewGroup container,
        Bundle savedInstanceState) {


    View view = inflater.inflate(R.layout.activity_page2, container, false);
    LoginButton loginButton = (LoginButton) view.findViewById(R.id.login_button);
    loginButton.setReadPermissions("email");

    // Callback registration
    loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
        @Override
        public void onSuccess(LoginResult loginResult) {
            // App code

            WebView webView = (WebView) findViewById(R.id.webView);
            CookieManager cookieManager = CookieManager.getInstance();
            cookieManager.setAcceptCookie(true);
            WebSettings webSettings = webView.getSettings();
            webSettings.setJavaScriptEnabled(true);
            webView.setWebViewClient(new WebViewClient());
            webView.setWebChromeClient(new WebChromeClient());
            webView.loadUrl("mywebviewpage.com");
        }
        @Override
        public void onCancel() {
        }
        @Override
        public void onError(FacebookException exception) {
            // App code
        }
    });
    }

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    callbackManager.onActivityResult(requestCode, resultCode, data);
}

}

我应该使用网站在Android应用中使用的相同Facebook App ID吗? 我应该如何重定向webview中的网址?我的意思是,我应该插入任何类型的信息吗? 我想我应该使用loginResult.getAccessToken()。getUserId()和loginResult.getAccessToken()。getToken()做一些事情,将这些信息提供给webview,但我不知道如何。

提前谢谢大家。

0 个答案:

没有答案