未安装facebook客户端分享图片问题记录

最近做facebook(分享sdk版本为4.34.0)分享图片,根据在 Android 平台分享可知,分享图片需要安装7.0以上客户端。(经测试,在不安装facebook客户端时,分享链可以)。

原文地址

1: 之前的分享方式

facebook分享demo中的代码:

 private void postPhoto() {
        Bitmap image = BitmapFactory.decodeResource(this.getResources(), R.drawable.icon);
        SharePhoto sharePhoto = new SharePhoto.Builder().setBitmap(image).build();
        ArrayList<SharePhoto> photos = new ArrayList<>();
        photos.add(sharePhoto);

        SharePhotoContent sharePhotoContent =
                new SharePhotoContent.Builder().setPhotos(photos).build();
         /**步骤1  可以分享,使用ShareDialog分享   */
        if (ShareDialog.canShow(SharePhotoContent.class)) {
            shareDialog.show(sharePhotoContent);
         // 步骤2  如果已经登录且有publish_actions权限,使用ShareApi分享
        } else if (hasPublishPermission()) {
            ShareApi.share(sharePhotoContent, shareCallback);
         //步骤3  登录并分享
        } else {
            pendingAction = PendingAction.POST_PHOTO;
            // We need to get new permissions, then complete the action when we get called back.
            LoginManager.getInstance().logInWithPublishPermissions(            
                    this,
                    Arrays.asList("publish_actions"));
        }
}

其中**hasPublishPermission()**函数如下:


 private boolean hasPublishPermission() {
        return AccessToken.isCurrentAccessTokenActive()
                && AccessToken.getCurrentAccessToken()
                .getPermissions().contains("publish_actions");
    }

但是publish_actions 权限已移除。已获准使用 publish_actions 的应用可以继续使用此权限,直至 2018 年 8 月 1 日。如果您想方便您的应用用户在此日期后与 Facebook 和 Instagram 分享内容,建议您使用我们的共享产品。
参考:facebook重大变更

2: 那么4.34.0版本在没有安装客户端的情况下如何分享图片?

根据上面分析以前分享的方式中的步骤2步骤3方式目前已经无效了。
因此现在的方案为(代码如下):先判断能否分享,若不能则登录后直接分享。(经测试,未安装客户端时通过webview登录后可以分享图片)

登录代码参考:Android 版 Facebook 登录 — 快速入门

      // canShow 判断分享类型&&是否为已登录,下文给分析
     if (ShareDialog.canShow(SharePhotoContent.class)) {
           // 分享图片
            sharePhoto(activity, image);
        } else {// 登录成功后分享
            FacebookSdk.sdkInitialize(activity.getApplicationContext());
            callbackManager = CallbackManager.Factory.create();
            LoginManager.getInstance().registerCallback(callbackManager ,
                    new FacebookCallback<LoginResult>() {
                        @Override
                        public void onSuccess(LoginResult loginResult) {                      
                            // 分享图片
                            sharePhoto(activity, image);
                        }

                        @Override
                        public void onCancel() {
                           
                        }

                        @Override
                        public void onError(FacebookException exception) {
                          
                        }
                    });
            LoginManager.getInstance().logInWithReadPermissions(activity, 
            Arrays.asList("public_profile"));
        }

3 . canShow() 简单分析

// 1
ShareDialog.canShow(SharePhotoContent.class)
// 2
public static boolean canShow(Class<? extends ShareContent> contentType) {
        return canShowWebTypeCheck(contentType)// to 3
        || canShowNative(contentType);
    }
//3 检查
private static boolean canShowWebTypeCheck(Class<? extends ShareContent> contentType) {
        return ShareLinkContent.class.isAssignableFrom(contentType) 
        || ShareOpenGraphContent.class.isAssignableFrom(contentType) 
        // 分享图片
        || SharePhotoContent.class.isAssignableFrom(contentType) 
        //登录状态 to 4
        && AccessToken.isCurrentAccessTokenActive();
    }

//4 登录状态: accessToken 不为空&&不过期
 public static boolean isCurrentAccessTokenActive() {
        AccessToken accessToken = AccessTokenManager.getInstance().getCurrentAccessToken();
        return accessToken != null && !accessToken.isExpired();
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值