2016-07-22 28 views
0

我看了幾個關於這個問題的帖子,並沒有找到解決方案。Android Facebook的GraphRequest不退回電子郵件

 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 

由於我設置按鈕讀取權限提供的所有信息,爲什麼沒有它在圖形請求響應出現的?

+0

你授予的權限? – Eenvincible

回答

3

試試這個代碼我一直使用:編輯

其實,你需要改變你的代碼的一小部分:

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(); 
} 
+0

謝謝!這對我工作 – scientiffic

+0

我很高興它爲你工作! – Eenvincible

0

用戶可以通過Facebook提供的用戶界面首次登錄時拒絕訪問他們的電子郵件地址。我會做一次檢查以確保電子郵件處於返回的JSON結構中。如果您需要電子郵件地址,請帶上AlertDialog或其他用戶界面以請求他們發送電子郵件。確保你有邏輯,以防他們拒絕提供電子郵件,因爲這也是一種可能。