我正在做一个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,但我不知道如何。
提前谢谢大家。