Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android/Facebook:使用Api时权限不足_Android_Facebook_Facebook Sdk 4.0 - Fatal编程技术网

Android/Facebook:使用Api时权限不足

Android/Facebook:使用Api时权限不足,android,facebook,facebook-sdk-4.0,Android,Facebook,Facebook Sdk 4.0,在我的主要活动中,我有以下代码: FacebookSdk.sdkInitialize(getApplicationContext()); 我还添加了一个按钮,在我的Facebook时间线上创建帖子: Button b1 = (Button) findViewById(R.id.button1); b1.setOnClickListener(new OnClickListener() { @Override public

在我的主要活动中,我有以下代码:

    FacebookSdk.sdkInitialize(getApplicationContext());
我还添加了一个按钮,在我的Facebook时间线上创建帖子:

Button b1 = (Button) findViewById(R.id.button1);
        b1.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {
                ShareLinkContent content = new ShareLinkContent.Builder()
                .setContentUrl(Uri.parse("https://developers.facebook.com"))
                .build();

                ShareApi.share(content, new FacebookCallback<Sharer.Result>() {

                    @Override
                    public void onSuccess(Result arg0) {
                        // TODO Auto-generated method stub

                    }

                    @Override
                    public void onError(FacebookException arg0) {
                        // TODO Auto-generated method stub

                    }

                    @Override
                    public void onCancel() {
                        // TODO Auto-generated method stub

                    }
                });


            }
按钮b1=(按钮)findViewById(R.id.button1);
b1.setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图arg0){
ShareLinkContent=新的ShareLinkContent.Builder()
.setContentUrl(Uri.parse(“https://developers.facebook.com"))
.build();
ShareApi.share(内容,新FacebookCallback(){
@凌驾
成功时公共无效(结果arg0){
//TODO自动生成的方法存根
}
@凌驾
public void onError(facebook异常arg0){
//TODO自动生成的方法存根
}
@凌驾
公开作废{
//TODO自动生成的方法存根
}
});
}
当我在智能手机上运行应用程序并单击按钮时,总会收到以下消息(OneError callback):

权限不足,无法通过Api共享内容

我已经在清单文件中配置了com.facebook.app.FacebookContentProvider、com.facebook.sdk.ApplicationId、com.facebook.FacebookActivity。并且已经在facebook上注册了我的应用程序


缺少什么?我应该在我的应用程序上添加facebook登录按钮吗?

我发现当AccessToken.getCurrentAccessToken()返回null时会发生此错误。因此,我必须在使用ShareAPI之前明确向facebook进行身份验证

我在Facebook的源代码中看到了它,网址是:

/**
*分享内容。
*
*@param callback共享完成后要调用的回调。
*/
公开作废共享(FacebookCallback){
如果(!this.canShare()){
ShareInternalUtility.InvokeCallbackRor(
回调,“通过Api共享内容的权限不足。”);
返回;
}
final ShareContent ShareContent=this.getShareContent();
//验证共享内容
试一试{
ShareContentValidation.ValidateFapiShare(shareContent);
}捕获(FacebookException ex){
invokeCallbackWithException(回调,ex);
返回;
}
if(shareContent实例的ShareLinkContent){
this.shareLinkContent((shareLinkContent)shareContent,回调);
}else if(SharePhotoContent的shareContent实例){
this.sharePhotoContent((sharePhotoContent)shareContent,回调);
}else if(shareContent的ShareVideoContent实例){
这个.shareVideoContent((shareVideoContent)shareContent,回调);
}else if(ShareOpenGraphContent的shareContent实例){
this.shareOpenGraphContent((shareOpenGraphContent)shareContent,回调);
}
}
/**
*如果当前访问令牌具有发布操作权限,则返回true。
*
*@如果当前访问令牌具有发布操作权限,则返回true,否则返回false。
*/
公共布尔值canShare(){
if(this.getShareContent()==null){
返回false;
}
最终AccessToken AccessToken=AccessToken.getCurrentAccessToken();
if(accessToken==null){
返回false;
}
最终设置权限=accessToken.getPermissions();
if(权限==null){
返回false;
}
返回(permissions.contains(“publish_actions”);
}

谢谢你,伙计,那么你能分享你对这个案例的解决方案吗?@PhanDinhThai,这是我遵循的完整解决方案:@PhanDinhThai,也请查看以下链接:
/**
     * Share the content.
     *
     * @param callback the callback to call once the share is complete.
     */
    public void share(FacebookCallback<Sharer.Result> callback) {
        if (!this.canShare()) {
            ShareInternalUtility.invokeCallbackWithError(
                    callback, "Insufficient permissions for sharing content via Api.");
            return;
        }
        final ShareContent shareContent = this.getShareContent();

        // Validate the share content
        try {
            ShareContentValidation.validateForApiShare(shareContent);
        } catch (FacebookException ex) {
            ShareInternalUtility.invokeCallbackWithException(callback, ex);
            return;
        }

        if (shareContent instanceof ShareLinkContent) {
            this.shareLinkContent((ShareLinkContent) shareContent, callback);
        } else if (shareContent instanceof SharePhotoContent) {
            this.sharePhotoContent((SharePhotoContent) shareContent, callback);
        } else if (shareContent instanceof ShareVideoContent) {
            this.shareVideoContent((ShareVideoContent) shareContent, callback);
        } else if (shareContent instanceof ShareOpenGraphContent) {
            this.shareOpenGraphContent((ShareOpenGraphContent) shareContent, callback);
        }

    }

/**
     * Returns true if the current access token has the publish_actions permission.
     *
     * @return true if the current access token has the publish_actions permission, false otherwise.
     */
    public boolean canShare() {
        if (this.getShareContent() == null) {
            return false;
        }
        final AccessToken accessToken = AccessToken.getCurrentAccessToken();
        if (accessToken == null) {
            return false;
        }
        final Set<String> permissions = accessToken.getPermissions();
        if (permissions == null) {
            return false;
        }
        return (permissions.contains("publish_actions"));
    }