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

一、前言

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

二、爬坑

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

第一步、获取ShareSDK;

第二步:导入ShareSDK;

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

 <Wechat
        Id="4"
        SortId="1"
        AppId="xxx"
        AppSecret="xxx"
        userName="gh_afb25ac019c9"
        path="pages/index/index.html?id=1"
        BypassApproval="false"
        Enable="true" />

第三步:配置Android Manifest.xml;

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

    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

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

Application配置.png

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

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

    <application
        android:name=".App"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">

       <!-- 微信分享回调 -->
        <activity
            android:name=".wxapi.WXEntryActivity"
            android:configChanges="keyboardHidden|orientation|screenSize"
            android:exported="true"
            android:screenOrientation="portrait"
            android:theme="@android:style/Theme.Translucent.NoTitleBar" />
        <activity
            android:name="cn.sharesdk.tencent.qq.ReceiveActivity"
            android:launchMode="singleTask"
            android:noHistory="true">
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />

                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />

                <data android:scheme="tencentxxx" />
            </intent-filter>
        </activity>

        <meta-data
            android:name="Mob-AppKey"
            android:value="xxx" />
        <meta-data
            android:name="Mob-AppSecret"
            android:value="xxx" />
        <!-- ShareSdk  end -->

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

    <data android:scheme="tencentxxx" />
       <meta-data
            android:name="Mob-AppKey"
            android:value="xxx" />
        <meta-data
            android:name="Mob-AppSecret"
            android:value="xxx" />

至此,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<String, Object> 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实现第三方分享还是比较简单的,只是有些小坑需要我们注意一下,就能顺利集成。有问题欢迎留言反馈,最后附上官方爬坑指南,希望老司机早日脱坑。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,311评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,339评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,671评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,252评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,253评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,031评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,340评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,973评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,466评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,937评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,039评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,701评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,254评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,259评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,485评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,497评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,786评论 2 345

推荐阅读更多精彩内容