ShareSDK 微信分享失败问题的解决

今天在用 ShareSDK 做第三方分享的时候发现微信分享老是失败,点击微信分享按钮后首先提示“分享操作正在后台进行”,然后接着就提示“分享失败”。这特么是什么鬼。

既然问题出现了,那么就找原因解决呗,首先检查在微信开放平台上注册的应用包名,签名,AppKey,AppSecret 等等是不是完全正确,有没有填错或者忘记改的情况。排除了这些第几错误之后就是去查代码了,是不是代码哪里写的不对。

在将文档来来回回翻了几遍,一顿百度,Google 之后,终于找到了问题的原因,特么又是被那些写文档的给坑了(心里一万头草泥马奔过,去踩死那些写文档的吧)。

文档上说的很简单,分享的时候只要调用 OnekeyShare()代码就行了(代码在官方文档里面有,这里不贴了),就这么简单?对,就这么简单,调用吧,少年!

你开开心心了调用了那段代码,你会发现结果不是你想要的,而且如果你把那段代码里面的某一行删掉的话,你会发现你没法分享了,直接分享失败。在 Google 了很久之后终于找到了解决办法,直接上代码:

/**
     * 一键分享功能
     */
    public static void showShare(final Context context, final Share entity) {
        final OnekeyShare oks = new OnekeyShare();
        //关闭sso授权
        oks.disableSSOWhenAuthorize();

        /**
         * 下面的这些参数必须要写,某些不写会导致某些平台分享失败
         */
        // title标题,印象笔记、邮箱、信息、微信、人人网和QQ空间使用
        oks.setTitle(entity.title);
        // titleUrl是标题的网络链接,仅在人人网和QQ空间使用
        oks.setTitleUrl(entity.shoreUrl);
        // text是分享文本,所有平台都需要这个字段
        oks.setText(entity.intro);
        // imagePath是图片的本地路径,Linked-In以外的平台都支持此参数,
        // 使用 imagePath 必须保证SDcard下面存在此张图片
        //imagePath,imageUrl 必须保留一个,否则微信不能分享,或者分享过去的图片都是应用的 logo
        oks.setImageUrl(Urls.BASE_URL + entity.pic);
        // url仅在微信(包括好友和朋友圈)中使用
        oks.setUrl(entity.shoreUrl);
        // comment是我对这条分享的评论,仅在人人网和QQ空间使用
        oks.setComment("我是测试评论文本");
        // site是分享此内容的网站名称,仅在QQ空间使用
        oks.setSite(context.getString(R.string.app_name));
        // siteUrl是分享此内容的网站地址,仅在QQ空间使用
        oks.setSiteUrl(entity.shoreUrl);

        /**
         * 真正分享出去的内容实际上是由下面的这些参数决定的,根据平台不同分别配置
         */
        oks.setShareContentCustomizeCallback(new ShareContentCustomizeCallback() {
            @Override
            public void onShare(Platform platform, cn.sharesdk.framework.Platform.ShareParams paramsToShare) {
                if (Wechat.NAME.equals(platform.getName()) ||
                    WechatMoments.NAME.equals(platform.getName())) {
                    paramsToShare.setShareType(Platform.SHARE_WEBPAGE);
                    paramsToShare.setUrl(entity.shoreUrl);
                    paramsToShare.setText(entity.intro);
                    paramsToShare.setImageUrl(Urls.BASE_URL + entity.pic);
                    paramsToShare.setTitle(entity.title);
                }
                if (SinaWeibo.NAME.equals(platform.getName())) {
                    paramsToShare.setText(entity.intro);
                    paramsToShare.setUrl(entity.shoreUrl);
                    paramsToShare.setImageUrl(Urls.BASE_URL + entity.pic);
                }
                if (QQ.NAME.equals(platform.getName())) {
                    paramsToShare.setTitle(entity.title);
                    paramsToShare.setTitleUrl(entity.shoreUrl);
                    paramsToShare.setText(entity.intro);
                    paramsToShare.setUrl(entity.shoreUrl);
                    paramsToShare.setImageUrl(Urls.BASE_URL + entity.pic);
                }
            }
        });

        //启动分享GUI
        oks.show(context);
    }

上面的代码是我根据我项目的需要简单封装了一个方法,要用的时候直接调一下,不能直接拿去用,请自行修改方法中的参数。

在上面的代码中,前半部分跟官方文档一样,配置各种参数,后半部分是根据各个平台的不同去分别进行配置不同的参数。

细心的人会发现后半部分里面的参数在前半部分里面都配置过了,那能不能把前面的删掉,只保留后面的呢?答案是不行,如果把前面的某些参数去掉就会导致分享失败(虽然它没用),我已知的就是

oks.setImagePath("/sdcard/test.jpg");

这一行去掉就会导致微信分享失败,文档上写的是“确保SDcard下面存在此张图片”,其实不需要,只要把这行原样写在那里就行,删掉它的话反而会失败,呵呵哒!

我不得不说这帮写文档的家伙真是害人不浅,照着文档去做绝对会把你带到坑里面。

关于各个平台具体的分享参数请看这里,这个也是他们的文档,但是是藏在后面的,在快速集成里面是找不到链接的,而且也没有 Demo 可以让你参考怎么用,你如果只做到快速集成那里的话,是达不到功能要求的,,,,

最后补充说一点,微信和新浪平台上都需要上传APK签名,所以他们都有一个签名生成工具,不过还是推荐用微信的,因为新浪的工具生成的签名好像有问题,,,,工具下载地址在这里

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值