在我的應用程序中,我想讓用戶能夠使用他們的Facebook帳戶登錄。經過一番搜索之後,我能夠弄清楚這一點,但我認爲這種方式並不是最好的方法。我在我的用戶界面中使用了一個webview,並使用了一個webviewclient來感知URL切換。據我所知,在Android上,我必須處理我的webviewclient中的所有重定向(Facebook重定向,當用戶設置他/她的電子郵件和密碼時發生多個重定向)。但我需要的是解析我的輸出XML並根據輸出結果做出決定(重定向到我的家庭活動或失敗等)。這是我的代碼,如果存在更合適的方法,請給出您的建議。Android Webview Facebook登錄
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);
}
}
}
另外,如果你看[這裏](https://github.com/facebook/facebook-android-sdk/blob/master/examples/simple/src/ com/facebook/android/SessionStore.java),你會發現一個簡單的方法來存儲Facebook會話。然後你可以在facebook.authorize之前檢查'SessionStore.restore(facebook,this)'(如果它是真的,用戶已經登錄,假授權會提示他們登錄) – IamAlexAlright
謝謝,這是一個好方法,但是我的服務器處理Facebook授權。在facebook登錄後,我的服務器返回一個會話ID,並且我將這個ID和設備ID結合起來用於安全性和其他重要的事情。 – barisatbas