私のアプリでは、ユーザーが自分のFacebookアカウントでログインできるようにしたいと考えています。いくつかの検索の後、私はこの方法が最良の方法だとは思わないが、これを理解することができる。私は自分のUIでwebviewを使い、URL切り替えを検知するwebviewclientを使いました。私が理解しているように、Androidでは、私は自分のwebviewclientのリダイレクトをすべて処理する必要があります(Facebookのリダイレクト、ユーザーが自分のメールアドレスとパスワードを設定するといくつかのリダイレクトが発生します)。しかし、私が必要とするのは、私の出力xmlを解析し、出力結果(私の家の活動や失敗などにリダイレクト)に応じて決定することです。ここに私のコードは、より適切な方法が存在する場合は、あなたの提案を与えてください。Android Webview Facebook Login
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)'をチェックすることができます。もしfalseであればログインが促されます) – IamAlexAlright
ありがとう、これは良い方法ですが、私のサーバーはFacebookの承認を処理します。 Facebookのログイン後、私のサーバーはセッションIDを返し、私はこのIDとデバイスIDをセキュリティと他の重要なもののために組み合わせて使用しました。 – barisatbas