2017-09-25 14 views
1

私のアプリを通じて私のFacebookのメールアドレスを取得するために以下のコードを使用しようとしましたが、戻り値はnullです。AndroidのFacebookからメールを受け取ることができません

public class MainActivity extends AppCompatActivity { 
private CallbackManager callbackManager; 
private Button fb; 
private LoginButton loginButton; 
private AccessToken accessToken; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    callbackManager = CallbackManager.Factory.create(); 

    fb = (Button) findViewById(R.id.fb); 
    loginButton = (LoginButton) findViewById(R.id.login_button); 

    callbackManager = CallbackManager.Factory.create(); 
    LoginManager.getInstance().registerCallback(
      callbackManager, 
      new FacebookCallback <LoginResult>() { 
       @Override 
       public void onSuccess(LoginResult loginResult) { 

        accessToken= loginResult.getAccessToken(); 

        GraphRequestAsyncTask request = GraphRequest.newMeRequest(AccessToken.getCurrentAccessToken(), new GraphRequest.GraphJSONObjectCallback() { 
         @Override 
         public void onCompleted(JSONObject user, GraphResponse response) { 
          final Profile profile = Profile.getCurrentProfile(); 

          if ((user != null) && (profile != null)) { 

           accessToken = AccessToken.getCurrentAccessToken(); 

           if (accessToken.getDeclinedPermissions().isEmpty()) { 


            try { 
             String email = user.get("email").toString(); 
             Log.e("facebook response email",email+"mm"); 
             Log.e("facebook response",user.toString()+"mm"); 
            } catch (JSONException e) { 
             e.printStackTrace(); 
            } 


           } 


          } 
         } 
        }).executeAsync(); 

       } 

       @Override 
       public void onCancel() { 
       } 

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

} 

public void onClick(View v) { 
    if (v == fb) { 
     LoginManager.getInstance().logInWithReadPermissions(
       this, 
       Arrays.asList("email","public_profile") 
     ); 
    } 
} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    callbackManager.onActivityResult(requestCode, resultCode, data); 
    accessToken = AccessToken.getCurrentAccessToken(); 
    if (accessToken != null) { 
     Log.e("Token", "Token: " + accessToken.getToken()); 
     Log.e("UserID", "UserID: " + accessToken.getUserId()); 
    } 
} 

}

私はいくつかのコードを書いたが、結果はNULLですか? Facebook SDKからどのようにメールを受け取ることができますか? 理由はわかりませんが、グラフAPIエクスプローラを使用して電子メールアドレスを取得できます。誰かがこのコードの何が間違っているか知っていますか?

+0

あなたはどのフィールドを指定する必要がありますか – WizKid

+0

Facebookからのトークンと電子メールが必要です。それはすべて@WizKid – BekaKK

+0

です。あなたがFacebookへのリクエストをするときには、あなたが必要なフィールドを指定する必要があります。そうでなければ、Facebookはあなたにそれらを返すことはありません – WizKid

答えて

0

電子メールを取得するには、ユーザーの電子メールアドレスに明示的にsetReadPermissionを設定する必要があります。ですから、loginButtonを初期化した後、コードに次の行を挿入してください。

loginButton.setReadPermissions("email"); 

それ以降の電子メールIDの返信を開始する必要があります。

すべてベスト!

+0

私はそれを試しましたが、まだ動作していません@Abhishek Singh – BekaKK

+0

私は問題がこの行にあると思うlogInWithReadPermissions – BekaKK

+0

@Baggio - LoginButtonを設定する場合、LoginManagerを設定する必要はありません。 LoginButtonには、LoginManagerが組み込まれています。 2つのボタンは必要ありません。 1つのログインボタンは問題ありません。また、コールバックをLoginButtonに登録せずに、別のLoginManagerインスタンスに登録しました。コードを簡略化してください - FBログインボタンだけを使用してください。余分なボタンやLoginManagerインスタンスは必要ありません。 –

関連する問題