簡體   English   中英

無法通過Facebook Android SDK獲取電子郵件地址

[英]Can't get Email address through Facebook Android SDK

我嘗試使用以下代碼通過我的應用獲取我的Facebook電子郵件地址,但返回值為null。

我不知道是什么原因,但是我可以使用Graph API explorer獲取電子郵件地址。 有人知道這段代碼有什么問題嗎?

@Override

public void onCreate(Bundle savedInstanceState) {

// Request email address

GraphRequest.newMeRequest(

   loginResult.getAccessToken(),new GraphRequest.GraphJSONObjectCallback() {

   public void onCompleted(JSONObject me, GraphResponse response) {

      Log.d("TEST", response.toString());
      if (response.getError() != null) {
        // handle error
      } else {
        Log.d("TEST", me.toString());
        String email = me.optString("email");
        String id = me.optString("id");
        Log.d("TEST", "Email:" + email);
     }
  }
}).executeAsync();

LoginButton authButton =(LoginButton) findViewById(R.id.login_button);

List<String> permissions = new ArrayList<>();

permissions.add("public_profile");

permissions.add("email");

authButton.setReadPermissions(permissions);

}

最后,我找到了解決方案,使用newMeRequest方法從用戶對象獲取字段。 在這種情況下,我需要電子郵件作為其他字段,因此在字段參數中添加了“電子郵件”並請求特定的字段:

GraphRequest request = GraphRequest.newMeRequest( 

//...

});

Bundle parameters = new Bundle();

parameters.putString("fields", "id,name,email");

request.setParameters(parameters);

request.executeAsync();

發出請求之前,請設置讀取權限,並通過以下方式進行操作:

 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();
                                } catch (JSONException e) {
                                    e.printStackTrace();
                                }


                            }


                        }
                    }
                }).executeAsync();

您必須在請求之前設置權限。

無論如何, email字段可能會返回null,原因有兩個:

1-用戶在注冊過程中未確認電子郵件地址

2-可以使用電話號碼而不是電子郵件在Facebook中注冊用戶。

文檔說:

請注意,即使您請求電子郵件許可,也不能保證您將獲得一個電子郵件地址。 例如,如果某人使用電話號碼而不是電子郵件地址注冊了Facebook,則電子郵件字段可能為空。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM