Android集成最新ShareSDK V3.1.0第三方分享爬坑总结

一、前言

最近做了个项目,需要集成分享功能,距离上一个项目集成分享功能不到两个月,原以为分分钟可以搞定的事情,但是却花费了大半天功夫(简直就是浪费生命啊......),集成过程还是遇到了一些坑,导致浪费了一些不必要的时间,所以,有的时候学过、用过的东西还是得记录总结一下,便于以后遇到类似问题时快速解决,提高效率。

二、爬坑

具体步骤参考官网的ShareSDK官方快速集成文档 V3.x,这里只说一些注意事项:

第一步、获取ShareSDK;

第二步:导入ShareSDK;

这一步比较简单,只说一下ShareSDK.xml需要注意的一些小点,AppId和AppSecret替换成自己申请的, BypassApproval设置为"false",即不绕过审核,这样才能正确的分享,如果为true,分享出去的图片就是一个文件。只要是正式环境分享,BypassApproval的值都应该为false。

 

第三步:配置Android Manifest.xml;

3.1 官方的文档上少了一个读SD卡的权限,需要自己加一下,该权限应该是用来读取手机中是否安装了分享的App(QQ、微信等),而且如果是6.0+的系统需要动态申请该权限:

    

3.2 Application配置,官方给出了说明,但是不太好找,所以我也把它汇总进来:

Android集成最新ShareSDK V3.1.0第三方分享爬坑总结_第1张图片
Application配置.png

其他的基本上参照上面给的官方文档来就行了,我们项目中只集成了微信好友、微信朋友圈、QQ好友、QQ空间,我贴一下我们项目中的集成ShareSDK的Android Manifest.xml部分:













    

       
        
        
            
                

                
                

                
            
        

        
        
        

3.3 其中有3项需要替换的地方,“xxx”替换成自己应用的相关key即可,注意第一个一定要保留
“tencent”前缀:

    
       
        

至此,Android Manifest.xml部分配置完成。

第四步:添加分享代码;

 private void showShare() {

        OnekeyShare oks = new OnekeyShare();
        //关闭sso授权
        oks.disableSSOWhenAuthorize();
        // 分享时Notification的图标和文字  2.5.9以后的版本不     调用此方法
        //oks.setNotification(R.drawable.ic_launcher, getString(R.string.app_name));
        // title标题,印象笔记、邮箱、信息、微信、人人网和QQ空间使用
        oks.setTitle(getString(R.string.app_name));
        // titleUrl是标题的网络链接,仅在人人网和QQ空间使用
        oks.setTitleUrl("www.qq.com");
        // text是分享文本,所有平台都需要这个字段
        oks.setText("Text文本内容 www.qq.com");
        // imagePath是图片地址,Linked-In以外的平台都支持此参数
        // 如果不用本地图片,千万不要调用这个方法!!!
//        oks.setImagePath("http://f1.sharesdk.cn/imgs/2014/02/26/owWpLZo_638x960.jpg");
        oks.setImageUrl("http://f1.sharesdk.cn/imgs/2014/02/26/owWpLZo_638x960.jpg");
        // url仅在微信(包括好友和朋友圈)中使用
        oks.setUrl("www.qq.com");
        // comment是我对这条分享的评论,仅在人人网和QQ空间使用
        oks.setComment("我是测试评论文本");
        // site是分享此内容的网站名称,仅在QQ空间使用
        oks.setSite(getString(R.string.app_name));
        // siteUrl是分享此内容的网站地址,仅在QQ空间使用
        oks.setSiteUrl("www.qq.com");
        oks.setCallback(new PlatformActionListener() {
            @Override
            public void onComplete(Platform platform, int i, HashMap hashMap) {
                KLog.i("share onComplete...");
            }

            @Override
            public void onError(Platform platform, int i, Throwable throwable) {
                KLog.i("share onError..." + throwable);
            }

            @Override
            public void onCancel(Platform platform, int i) {
                KLog.i("share onCancel...");
            }
        });
        // 启动分享GUI
        oks.show(getActivity());
    }

4.1 其中有一个坑是尤其需要注意的,就是这行代码:

// 如果不用本地图片,千万不要调用这个方法!!!
  oks.setImagePath("http://f1.sharesdk.cn/imgs/2014/02/26/owWpLZo_638x960.jpg");

分享到QQ好友的时候,如果你的图片不是本地图片,千万不要调用这个方法!!!
分享到QQ好友的时候,如果你的图片不是本地图片,千万不要调用这个方法!!!
分享到QQ好友的时候,如果你的图片不是本地图片,千万不要调用这个方法!!!
否则分享失败,这是我这次分享遇到的最大的坑,其他分享加上这行代码没有问题,分享到QQ好友死活不行,最后把这行代码注释掉之后终于成功了,心中顿时一万头草泥马奔腾而过......

4.2 涉及到URL相关的时候,最好先用正规的链接测试,因为你的链接如果是那个平台的黑名单也是会分享失败的,确保分享功能正常之后,再替换回自己的链接进行测试。比如

        oks.setTitleUrl("www.qq.com");

4.3 微信分享一定要打签名包才能成功;
4.4 不时清空数据。 亲测:如果微信开发者平台的签名做了修改,可能需要清空微信数据或者卸载重装才能分享成功,就问你怕不怕?所以还是先备份好数据吧。

4.5 多准备两台手机测试,为什么这么说呢?
由于在这个项目中我只负责把分享功能调通,具体的分享内容是其他童鞋负责,其中有一个童鞋在使用我写的分享功能分享到QQ好友的时候,死活不成功,分享出来的内容各种不对劲,但是另外一个童鞋是已经成功了的,所以我相信代码应该是ok的,然后我让他自己调试一下,各种debug、打log无果之后,我让他换台手机,最终终于成功了!我问他怎么成功的,他说新手机装了手机QQ,旧手机没装。。。。。。。。那一刻,我喷了满屏鲜血,感觉整个身体被掏空,我终于体会到了:不怕神一样的对手,就怕没装手机QQ的队友还要强行分享到QQ好友!

第五步:完成;

三、后记

总的来说,使用ShareSDK实现第三方分享还是比较简单的,只是有些小坑需要我们注意一下,就能顺利集成。有问题欢迎留言反馈,最后附上官方爬坑指南,希望老司机早日脱坑。

你可能感兴趣的:(Android集成最新ShareSDK V3.1.0第三方分享爬坑总结)