美文网首页Android 知识Android开发经验谈Android开发
Android集成最新ShareSDK V3.1.0第三方分享爬

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

作者: EnjoyAndroid | 来源:发表于2017-09-30 16:03 被阅读106次

    一、前言

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

    二、爬坑

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

    相关文章

      网友评论

        本文标题:Android集成最新ShareSDK V3.1.0第三方分享爬

        本文链接:https://www.haomeiwen.com/subject/ztzcdxtx.html