2017-05-16 9 views
0

나는이 질문에 답을 얻었으나 한 가지 대답이 거의 없거나 대답조차되지 않는다는 것을 알고 있습니다.Facebook API가 이메일을 반환하지 않습니다.

이해가 부족하거나 Facebook 문서가 부족한 지 알 수 없지만, 지금까지는이 코드를 통해 사용자 이메일을 검색했습니다.

callbackManager = CallbackManager.Factory.create(); 
    mFbLoginManager.registerCallback(
      callbackManager, 
      new FacebookCallback <LoginResult>() { 
       @Override 
       public void onSuccess(final LoginResult loginResult) { 
        // Handle success 
        Log.i(TAG, "callBack Login Result: LoginManager success - " + loginResult.toString()); 
        GraphRequest.newMeRequest(loginResult.getAccessToken(), new GraphRequest.GraphJSONObjectCallback() { 
         @Override 
         public void onCompleted(JSONObject userObject, GraphResponse response) { 
          if (response.getError() == null) { 
           try { 
            AccessToken token = AccessToken.getCurrentAccessToken(); 
            Log.e(TAG, token.getToken()); 
            Log.e(TAG, userObject.toString()); 
            email = userObject.getString("email"); 
           } catch (JSONException ex) { 
            Log.e(TAG, "Not such permissions for email!"); 
            ex.printStackTrace(); 
           } 
           Log.d(TAG, "Email fetched: " + email); 
          }else{ 
           Log.e(TAG, "Something went wrong with fetching email with GraphRequest"); 
          } 
         } 
        }).executeAsync(); 
       } 

JSON 문자열은 이름과 ID 만 반환하므로 내 이메일 변수가 비어 있습니다.

제가 골치를 앓고있는 부분은 그래프 탐색기에서 테스트 할 때 또는 link으로 테스트 할 때 이메일을받는 것입니다.

나는 또한 자체 권한 개발자 사이트 대시 보드도 내 코드가 (즉, 온 클릭() 안에 때 사용자를 눌러 페이스 북의 로그인 버튼) : mFbLoginManager.logInWithReadPermissions(LoginActivity.this, Arrays.asList("user_photos", "email", "public_profile")

그래서 내가 문제가있는 것을 확실하지 않다 내 암호. 로그인 버튼은 페이스 북 LoginButton이 아닌 사용자 정의이며, 중요하다면 잘 모릅니다.

모든 도움을 환영

+0

체크 인이 밖으로 http://stackoverflow.com/a/32776987/2556660 [페이스 북 JS SDK의 FB.api ('나 /') 메소드의 – RameshJaga

+0

가능한 중복은 '아무튼 t 그래프 API에서 기대하는 필드를 반환합니다 v2.4 +] (http://stackoverflow.com/questions/32584850/facebook-js-sdks-fb-api-me-method-doesnt-return-the-fields-i -expect-in-gra) - 원하는 필드에 대해 _ask_ 무시했는데 API v2.4 이후로 필요합니다. – CBroe

답변

2
compile 'com.facebook.android:facebook-android-sdk:4.11.0' 



FacebookSdk.sdkInitialize(this); 
     callbackManager = CallbackManager.Factory.create(); 

oncreate 
-----------------------\ 

LoginManager.getInstance().logInWithReadPermissions(UserActivity.this, Arrays.asList("public_profile", "user_friends", "email")); 
       facebookTime(); 

onclicklisterner 

---------------/ 

callbackManager.onActivityResult(requestCode, resultCode, data); 

onactivityresult 

-------------/ 

public void facebookTime() { 

     LoginManager.getInstance().registerCallback(callbackManager, 
       new FacebookCallback<LoginResult>() { 
        @Override 
        public void onSuccess(LoginResult loginResult) { 
         System.out.println("Success"); 
         GraphRequest request = GraphRequest.newMeRequest(
           loginResult.getAccessToken(), new GraphRequest.GraphJSONObjectCallback() { 

            @Override 
            public void onCompleted(JSONObject object, GraphResponse response) { 

             // Util.showCenteredToast(getActivity(), "object" + object); 
             //  Util.showCenteredToast(getActivity(), "GraphResponse" + response); 

             try { 
              strEmail = object.getString("email"); 
              strUserName = object.getString("name"); 
              String id = object.getString("id"); 

              // write your code here 


              //asyncTask.iSocialMediaResponse = LoginFragment.this; 
              asyncTask.execute(); 


             } catch (JSONException e) { 
              e.printStackTrace(); 
             } 


            } 
           }); 
         Bundle parameters = new Bundle(); 
         parameters.putString("fields", "email,name"); 
         //parameters.putString("fields", "user_friends"); 
         request.setParameters(parameters); 
         //Log.e(" About to Graph Call", " "); 
         request.executeAsync(); 

        } 


        @Override 
        public void onCancel() { 
         // App code 
         Util.showCenteredToast(UserActivity.this, "oncancel"); 
        } 

        @Override 
        public void onError(FacebookException exception) { 
         // App code 
         Util.showCenteredToast(UserActivity.this, "exception" + exception); 


        } 
       }); 
    } 




@Override 
    public void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 

      callbackManager.onActivityResult(requestCode, resultCode, data); 

     } 
} 
+0

스 니펫에 문제가있는 부분은 실제로 이메일을 저장하는 방법입니다. 또한 비동기 작업이 완료된 후 데이터를 가져와야합니다. –

관련 문제