Android 友盟分享 开发日记
2016-09-03 14:49
204 查看
公司项目涉及到分享的部分了,看友盟的平台相当的强大,觉得就用这个了,本以为也就一个上午的事情,哪知道在这个坑里面足足蹲了两天的时间,下面我将详细介绍下友盟分享的具体过程
tip:强烈建议配合开发文档一起看
首先,别先去下demo,人家的东西毕竟是人家的,copy过来说不定有很多冗余的东西,先打开的永远是人家的开发文档。
进去先注册个号:
注册完了去别的地方继续注册,你想要什么分享就需要去对方的开放平台注册下,已便于获取到他们对应的key和APPsecret,微信的分享最为复杂,我就以微信为例:
里面有一个项目签名可以使用Gen_Signature_Android获取签名工具。本工具在文章末尾给出。
注册下需要人工审核下,得过个几天,通过后就能看到了。
这个平台的APPsecret超能装逼,你得微信扫码认证才能获取到secret,并且以后每次获取都要扫一次码才能看。
其余平台的注册地址:
只需百度 **开放平台 即可,如(新浪微博开放平台,腾讯开放平台,等等)
然后回到友盟的分享功能那去
很容易的就找到了文档,进来人家就用红字标了个醒目的东西
所以,我下面介绍的也是针对于友盟sdk4.3版本,对于某些只用最新SDK的强迫症就请在此绕道,88啦。
还留下的继续哈,跟着文档走
注册完后开个项目就能拿到key了
下载的是4.3版本的SDK!!!可以看到目录是这样的
现在差不多就接入正题了,先把main包下的libs包导入到项目中,然后把res下的东西也抠过去
这时文档中说了需要添加工程引用,好,坑来了,可以不用添加,pass这一步。继续往下一步走:
这边我列入比较详细的配置信息,这里和文档有出入,请自行选择需要的
又一个坑来了,可以看到,在腾讯SSO授权的Activity注册那里,有个<dataandroid:scheme="tencent100424468"/>看起来像key一样的东西,千万不要手贱把他改成你的腾讯开放平台注册项目得到的KEY,否则分享时会报错。
最后为了降低耦合度,开一个类来实现分享的功能
这个类目前只集成了qq,qq空间,微信朋友圈,微信朋友,短信这5个,需要增加的可以自行增加进来,还有所有的分享平台要换成自己项目的key 和APPKEY,类的具体调用如下
ok,这样就大功告成了。
特别的,对于微信的分享和朋友圈的分享,网上会出现一堆这样那样的问题,我也遇到过一些问题,下面我将特别针对于微信不能分享的问题作出解答:
问:项目运行的时候点击微信分享为什么一闪而过?
答:首先,测试微信朋友圈分享的时候必须是已经打包了的项目,如果仅仅是在As或者Ec中点击run调试是没有用的。然后,如果是已经打包了的项目。一定要确保你当前项目的签名和微信开放平台注册时填的签名一致。如不一致,去平台更正。
问:微信分享完后回到项目就闪退,报错。
答:确保项目中存在一个名为
的包。没有的话导入,友盟官方下载的4.3SDK里有。
衍生的问题:这个httpmine.jar包会与本项目的其他网络请求包相互冲突而导致编译不通过,怎么办?
答:引起jar包冲突的主要原因就是两个jar包之间纯在大量相同的源码,编译器认为这是不安全因素,所有会报编译不通过,解决方案1,删除与httpmine相冲突的包。解决方案2,对于AS,在build.gradle文件中加入忽视即可。对于EC,我就不知道了,没研究。
AS的具体忽视内容如下:
问:微信要分享一段链接,为什么没有用?
答:微信的分享需要有内容+图片,并且缺一不可。具体添加方法如:
在new WeiXinShareContent类的时候带上需要添加的图片即可。
以上就是在友盟推送过程中自己遇到的一些问题,可能不全,但还是把它以文字的形式分享出来,希望对有需要的人提供帮助。
附录:签名工具下载地址:http://download.csdn.net/detail/qq_26589227/9620818
一个比较完善的小DEMO可以参考,此demo有冗余文件,重复代码,仅供参考:http://download.csdn.net/detail/qq_26589227/9620823
tip:强烈建议配合开发文档一起看
首先,别先去下demo,人家的东西毕竟是人家的,copy过来说不定有很多冗余的东西,先打开的永远是人家的开发文档。
进去先注册个号:
注册完了去别的地方继续注册,你想要什么分享就需要去对方的开放平台注册下,已便于获取到他们对应的key和APPsecret,微信的分享最为复杂,我就以微信为例:
里面有一个项目签名可以使用Gen_Signature_Android获取签名工具。本工具在文章末尾给出。
注册下需要人工审核下,得过个几天,通过后就能看到了。
这个平台的APPsecret超能装逼,你得微信扫码认证才能获取到secret,并且以后每次获取都要扫一次码才能看。
其余平台的注册地址:
只需百度 **开放平台 即可,如(新浪微博开放平台,腾讯开放平台,等等)
然后回到友盟的分享功能那去
很容易的就找到了文档,进来人家就用红字标了个醒目的东西
所以,我下面介绍的也是针对于友盟sdk4.3版本,对于某些只用最新SDK的强迫症就请在此绕道,88啦。
还留下的继续哈,跟着文档走
注册完后开个项目就能拿到key了
下载的是4.3版本的SDK!!!可以看到目录是这样的
现在差不多就接入正题了,先把main包下的libs包导入到项目中,然后把res下的东西也抠过去
这时文档中说了需要添加工程引用,好,坑来了,可以不用添加,pass这一步。继续往下一步走:
这边我列入比较详细的配置信息,这里和文档有出入,请自行选择需要的
<!-- ###################声明SDK使用的相关权限###################### --> <!-- 检测网络状态 --> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <!-- 获取mac地址作为用户的备用唯一标识 --> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <!-- 获取用户手机的IMEI,用来唯一的标识用户 --> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <!-- 缓存资源优先存入SDcard --> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <!-- 允许应用程序联网,以便向我们的服务器端发送数据 --> <uses-permission android:name="android.permission.INTERNET" /> <!-- QQ、QQ空间所需权限 --> <uses-permission android:name="android.permission.GET_TASKS" /> <!-- ************************* 分享相关的注册 START **************************** --> <!-- 分享内容编辑页 --> <activity android:name="com.umeng.socialize.view.ShareActivity" android:configChanges="orientation|keyboard" android:launchMode="singleTask" android:noHistory="true" android:theme="@style/Theme.UMDialog" android:windowSoftInputMode="stateVisible|adjustResize" > </activity> <!-- 腾讯SSO授权的Activity注册 --> <activity android:name="com.tencent.tauth.AuthActivity" 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="tencent100424468" /> </intent-filter> </activity> <activity android:name="com.tencent.connect.common.AssistActivity" android:screenOrientation="portrait" android:theme="@android:style/Theme.Translucent.NoTitleBar" /> <!-- 微信回调activity --> <activity android:name=".wxapi.WXEntryActivity" android:configChanges="keyboardHidden|orientation|screenSize" android:exported="true" android:screenOrientation="portrait" android:theme="@android:style/Theme.Translucent.NoTitleBar" /> <!-- 易信回调activity --> <activity android:name=".yxapi.YXEntryActivity" android:configChanges="keyboardHidden|orientation|screenSize" android:exported="true" android:screenOrientation="portrait" android:theme="@android:style/Theme.Translucent.NoTitleBar" /> <!-- 人人SSO授权所需的OAuthActivity --> <activity android:name="com.renn.rennsdk.oauth.OAuthActivity" android:configChanges="orientation|navigation|keyboardHidden" /> <!-- facebook相关 --> <activity android:name=".activity.FacebookActivity" > </activity> <activity android:name="com.facebook.LoginActivity" android:label="@string/app_name" android:theme="@android:style/Theme.Translucent.NoTitleBar" /> <!-- ************************* 分享相关的注册 END **************************** --> <meta-data android:name="UMENG_CHANNEL" android:value="Umeng" > </meta-data>
又一个坑来了,可以看到,在腾讯SSO授权的Activity注册那里,有个<dataandroid:scheme="tencent100424468"/>看起来像key一样的东西,千万不要手贱把他改成你的腾讯开放平台注册项目得到的KEY,否则分享时会报错。
最后为了降低耦合度,开一个类来实现分享的功能
/** * Created by fangwei */ public class UMshare { // 首先在您的Activity中添加如下成员变量 public final UMSocialService mController = UMServiceFactory.getUMSocialService("com.umeng.share"); private Context context; private Activity activity; public UMshare(final Context context, View view) { this.context = context; //强转activity activity = (Activity) context; // 配置需要分享的相关平台 configPlatforms(); } <span style="background-color: rgb(255, 255, 255);"> </span>
<pre style="font-family: 'Courier New'; font-size: 9pt;"><span style="background-color: rgb(255, 255, 255);"><em>/** * </em><span style=" font-family: 宋体;"><em>调起分享页面 </em></span><span style=" font-family: 宋体;"><em> </em></span><em>*/ </em><strong>public void </strong>openshare() { <strong>mController</strong>.getConfig().setPlatforms(SHARE_MEDIA.<strong><em>WEIXIN</em></strong>, SHARE_MEDIA.<strong><em>WEIXIN_CIRCLE</em></strong>, SHARE_MEDIA.<strong><em>QQ</em></strong>, SHARE_MEDIA.<strong><em>QZONE</em></strong>, SHARE_MEDIA.<strong><em>SMS </em></strong><strong><em> </em></strong>); <strong>mController</strong>.openShare(<strong>activity</strong>, <strong>false</strong>); }</span>
/** * 配置平台信息 */ private void configPlatforms() { // 添加QQ、QZone平台 addQQQZonePlatform(); // 添加微信、微信朋友圈平台 addWXPlatform(); // 添加短信平台 addSMS(); } /** * 添加短信平台</br> */ private void addSMS() { // 添加短信 SmsHandler smsHandler = new SmsHandler(); smsHandler.addToSocialSDK(); } /** * @return * @功能描述 : 添加微信平台分享 */ private void addWXPlatform() { // 注意:在微信授权的时候,必须传递appSecret // <span style="font-family: Arial, Helvetica, sans-serif;">wx159fec67250430d8</span><span style="font-family: Arial, Helvetica, sans-serif;">是你在微信开发平台注册应用的AppID, 这里需要替换成你注册的AppID</span> String appId = "wx159fec67250430d8"; String appSecret = "b9b6e13d0bb1542cd94e37a5a577c79a"; // 添加微信平台 UMWXHandler wxHandler = new UMWXHandler(activity, appId, appSecret); wxHandler.addToSocialSDK(); // 添加微信朋友圈 UMWXHandler wxCircleHandler = new UMWXHandler(activity, appId, appSecret); wxCircleHandler.setToCircle(true); wxCircleHandler.addToSocialSDK(); } /** * @return * @功能描述 : 添加QQ平台支持 QQ分享的内容, 包含四种类型, 即单纯的文字、图片、音乐、视频. 参数说明 : title, summary, * image url中必须至少设置一个, targetUrl必须设置,网页地址必须以"http://"开头 . title : * 要分享标题 summary : 要分享的文字概述 image url : 图片地址 [以上三个参数至少填写一个] targetUrl * : 用户点击该分享时跳转到的目标地址 [必填] ( 若不填写则默认设置为友盟主页 ) */ private void addQQQZonePlatform() { String appId = "1105414515"; String appKey = "9WPzNBctj4aBdYiO"; // 添加QQ支持, 并且设置QQ分享内容的target url UMQQSsoHandler qqSsoHandler = new UMQQSsoHandler(activity, appId, appKey); qqSsoHandler.setTargetUrl("http://www.umeng.com"); qqSsoHandler.addToSocialSDK(); // 添加QZone平台 QZoneSsoHandler qZoneSsoHandler = new QZoneSsoHandler( activity, appId, appKey); qZoneSsoHandler.addToSocialSDK(); } /** * 设置分享的内容 */ public void setsharecontent(String content, String title, String url) { QZoneSsoHandler qZoneSsoHandler = new QZoneSsoHandler( activity, "1105414515", "9WPzNBctj4aBdYiO"); qZoneSsoHandler.addToSocialSDK(); // 设置分享内容 // mController.setShareContent("友盟社会化组件(SDK)让移动应用快速整合社交分享功能,http://www.umeng.com/social"); //分享的图片,用的是本地图片,请自行替换 UMImage localImage = new UMImage(context, R.mipmap.logofinal); //微信的分享 WeiXinShareContent weixinContent = new WeiXinShareContent(localImage ); weixinContent.setShareContent(content); weixinContent.setTitle(title); weixinContent.setTargetUrl(url); mController.setShareMedia(weixinContent); // 设置朋友圈分享的内容 CircleShareContent circleMedia = new CircleShareContent(localImage ); circleMedia.setShareContent(content); circleMedia.setTitle(title); circleMedia.setTargetUrl(url); mController.setShareMedia(circleMedia); // 设置QQ空间分享内容 QZoneShareContent qzone = new QZoneShareContent(); qzone.setShareContent(content); qzone.setTitle(title); qzone.setTargetUrl(url); mController.setShareMedia(qzone); //QQ分享内容 QQShareContent qqShareContent = new QQShareContent(); qqShareContent.setShareContent(content); qqShareContent.setTitle(title); qqShareContent.setTargetUrl(url); mController.setShareMedia(qqShareContent); // 设置短信分享内容 SmsShareContent sms = new SmsShareContent(); sms.setShareContent(content + url); mController.setShareMedia(sms); } }
这个类目前只集成了qq,qq空间,微信朋友圈,微信朋友,短信这5个,需要增加的可以自行增加进来,还有所有的分享平台要换成自己项目的key 和APPKEY,类的具体调用如下
/**使用友盟分享**/ UMshare uMshare = new UMshare("内容文本", "具有点击事件的VIEW "); uMshare.setsharecontent("内容", "标题","URL");
<pre style="font-family: 'Courier New'; font-size: 9pt;"><span style="background-color: rgb(255, 255, 255);">uMshare.openshare();//调起分享界面</span>
ok,这样就大功告成了。
特别的,对于微信的分享和朋友圈的分享,网上会出现一堆这样那样的问题,我也遇到过一些问题,下面我将特别针对于微信不能分享的问题作出解答:
问:项目运行的时候点击微信分享为什么一闪而过?
答:首先,测试微信朋友圈分享的时候必须是已经打包了的项目,如果仅仅是在As或者Ec中点击run调试是没有用的。然后,如果是已经打包了的项目。一定要确保你当前项目的签名和微信开放平台注册时填的签名一致。如不一致,去平台更正。
问:微信分享完后回到项目就闪退,报错。
答:确保项目中存在一个名为
的包。没有的话导入,友盟官方下载的4.3SDK里有。
衍生的问题:这个httpmine.jar包会与本项目的其他网络请求包相互冲突而导致编译不通过,怎么办?
答:引起jar包冲突的主要原因就是两个jar包之间纯在大量相同的源码,编译器认为这是不安全因素,所有会报编译不通过,解决方案1,删除与httpmine相冲突的包。解决方案2,对于AS,在build.gradle文件中加入忽视即可。对于EC,我就不知道了,没研究。
AS的具体忽视内容如下:
android { packagingOptions { exclude 'META-INF/DEPENDENCIES.txt' exclude 'META-INF/LICENSE.txt' exclude 'META-INF/NOTICE.txt' exclude 'META-INF/NOTICE' exclude 'META-INF/LICENSE' exclude 'META-INF/DEPENDENCIES' exclude 'META-INF/notice.txt' exclude 'META-INF/license.txt' exclude 'META-INF/dependencies.txt' exclude 'META-INF/LGPL2.1' } }
问:微信要分享一段链接,为什么没有用?
答:微信的分享需要有内容+图片,并且缺一不可。具体添加方法如:
//微信的分享 WeiXinShareContent weixinContent = new WeiXinShareContent(localImage); weixinContent.setShareContent(content); weixinContent.setTitle(title); weixinContent.setTargetUrl(url); mController.setShareMedia(weixinContent);
在new WeiXinShareContent类的时候带上需要添加的图片即可。
以上就是在友盟推送过程中自己遇到的一些问题,可能不全,但还是把它以文字的形式分享出来,希望对有需要的人提供帮助。
附录:签名工具下载地址:http://download.csdn.net/detail/qq_26589227/9620818
一个比较完善的小DEMO可以参考,此demo有冗余文件,重复代码,仅供参考:http://download.csdn.net/detail/qq_26589227/9620823
相关文章推荐
- Android应用开发-小巫CSDN博客客户端之集成友盟社会化分享组件
- Android开发——集成友盟社会化分享遇到的坑(二)
- Android开发记录16-友盟第三方登录、分享实现
- Android:友盟分享 AS开发配置
- 【Android开发日记】微信API 分享到朋友圈
- Android开发——集成友盟社会化分享遇到的坑(一)
- Android开发记录16-友盟第三方登录、分享实现
- 【Android开发日记】 新浪微博API SSO授权 分享
- Android应用开发-小巫CSDN博客客户端之集成友盟社会化分享组件
- 程序员:Android开发经验分享(三)
- 分享七个非常有用的Android开发工具和工具包
- Android 分享两个你学习android 平台开发必须碰到的几个知识点的组件【天气预报、日期】View 组件
- 技巧速查——分享我的Android程序开发心得
- 分享几点Android 开发中的小技巧
- 推测用户行为 程序员分享Android开发经验
- android wifi驱动开发日记(二)
- 分享几点Android 开发中的小技巧
- Android 应用开发中国大学生挑战赛 & 大学生博客分享
- 【祝贺改版】iBook阅读星-android版开发tips分享
- 程序员:Android开发经验分享(二)