2014-05-14 152 views
2

致力於Facebook。無法獲得publish_actions權限。使用此代碼:權限facebook sdk Android

session.requestNewPublishPermissions(new 
Session.NewPermissionsRequest(this, PERMISSION)); 

任何解決方案...

+0

當談到Facebook和Android平臺來說,是一個開放源碼庫,可以簡化你的一切 - https://github.com/sromku/android-simple-facebook –

+0

我的工作,這些樣本之一HelloFacebook 我剛更改了軟件包名稱和類名,並給它一個運行。 它適用於安裝fb應用的設備,在其他設備上無法獲得publish_actions權限 – user3584264

+0

我遵循https://developers.facebook.com/docs/android/share示例發佈到用戶牆。如果我使用應用程序開發人員電子郵件登錄Facebook,它工作正常與非開發人員,我沒有得到許可...你有沒有找到任何問題的答案? –

回答

0
private static final List<String> PERMISSIONS = Arrays.asList("publish_actions"); 
private boolean pendingPublishReauthorization = false; 

onActivityResult做到這一點

Session session = Session.getActiveSession(); 

    if (session != null) { 

     // Check for publish permissions 
     List<String> permissions = session.getPermissions(); 
     if (!isSubsetOf(PERMISSIONS, permissions)) { 
      pendingPublishReauthorization = true; 
      Session.NewPermissionsRequest newPermsnRequest = new Session.NewPermissionsRequest(
        this, PERMISSIONS); 
      session.requestNewPublishPermissions(newPermsnRequest); 
      return; 
     } 
    } 

在你的類也實現了這一點。

private boolean isSubsetOf(Collection<String> a, 
     Collection<String> b) { 
    for (String string : a) { 
     if (!b.contains(string)) { 
      return false; 
     } 
    } 
    return true; 
} 

通過這樣做,您將能夠獲得所有公共權限。您必須在獲取讀取權限後打開會話,然後僅請求發佈權限。

+0

不工作..循環播放 – user3584264

0

Facebook sdk只返回讀取權限,但不返回寫入權限。您可以使用「/ me」端點來獲取所有權限。

final Bundle permBundle = new Bundle(); 
    permBundle.putCharSequence("permission", "publish_actions"); 
    GraphRequest request = new GraphRequest(
      AccessToken.getCurrentAccessToken(), 
      "/me/permissions", permBundle, HttpMethod.GET, 
      new GraphRequest.Callback() { 
       @Override 
       public void onCompleted(GraphResponse graphResponse) { 
        Log.d(TAG, "response2: " + graphResponse.getJSONObject()); 
        try { 
         JSONArray permList = (JSONArray) graphResponse.getJSONObject().get("data"); 
         if(permList.length() == 0){ 
          // no data for perms, hence asking permission 
          askForFBPublishPerm(); 
         }else{ 
          JSONObject permData = (JSONObject) permList.get(0); 
          String permVal = (String) permData.get("status"); 
          if(permVal.equals("granted")){ 
           postToFB(); 
          }else{ 
           askForFBPublishPerm(); 
          } 
         } 
        } catch (JSONException e) { 
         Log.d(TAG, "exception while parsing fb check perm data" + e.toString()); 
        } 

       } 
      } 
    ); 
    request.executeAsync();