2016-08-29 2 views
0

사용자의 벽에 게시물을 게시하고 싶습니다. Facebook은 테스터와 개발자 만 벽에 게시 할 수 있도록 허용합니다. 이미 테스터 목록에 사용자를 추가했습니다. 게시 권한을 얻으려고하면 사용자가 이미 스크린 샷과 같이 권한을 부여한 다음 반환합니다. 나는 허가 또는 벽에 게시 할 수 없습니다. 게다가 callback의 어떤 메소드도 호출되지 않는다.테스트 사용자 Facebook에서 게시 권한을 얻을 수 없습니다. Android

enter image description here

코드는

나는 페이스 북 예 RPSSample의 코드 따랐다.

//Publish to wall 
public void publishResult() { 

     registerPublishPermissionCallback(); 

     if (canPublish()) { //see definition below 
      ShareLinkContent content = new ShareLinkContent.Builder() 
        .setContentUrl(Uri.parse(urlToPost)) 
        .build(); 

      ShareApi.share(content, new FacebookCallback<Sharer.Result>() { 
       @Override 
       public void onSuccess(Sharer.Result result) { 
        callback.didShareOnFacebookSuccessfully(); 
       } 

       @Override 
       public void onCancel() { 
        // This should not happen 
       } 

       @Override 
       public void onError(FacebookException error) { 
        showToast(error.getMessage()); 
       } 
      }); 
     } 
    } 

//check if user has permission or not 
private boolean canPublish() { 
     final AccessToken accessToken = AccessToken.getCurrentAccessToken(); 
     if (accessToken != null) { 
      if (accessToken.getPermissions().contains(AppConstants.ADDITIONAL_PERMISSIONS)) { 
       // if we already have publish permissions, then go ahead and publish 
       return true; 
      } else { 
       // otherwise we ask the user if they'd like to publish to facebook 
       new AlertDialog.Builder(activity) 
         .setTitle(R.string.share_with_friends_title) 
         .setMessage(urlToPost) 
         .setPositiveButton(R.string.share_with_friends_yes, canPublishClickListener) 
         .setNegativeButton(R.string.share_with_friends_no, dontPublishClickListener) 
         .show(); 
       return false; 
      } 
     } 
     return false; 
    } 

//If user allows, ask Facebook to grant publish_action permission 
    private DialogInterface.OnClickListener canPublishClickListener = new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialogInterface, int i) { 
      if (AccessToken.getCurrentAccessToken() != null) { 
       // if they choose to publish, then we request for publish permissions 

       LoginManager.getInstance() 
         .setDefaultAudience(DefaultAudience.FRIENDS) 
         .logInWithPublishPermissions(activity, 
           Arrays.asList(AppConstants.ADDITIONAL_PERMISSIONS)); 
      } 
     } 
    }; 

//Callback - Any of the method doesn't call. 
private void registerPublishPermissionCallback() { 
     LoginManager.getInstance().registerCallback(
       callbackManager, 
       new FacebookCallback<LoginResult>() { 
        @Override 
        public void onSuccess(LoginResult loginResult) { 
         AccessToken accessToken = AccessToken.getCurrentAccessToken(); 
         if (accessToken.getPermissions().contains(AppConstants.ADDITIONAL_PERMISSIONS)) { 
          publishResult(); 
         } else { 
          handleError("Not enough permissions to publish"); 
         } 
        } 

        @Override 
        public void onCancel() { 
        } 

        @Override 
        public void onError(FacebookException exception) { 
         handleError(exception.getMessage()); 
        } 

        private void handleError(String errorMessage) { 
         // this means the user did not grant us write permissions, so 
         // we don't do implicit publishes 
         showToast(errorMessage); 
        } 
       } 
     ); 
    } 

내 앱이 콘솔에 있습니다. 테스트 사용자에게 게시 권한을 부여하려면 Facebook의 요구 사항을 안내하십시오. 감사.

+0

facebook에서 앱을 삭제하고 다시 시도하면 정상적으로 작동합니다. [페이스 북에서 앱을 삭제하는 법] (https://www.facebook.com/help/170585223002660). 다시 설치 한 후에는 공유 한 화면 대신 게시 권한을 요청해야합니다. –

+0

죄송하지만 앱을 삭제하는 것은 해결책이 아닙니다. – NightFury

답변

0

마침내 문제를 해결할 수 있습니다. 코드에는 아무런 문제가 없었습니다. Facebook 앱과 관련된 몇 가지 설정/권한 문제였습니다.

  1. 가 페이스 북의 개발자 콘솔에 테스트 역할 섹션에서 사용자를 제거 :이 내가 다음 단계입니다.
  2. 해당 사용자의 계정에 로그인하여 앱의 액세스 권한을 취소합니다. 설정> 앱으로 이동하십시오. 거기에서 앱을 제거하십시오. 페이스 북 측에서 완전히 액세스를 취소하려면 시간이 필요하기 때문에 10-15 분을 기다려야합니다.
  3. 게시 테스트를 수행하려면 샌드 박스 모드에서 Facebook 앱을 만드십시오.
  4. 앱 관리자가 아닌 다른 Facebook 계정을 사용하여 Android 앱에 로그인하십시오. 앱이 개발 모드에 있다는 오류를 던져야합니다.
  5. Facebook 콘솔 앱에서 테스터로 사용자 추가 해당 사용자는 대기중인 요청을 승인해야 할 수 있습니다.
  6. 해당 사용자의 계좌에서 로그인하십시오. Facebook은 이제 앱에 대한 기본 정보 액세스 권한을 제공하도록 요청할 것입니다. 그 후에 게시를 테스트 할 수 있습니다. 사용자의 벽에 성공적으로 게시 할 수 있습니다.

희망이 있으면 도움이 될 것입니다.

0

아래 코드를 사용하여 권한이 부여되었는지 여부를 확인하십시오.

String url = "/" + "(userFbID)" + "/permissions"; 
    new GraphRequest(AccessToken.getCurrentAccessToken(), url, null, 
         HttpMethod.GET, new GraphRequest.Callback() { 

          public void onCompleted(GraphResponse response) { 



           try { 

            JSONObject json = new JSONObject(
              response.getRawResponse()); 

            JSONArray data = json.getJSONArray("data"); 

            boolean isPermitted = false; 

            for (int i = 0; i < data.length(); i++) { 

             if (data.getJSONObject(i) 
               .getString("permission") 
               .equals("publish_actions")) { 
              isPermitted = true; 

              String status = data.getJSONObject(i) 
                .getString("status"); 

              if (status.equals("granted")) { 

               publishResult() 

              } else { 

               LoginFacebook(); 
              } 

              break; 
             } 
            } 

            if (!isPermitted) { 
             LoginFacebook(); 
            } 

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

         }).executeAsync(); 

(userFbID) 대신 사용자의 fb id를 바꿉니다.

권한이 부여되지 않은 경우이 기능을 사용하여 사용자에게 해당 권한을 요청하십시오.

private void LoginFacebook() { 

      loginManager = LoginManager.getInstance(); 

      loginManager.logInWithPublishPermissions(this, 
        Arrays.asList("publish_actions")); 

      loginManager.registerCallback(callbackManager, 
        new FacebookCallback<LoginResult>() { 

         @Override 
         public void onSuccess(LoginResult loginResult) { 



          publishResult() 
         } 

         @Override 
         public void onError(FacebookException error) { 

         } 

         @Override 
         public void onCancel() { 

         } 

        }); 
     } 
관련 문제