Android Facebook SDK ShareDialog分享图片遇publish_actions权限错误求排查
我尝试使用Facebook SDK发布图片,代码如下:
SharePhoto photo = new SharePhoto.Builder() .setBitmap(bmp) .build(); SharePhotoContent content = new SharePhotoContent.Builder() .addPhoto(photo) .build(); ShareDialog shareDialog = new ShareDialog(getActivity()); shareDialog.show(content, ShareDialog.Mode.AUTOMATIC); shareDialog.registerCallback(((MainActivity) getActivity()).callbackManager, new FacebookCallback<Sharer.Result>() { @Override public void onSuccess(Sharer.Result result) { if (isVisible()) { pbLoading.setVisibility(View.VISIBLE); } } @Override public void onCancel() { } @Override public void onError(FacebookException error) { Toast.makeText(getActivity(), "FB Error", Toast.LENGTH_LONG).show(); } });
但触发了FacebookGraphResponseException,具体错误信息如下:
FacebookGraphResponseException: (#200) Requires extended permission: publish_actions httpResponseCode: 403, facebookErrorCode: 200, facebookErrorType: OAuthException, message: (#200) Requires extended permission: publish_actions
设备已安装最新版Facebook应用,根据官方用户手册,使用ShareDialog无需特殊权限,我也尝试过ShareApi.share(),但结果相同。请问我哪里操作有误?
问题原因与解决方案
别着急,这个问题我之前也踩过坑,咱们一步步来排查:
确认App的权限审核与模式状态
官方文档说ShareDialog不需要publish_actions权限是有前提的:要么你的App处于开发/测试模式且使用的是测试账号,要么你的App已经完成了Facebook的权限审核。如果你的App已经上线,或者用的是非测试账号发布内容,Facebook会强制要求你申请对应权限并通过审核,否则就会抛出这个403错误。检查测试账号配置
如果你还在开发阶段,务必确认你使用的Facebook账号已经被添加到App的测试用户列表中。登录Facebook开发者后台,进入「角色」页面添加测试账号,这样测试账号就能绕过权限审核发布内容了。验证ShareDialog模式与App配置匹配度
你设置了ShareDialog.Mode.AUTOMATIC,这个模式会优先调用原生Facebook App,但原生App的权限校验会更严格。可以先强制用Web模式测试:shareDialog.show(content, ShareDialog.Mode.WEB);如果Web模式能正常工作,那大概率是原生App的权限校验和你的App配置不匹配——这时候要去开发者后台检查「基本信息」里的Bundle ID、密钥哈希(Key Hashes)是否和你当前编译的App完全一致,签名或ID不匹配会直接导致权限校验失败。
确认SDK版本与权限类型适配
旧版本的Facebook SDK可能存在权限校验的bug,建议更新到最新稳定版再测试。另外注意:2018年后创建的App,publish_actions权限已经被pages_manage_posts等细分权限替代,要确认你申请的是当前适用的权限类型,而不是旧的废弃权限。
内容的提问来源于stack exchange,提问作者w201

