2015-11-04 210 views
0

我正在使用Facebook registerCallBack方法獲取當前用戶信息。我遇到的問題是在嘗試檢索電子郵件地址時。Facebook Android登錄獲取用戶電子郵件地址

// Callback registration 
    FBLogin.registerCallback(callbackManager, new FacebookCallback<LoginResult>() { 
     @Override 
     public void onSuccess(LoginResult loginResult) { 
      final Profile profile = Profile.getCurrentProfile(); 
      if (profile != null) { 

      } 
      //Toast.makeText(FacebookLogin.this,"Wait...",Toast.LENGTH_SHORT).show(); 
      GraphRequest request = GraphRequest.newMeRequest(AccessToken.getCurrentAccessToken(), 
        new GraphRequest.GraphJSONObjectCallback() { 
         @Override 
         public void onCompleted(JSONObject object, GraphResponse response) { 
          try { 
           String email_id = object.getString("email"); 
           String gender = object.getString("gender"); 
           String facebook_id=profile.getId(); 
           String f_name=profile.getFirstName(); 
           String m_name=profile.getMiddleName(); 
           String l_name=profile.getLastName(); 
           String full_name=profile.getName(); 
           String profile_image=profile.getProfilePictureUri(400, 400).toString(); 

           Log.i("facebook_id",facebook_id); 
           Log.i("f_name",f_name); 
           Log.i("m_name",m_name); 
           Log.i("l_name",l_name); 
           Log.i("full_name",full_name); 
           Log.i("profile_image",profile_image); 
           Log.i("gender",gender); 
           Log.i("email_id",email_id+""); 

           } catch (JSONException e) { 
           // TODO Auto-generated catch block 
            e.printStackTrace(); 
          } 

         } 

        }); 

      Bundle parameters = new Bundle(); 
      parameters.putString("fields", "id,name,email,gender, birthday, friends,albums"); 
      request.setParameters(parameters); 
      request.executeAsync(); 
     } 

     @Override 
     public void onCancel() { 
      // App code 
     } 

     @Override 
     public void onError(FacebookException exception) { 
      // App code 
     } 
    }); 

使用此代碼我碰到下面的日誌:

org.json.JSONException: No value for email 

我已經確定該電子郵件是公開的,這是一個問題,因爲我曾與谷歌加登錄類似的問題的情況下腳本。

+0

您需要詢問電子郵件字段 – WizKid

+0

@wizkid我在參數中指定電子郵件地址是 – jampez77

+1

哦,您是否要求用戶提供電子郵件許可? – WizKid

回答

1

此基礎上我的意見,當你得到型動物領域:

parameters.putString("fields", "id, name, email, gender, birthday, friends, albums"); 

你肯定忘了正確的權限。事實上,你可能設置"user_profile"如下:

loginButton.setReadPermissions("user_profile"); 

但是,當你看the reference documentation,你可以看到,"email"是在自己的權限,它不包括在"user_profile"

因此,當您啓動LoginManager(參見Add LoginButton section)時,您必須設置不同的權限,包括"email"。相反,只得到一個權限,您可以設置一個數組:

loginButton = (LoginButton) view.findViewById(R.id.login_button); 
loginButton.setReadPermissions(Arrays.asList("user_profile", "email", "...", "...")); 

多虧了這一點,你就可以檢索電子郵件地址。

相關問題