我知道這個話題已經有很多問題了,但是我嘗試了很多,但沒有成功地獲取我自己的電子郵件地址。解析Android獲取電子郵件不會返回它
我想知道我是否做了錯誤的事情和/或有一些明顯的解決方案,我面臨的問題。
因此,這裏是我如何通過解析SDK(Android版)獲得身份驗證令牌:
List<String> permissions = Arrays.asList("email", "public_profile");
ParseFacebookUtils.logInWithReadPermissionsInBackground(SignupActivity.this, permissions, new LogInCallback() {
@Override
public void done(ParseUser user, ParseException err) {
if (user == null) {
Log.d("MyApp", "Uh oh. The user cancelled the Facebook login.");
AlertDialog.Builder builder = new AlertDialog.Builder(SignupActivity.this);
builder.setTitle("Fail");
builder.setMessage("Looks like a cancellation");
builder.show();
} else {
makeMeRequest();
}
}
});
在開始的時候,我天真地以爲做一個簡單的ParseUser.getCurrentUser().getEmail()
將有足以讓電子郵件,但它並不是(當你知道Parse屬於Facebook的時候非常有趣)。但之後,我決定直接創建一個Me API請求。它看起來像這樣:
private void makeMeRequest() {
GraphRequest request = GraphRequest.newMeRequest(AccessToken.getCurrentAccessToken(),
new GraphRequest.GraphJSONObjectCallback() {
@Override
public void onCompleted(JSONObject jsonObject, GraphResponse graphResponse) {
if (jsonObject != null) {
JSONObject userProfile = new JSONObject();
Log.d(TAG, jsonObject.toString());
try {
ParseUser currentUser = ParseUser.getCurrentUser();
userProfile.put("facebookId", jsonObject.getLong("id"));
userProfile.put("name", jsonObject.getString("name"));
if (jsonObject.has("gender"))
userProfile.put("gender", jsonObject.getString("gender"));
if (jsonObject.has("email"))
currentUser.setEmail(jsonObject.getString("email"));
// Save the user profile info in a user property
currentUser.put("profile", userProfile);
currentUser.saveInBackground();
AlertDialog.Builder builder = new AlertDialog.Builder(SignupActivity.this);
builder.setTitle("Success");
builder.setMessage("Logged in with Facebook!\nDetails:\n" + currentUser.getEmail());
builder.show();
Log.d("MyApp", "User signed up and logged in through Facebook!");
} catch (JSONException e) {
Log.d(TAG,
"Error parsing returned user data. " + e);
}
} else if (graphResponse.getError() != null) {
switch (graphResponse.getError().getCategory()) {
case LOGIN_RECOVERABLE:
Log.d(TAG,
"Authentication error: " + graphResponse.getError());
break;
case TRANSIENT:
Log.d(TAG,
"Transient error. Try again. " + graphResponse.getError());
break;
case OTHER:
Log.d(TAG,
"Some other error: " + graphResponse.getError());
break;
}
}
}
});
request.executeAsync();
}
正如一些觀察家好可能已經注意到了,那不是我的代碼,它來自另一個線程/ github上/要點(做太多的嘗試,不記得!)。但問題是,它返回我:
{ 「名」: 「洛朗·邁耶」, 「ID」: 「10205968929559630」}
這是相當不錯(聊勝於無)但不是我的電子郵件地址。
問題是:我在代碼上做了一些錯誤,或者問題來自我的Facebook設置(另一個原因可能是我正在使用我的FB應用程序的測試版本)?
我可能會嘗試,但有一個例外,我會確認你的是,在接下來的日子裏。 –