2016-08-29 59 views
0

我想將帖子發佈到用戶的牆上。我知道Facebook只允許測試人員和開發人員在牆上發帖。我已經將用戶添加到測試儀列表中。當我嘗試獲得發佈權限時,它表示用戶已經授予權限(如屏幕截圖所示)並返回。我無法獲得許可或張貼在牆上。而且,回調的任何方法都不會被調用。無法獲得測試用戶Facebook的發佈權限Android

enter image description here

CODE

我按照代碼從Facebook例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上刪除你的應用程序,然後重試,它會起作用。 [如何從Facebook中刪除應用程序](https://www.facebook.com/help/170585223002660)。重新安裝後,它應該請求發佈權限,而不是您已共享的屏幕。 –

+0

抱歉,刪除應用程序不是解決方案 – NightFury

回答

0

終於能解決問題了。代碼中沒有問題。這是Facebook應用程序的一些設置/權限問題。這些都是我的步驟如下:

  1. 您的Facebook開發者控制檯中刪除從測試角色部分用戶。
  2. 通過登錄該用戶的帳戶來吊銷應用的訪問權限。前往設置> Apps。從那裏刪除應用程序。您需要等待10-15分鐘,因爲從Facebook方面完全撤銷訪問需要時間。
  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() { 

         } 

        }); 
     } 
相關問題