2015-08-23 57 views
0

我知道這個話題已經有很多問題了,但是我嘗試了很多,但沒有成功地獲取我自己的電子郵件地址。解析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應用程序的測試版本)?

回答

1

默認情況下,GraphRequest.newMeRequest返回默認字段idname。要獲得其他領域,你需要指定呼叫之前,必要的字段來request.executeAsync()

Bundle params = new Bundle(); 
params.putString("fields", "name,id,email"); 
request.setParameters(params); 
+0

我可能會嘗試,但有一個例外,我會確認你的是,在接下來的日子裏。 –