Android Webview Facebook登录
在我的应用程序中,我想让用户能够使用他们的Facebook帐户登录。经过一些搜索,我能够找出这一点,虽然我不认为这是最好的方法。我在UI中使用webview,并使用webviewclient来感知url切换。据我所知,在Android上,我必须处理我的webviewclient中的所有重定向(Facebook重定向,当用户设置他/她的电子邮件和密码时会发生多次重定向)。但我所需要的只是解析输出xml并根据输出结果做出决定(重定向到我的主页活动或失败等)。这是我的代码,如果有更合适的方法,请给出你的建议Android Webview Facebook登录,android,facebook,login,webview,webviewclient,Android,Facebook,Login,Webview,Webviewclient,在我的应用程序中,我想让用户能够使用他们的Facebook帐户登录。经过一些搜索,我能够找出这一点,虽然我不认为这是最好的方法。我在UI中使用webview,并使用webviewclient来感知url切换。据我所知,在Android上,我必须处理我的webviewclient中的所有重定向(Facebook重定向,当用户设置他/她的电子邮件和密码时会发生多次重定向)。但我所需要的只是解析输出xml并根据输出结果做出决定(重定向到我的主页活动或失败等)。这是我的代码,如果有更合适的方法,请给出你
public class FbLoginActivity extends Activity {
String fbLoginBaseUrl = "{my server url}/facebook/redirector.jsp?";
private ProgressDialog progressBar;
WebView webView;
int count = 0;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fb_login);
fbLoginBaseUrl += "usdId=NoSession:";
fbLoginBaseUrl += Subroutines.getInstance().getDeviceId() + "_L";
webView = (WebView) findViewById(R.id.webview);
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
progressBar = ProgressDialog.show(FbLoginActivity.this, "", "Page is loading...");
webView.setWebViewClient(new HelloWebViewClient());
webView.loadUrl(fbLoginBaseUrl);
}
private class HelloWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
Log.v(Subroutines.TAG, url);
return true;
}
@Override
public void onPageFinished(WebView view, String url) {
Log.i(Subroutines.TAG, "Finished loading URL: " +url);
// if login screen loading finishes, cancel the progressdialog..
// twice redirecting happens to this sub url..
String subFace = "m.facebook.com/login.php";
if(url.indexOf(subFace) != -1 && ++count == 2){
if (progressBar.isShowing()) {
progressBar.cancel();
}
}
// Permission redirecting..
String loginSub = "www.facebook.com/connect/uiserver.php?method=permissions.request";
if(url.indexOf(loginSub) != -1){
progressBar = ProgressDialog.show(FbLoginActivity.this, "", "Logging in...");
}
// finally if my server makes a response..
String sub = "{my server url}/facebook/connect.jsp";
if(url.indexOf(sub) != -1){
Log.v(Subroutines.TAG, "my server makes a response..");
// xml parsing stuff..
// use url content to parse
}
}
@Override
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
Log.e(Subroutines.TAG, "Error: " + description);
}
}
}
我会得到Facebook SDK并使用它们的功能 简而言之,您可以这样做:
public Facebook facebook = new Facebook("appID");
然后在“创建”或“任意位置”中:
facebook.authorize(this,String[] YourNeededPermissions, new DialogListener() {
@Override
public void onComplete(Bundle values) {}
@Override
public void onFacebookError(FacebookError error) {}
@Override
public void onError(DialogError e) {}
@Override
public void onCancel() {}
});
你可以看到这一点实际上,我在将facebook注册与我自己的注册集成时遇到了类似的问题(但我不是android开发者)。 我在这里问了这个问题 但是我不知道网络视图。这似乎是一个很好的解决方案,我可以通过聊天或其他方式与您联系吗 编辑: Facebook刚刚更新了他们的登录程序: 如您所见,现在您从SSO获得的令牌(或任何其他客户端令牌)仅链接到您的应用程序(存在验证令牌app id app secret)。 终点现在是
https://graph.facebook.com/oauth/access_token?
client_id=APP_ID&
client_secret=APP_SECRET&
grant_type=fb_exchange_token&
fb_exchange_token=EXISTING_ACCESS_TOKEN
因此,使用facebook android sdk的步骤如下:
1) 让用户签名
2) 将令牌发送到服务器
3) 服务器将根据其应用id和应用机密验证令牌
4) 添加您自己的安全功能此外,如果您仔细查看,您会发现存储facebook会话的简单方法。然后,您可以在使用facebook之前检查SessionStore.restore(facebook,此)。授权(如果为true,则用户已登录,如果为false,则授权将提示他们登录)谢谢,这是一个很好的方法,但我的服务器处理facebook授权。在facebook登录之后,我的服务器返回一个会话id,我将这个id和设备id结合起来,用于安全和其他重要内容。