2016-05-30 77 views
1

我試圖讓用戶emailAccessToken,我從Facebook SDK的Android SDK Facebook的問題AcccessToken

  1. 拿到如果我使用Graph API ExplorerAccessToken我能得到idnameemail不要緊,如果我使用瀏覽器或OkHttp

    "https://graph.facebook.com/" + user_id + "?fields=email,name&access_token=" + access_token_from_graph_explorer

我得到這樣的性反應:

{ 
     "email": "[email protected]", 
     "name": "John Doe", 
     "id": "4545" 
} 

如果我用AccessToken.getCurrentAccessToken().getToken()方法採取token,我不JSONObject得到email

  1. 使用Graph Explorer我可以看到我的id。我試圖使請求是這樣的:

"https://graph.facebook.com/me?fields=email,name&access_token="

這:

"https://graph.facebook.com/" + id + "?fields=email,name&access_token="

在第二個變體我已經"Unsupported get request. Object with ID 'xxxxxxxxxxx' does not exist, cannot be loaded due to missing permissions...,而用我的id。當我試圖使用id的另一個user我仍然沒有得到email

Bundle bundle = new Bundle(); 
      bundle.putString("fields", "email,name"); 
      new GraphRequest(
        AccessToken.getCurrentAccessToken(), 
        "me", 
        bundle, 
        HttpMethod.GET, 
        new GraphRequest.Callback() { 
         public void onCompleted(GraphResponse response) { 
          System.out.println("data = " + response.toString()); 
         } 
        } 
      ).executeAsync(); 

有了這個變體,我也沒有完成email

我很困惑。告訴我,我如何檢索用戶電子郵件。

3.After登錄我嘗試:

public void onSuccess(LoginResult loginResult) { 
      System.out.println("succses =" + loginResult.getAccessToken().getToken()); 
      accessToken = loginResult.getAccessToken(); 

      GraphRequest.newMeRequest(accessToken, new GraphRequest.GraphJSONObjectCallback() { 
       @Override 
       public void onCompleted(JSONObject user, GraphResponse graphResponse) { 
        Log.d("TAG", user.optString("email")); 
        Log.d("TAG", user.optString("name")); 
        Log.d("TAG", user.optString("id")); 
        init(); 
       } 
      }).executeAsync(); 
     } 

但我沒有看到TAG與電子郵件 附: graph explorer中的所有權限均已打開。

+0

答案嘗試在計算器這個答案......我面臨同樣的問題... http://stackoverflow.com/a/33412596 –

+0

@ExceptionLover好的,謝謝。這有幫助。 –

+0

PLZ接受我的回答... !! –

回答

2

最高票數的答案對我無效,電子郵件一直是空的。我發現Stackoverflow

LoginManager.getInstance().registerCallback(mCallbackManager, 
      new FacebookCallback<LoginResult>() { 
       @Override 
       public void onSuccess(LoginResult loginResult) { 
        GraphRequest request = GraphRequest.newMeRequest(AccessToken.getCurrentAccessToken(), new GraphRequest.GraphJSONObjectCallback() { 
         @Override 
         public void onCompleted(JSONObject object,GraphResponse response) { 

          JSONObject json = response.getJSONObject(); 
          try { 
           if(json != null){ 
            String text = json.getString("email"); 
            Log.d("email",text); 

           } 

          } catch (JSONException e) { 
           e.printStackTrace(); 
          } 
         } 
        }); 
        Bundle parameters = new Bundle(); 
        parameters.putString("fields", "id,name,link,email,picture"); 
        request.setParameters(parameters); 
        request.executeAsync(); 

       } 

       @Override 
       public void onCancel() { 
        // App code 
       } 

       @Override 
       public void onError(FacebookException exception) { 
        // App code 
       } 
      });