[英]Login with facebook sdk 3.5 and get email - android
我是android開發的新手,也是SO的新手。 我的問題是:我有一個實現Facebook登錄的按鈕(不是facebook LogginButton)。 登錄后,我還需要獲取用戶的電子郵件。 但是我實現的方式卻發現有時它無法檢索用戶的郵件。 如果是我第一次使用該應用程序,則必須多次單擊(至少兩次)我的應用程序的登錄按鈕,這樣它才最終給我帶來了電子郵件,而在我第一次收到該電子郵件后,它將始終帶給我下次我單擊登錄按鈕的電子郵件。 但是,如果我繼續使用fb帳戶並刪除該應用程序,則問題會再次出現。 我認為我在設置權限或管理會話時遇到了問題。 我要在下面發布我的代碼:
public void onClickLoginFacebook(View view) {
Session.StatusCallback statusCallBack = new Session.StatusCallback() {
// callback when session changes state
@Override
public void call(Session session, SessionState state, Exception exception) {
if (session.isOpened()) {
// make request to the /me API
Request request = Request.newMeRequest(session, new Request.GraphUserCallback() {
// callback after Graph API response with user object
@Override
public void onCompleted(GraphUser user, Response response) {
if (user != null) {
if (user.asMap().get("email")!=null){
userFacebook.setEmail(user.asMap().get("email").toString());
}
}else{
Toast.makeText(getApplicationContext(), "Error on facebook login: " + response.getError().getErrorMessage(), Toast.LENGTH_LONG).show();
}
}
});
}else if(session.isClosed()){
Toast.makeText(getApplicationContext(), "Error on facebook login", Toast.LENGTH_LONG).show();
}
}
};
if( isOnline() )
{
Session session = Session.getActiveSession();
if(session == null){
session = new Session.Builder(this).setApplicationId(
this.getString(R.string.app_id)).build();
Session.setActiveSession(session);
}
if (!session.isOpened() && !session.isClosed()) {
session.openForRead(new Session.OpenRequest(this)
.setPermissions(Arrays.asList("email"))
.setCallback(statusCallBack));
} else {
Session.openActiveSession(LoginActivity.this, true, statusCallBack);
}
}
else
{
Toast.makeText(getApplicationContext(), R.string.error_message, Toast.LENGTH_LONG).show();
}
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data);
}
誰能幫我嗎? PS .:對不起,我的英語不好= /
在調用Session.openActiveSession()
之前,請執行以下操作以獲得權限:
List<String> permissions = new ArrayList<String>();
permissions.add("email");
Session.openActiveSession()
的最后一個參數應該是權限。 現在,您可以訪問user.getProperty("email").toString()
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.