2016-06-21 2 views
1

UI/버튼을 사용하지 않고 Facebook의 Android SDK를 사용하여 Facebook 앱에 대한 게시 권한을 요청하는 방법은 무엇입니까? 현재이 코드를 사용하고 있지만 콜백을 두 번 등록하면 중복 결과가 표시됩니다. 게시 권한을 요청하는 올바른 방법은 무엇입니까?Facebook의 Android SDK를 사용하여 게시 권한을 요청하는 방법은 무엇입니까?

List<String> basicPermissions = Arrays.asList("user_friends", "user_games_activity"); 
    List<String> publishPermissions = Arrays.asList("publish_actions"); 

    mCallbackManager = CallbackManager.Factory.create(); 
    LoginManager.getInstance().logInWithReadPermissions(this, basicPermissions); 
    LoginManager.getInstance().logInWithPublishPermissions(this, publishPermissions); 

    LoginManager.getInstance().registerCallback(mCallbackManager, 
      new FacebookCallback<LoginResult>() { 
       @Override 
       public void onSuccess(LoginResult loginResults) { 

        new GraphRequest(
          AccessToken.getCurrentAccessToken(), 
          "/{my-app-id}/scores", 
          null, 
          HttpMethod.GET, 
          new GraphRequest.Callback() { 
           public void onCompleted(GraphResponse response) { 
            // my code 
           } 
          } 
        ).executeAsync(); 

       } 

       @Override 
       public void onCancel() { 

        Log.e("dd","facebook login canceled"); 

       } 

       @Override 
       public void onError(FacebookException e) { 



        Log.e("dd", "facebook login failed error"); 

       } 
      }); 

답변

0

FB에 따르면 사용자가 읽기 권한 요청으로부터 성공적으로 반환 할 때까지 게시 권한을 요청해서는 안됩니다. 그래서 당신과 같이 뭔가를 변경해야 할 것 :

private boolean publishPermissionsRequested = false; 
private LoginResult readResultSuccess; 

private void loginWithFacebook(){ 
    LoginManager.getInstance().registerCallback(mCallbackManager, 
     new FacebookCallback<LoginResult>() { 
      @Override 
      public void onSuccess(LoginResult loginResults) { 
       if(!publishPermissionsRequested){ 
        publishPermissionsRequested = true; 
        readResultSuccess = loginResults; 

        LoginManager.getInstance() 
          .logInWithPublishPermissions(this, publishPermissions); 

        return; 
       } 

       onFacebookLoginSuccessful(loginResults); 
      } 

      @Override 
      public void onCancel() { 
       if(publishPermissionsRequested && readResultSuccess != null) 
        onFacebookLoginSuccessful(readResultSuccess); 
      } 

      @Override 
      public void onError(FacebookException e) { { 
       if(publishPermissionsRequested && readResultSuccess != null) 
        onFacebookLoginSuccessful(readResultSuccess); 
      } 
     }); 

    LoginManager.getInstance() 
      .logInWithReadPermissions(this, basicPermissions); 
} 

private void onFacebookLoginSuccessful(LoginResult loginResults){ 
    new GraphRequest(
      AccessToken.getCurrentAccessToken(), 
      "/{my-app-id}/scores", 
      null, 
      HttpMethod.GET, 
      new GraphRequest.Callback() { 
       public void onCompleted(GraphResponse response) { 
         // Your code 
       } 
      } 
    ).executeAsync(); 
} 

여전히 권한 요청을 게시 그들이 읽기 권한을 허용하지만 거부 할 경우 성공으로 계속 (또는에서 실패 할) 것이 방법을.

바라건대 올바른 방향으로 안내해 주셨으면합니다.

관련 문제