[英]Android Facebook GraphRequest Not Returning Email
我查看了有關此問題的幾篇文章,但沒有找到解決方案。
facebookLoginButton = (LoginButton) findViewById(R.id.facebook_login_button);
facebookLoginButton.setReadPermissions(Arrays.asList("read_stream", "user_photos", "email", "user_location"));
// create callback manager for facebook
callbackManager = CallbackManager.Factory.create();
facebookLoginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
Log.d(TAG, "LOGGED IN");
GraphRequest request = GraphRequest.newMeRequest(loginResult.getAccessToken(), new GraphRequest.GraphJSONObjectCallback() {
@Override
public void onCompleted(JSONObject object, GraphResponse response) {
Log.d(TAG, "Facebook graph response: " + response.toString());
try {
// get only the part before the @ symbol
String email_username = object.getString("email").substring(0, object.getString("email").indexOf("@"));
editor = preferences.edit();
editor.putString("username", email_username);
editor.commit();
Log.d(TAG, "logging in user " + preferences.getString("username", "") + " with userID: " + preferences.getString("userID", ""));
SpinLoginTask spinLoginTask = new SpinLoginTask(LoginActivity.this);
spinLoginTask.execute("facebook");
} catch (Exception e) {
e.printStackTrace();
}
}
});
request.executeAsync();
}
我收到以下回應:
Facebook graph response: {Response: responseCode: 200, graphObject: {"name":"Spin Tester","id":"xxxxx"}, error: null}
org.json.JSONException: No value for email
由於我在按鈕上設置了讀取權限以提供所有信息,因此為什么它都不會出現在Graph請求響應中?
試試我一直使用的這段代碼: 編輯
實際上,您需要更改一小部分代碼:
GraphRequest request = GraphRequest.newMeRequest(loginResult.getAccessToken(), new GraphRequest.GraphJSONObjectCallback() {
@Override
public void onCompleted(JSONObject object, GraphResponse response) {
Log.d(TAG, "Facebook graph response: " + response.toString());
try {
// get only the part before the @ symbol
String email_username = object.getString("email").substring(0, object.getString("email").indexOf("@"));
editor = preferences.edit();
editor.putString("username", email_username);
editor.commit();
Log.d(TAG, "logging in user " + preferences.getString("username", "") + " with userID: " + preferences.getString("userID", ""));
SpinLoginTask spinLoginTask = new SpinLoginTask(LoginActivity.this);
spinLoginTask.execute("facebook");
} catch (Exception e) {
e.printStackTrace();
}
}
});
//ADD THIS LINES PLEASE
Bundle parameters = new Bundle();
parameters.putString("fields", "id,name,email");
request.setParameters(parameters);
request.executeAsync();
}
用戶可以選擇在首次登錄時通過Facebook提供的UI拒絕訪問其電子郵件地址。 我將進行檢查以確保電子郵件處於返回的JSON結構中。 如果您需要電子郵件地址,請帶上AlertDialog或其他UI來要求他們提供電子郵件。 確保您有適當的邏輯以防他們拒絕提供電子郵件,因為這總是有可能的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.