[英]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.