2014-05-14 153 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();