咱们上回书说道:不用微信SDK也能分享。
权限我有,天下我走。
当然,友盟SDK中得各种支持JAR包和res文件的内容也要一个不能少的添加到工程里。
Android 微信分享,无需那么麻烦。
这次写友盟分享一个是避免微信新版本改动过大,可能导致无法做到Intent跳转界面的分享实现,还有就是不能局限于一个微信嘛。区区微信何足挂齿,我们不要放弃整片森林。(其实我就是懒。)
吾日三黑吾肾,不光自黑,还他黑,被迫他黑,被迫自黑。于是乎,我总结了一点。善于自黑者,必有其过人心智,长久锻炼,心若磐石,体如金刚。黑的久了,总结起来一句话,那是小母牛过独木桥,牛B一个接一个的。
黑言少叙,言归正状!!
首先,友盟分享的准备工作。注册一个友盟账号,会得到一个appkey,这个可以多个应用之间通用。具体的我就不细说了。所谓key,就是钥匙,开启分享大门的钥匙。
其次,下载SDK。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" />
权限我有,天下我走。
那接下来就是研究研究者友盟的API了。(以下内容全是原创,如有跟友盟雷同,那是我复制的原创)
<!-- ###################添加UmengAppkey###################### -->
<meta-data
android:name="UMENG_APPKEY"
android:value="xxxxxxxxxxxxxxxxxxxxxx" >
</meta-data>
在清单文件的application节点里,加上这个数据单元xxxxxxx的内容就是友盟中创建应用的appkey。
为了方便应用的调试,在程序入口处加入com.umeng.socialize.utils.Log.LOG = true;
接下来,开始分享步骤的开发。这里是用了友盟默认的分享界面。
接下来,开始分享步骤的开发。这里是用了友盟默认的分享界面。
分享,就要有分享的内容。需要有个容器来装载内容和控制。
//初始化分享服务控制类
mController = UMServiceFactory.getUMSocialService("com.umeng.share");
// 设置分享内容
mController
.setShareContent("你是我的小苹果,有好东西要分享,http://www.umeng.com/social");
// 设置分享图片, 参数2为图片的url地址
mController.setShareMedia(new UMImage(context,"http://www.baidu.com/img/bdlogo.png"));
有了分享内容,接下来就是选择分享的应用。友盟默认实现了新浪微博,腾讯微博,人人网,豆瓣网的分享。一句话就搞定了。
mController.getConfig().<span style="font-family: Monaco; font-size: 14px;">setPlatforms</span>( SHARE_MEDIA.RENREN, SHARE_MEDIA.DOUBAN,SHARE_MEDIA.TENCENT,SHARE_MEDIA.SINA);
需求往往不止这些,接下来实现其他的分享。要分享就要有分享的对象,上面之所以一句话搞定四个分享,一因为对应的对象已经默认实现了。所以这里我们要自己实现。
注意,实现分享对象,一定要再
setPlatforms设置分享控件之前实现。否则的话,你先把控件显示了,activity却发现还没有对应的对象,即对象为null。则不会显示在分享按钮界面上。
// 添加SMS
SmsHandler smsHandler = new SmsHandler();
smsHandler.addToSocialSDK();
// 添加email
EmailHandler emailHandler = new EmailHandler();
emailHandler.addToSocialSDK();
// 添加有道云笔记平台
UMYNoteHandler yNoteHandler = new UMYNoteHandler(this);
yNoteHandler.addToSocialSDK();
// 添加易信平台,参数1为当前activity, 参数2为在易信开放平台申请到的app id
UMYXHandler yixinHandler = new UMYXHandler(this,
"yxc0614e80c9304c11b0391514d09f13bf");
// 关闭分享时的等待Dialog
yixinHandler.enableLoadingDialog(false);
// 把易信添加到SDK中
yixinHandler.addToSocialSDK();
// 易信朋友圈平台,参数1为当前activity, 参数2为在易信开放平台申请到的app id
UMYXHandler yxCircleHandler = new UMYXHandler(this,
"yxc0614e80c9304c11b0391514d09f13bf");
yxCircleHandler.setToCircle(true);
yxCircleHandler.addToSocialSDK();
然后
设置分享对象显示在分享界面上
mController.getConfig().setPlatforms(SHARE_MEDIA.EMAIL,
SHARE_MEDIA.SMS, SHARE_MEDIA.YNOTE,SHARE_MEDIA.DOUBAN,
SHARE_MEDIA.RENREN, SHARE_MEDIA.SINA,
SHARE_MEDIA.YIXIN,SHARE_MEDIA.YIXIN_CIRCLE);
设置OK,开启分享功能
mController.openShare(this, false);
第一个参数是上下文context。false没搞懂。我想应该是是否自动授权一类的。
这样界面就华丽丽的展现了。虽然区区微信何足挂齿,奈何用户多呀,曾经的曾经,直到现在,也是神器一枚。可惜我直到现在,也没有有效的发挥这个神器的隐藏属性,还望哪位大虾不吝赐教。
增加微信和QQ的分享功能前,我建议先去微信和QQ开发者官网看看分享相关的知识,这样有助于理解。就因为之前搞了微信,所以接下来的过程我秒懂了。哈哈。葵花宝典,果然名不虚传。
//微信分享 wx967daebe835fbeac是你在微信开发平台注册应用的AppID, 这里需要替换成你注册的AppID
String appID = "wxd930ea5d5a258f4f";
String appSecret = "5fa9e68ca3970e87a1f83e563c8dcbce";
// 添加微信平台
UMWXHandler wxHandler = new UMWXHandler(this,appID,appSecret);
wxHandler.addToSocialSDK();
// 添加微信朋友圈
UMWXHandler wxCircleHandler = new UMWXHandler(this,appID,appSecret);
wxCircleHandler.setToCircle(true);
wxCircleHandler.addToSocialSDK();
//设置微信好友分享内容
WeiXinShareContent weixinContent = new WeiXinShareContent();
//设置title
weixinContent.setTitle("友盟社会化分享组件-微信");
//设置分享内容跳转URL
weixinContent.setTargetUrl("你的URL链接");
//设置分享图片
// weixinContent.setShareImage(localImage);
mController.setShareMedia(weixinContent);
//设置微信朋友圈分享内容
CircleShareContent circleMedia = new CircleShareContent();
// circleMedia.setShareImage(localImage);
circleMedia.setTargetUrl("你的URL链接");
mController.setShareMedia(circleMedia);
//参数1为当前Activity, 参数2为开发者在QQ互联申请的APP ID,参数3为开发者在QQ互联申请的APP kEY.
UMQQSsoHandler qqSsoHandler = new UMQQSsoHandler(this, "100424468",
"c7394704798a158208a74ab60104f0ba");
qqSsoHandler.addToSocialSDK();
//参数1为当前Activity, 参数2为开发者在QQ互联申请的APP ID,参数3为开发者在QQ互联申请的APP kEY.
QZoneSsoHandler qZoneSsoHandler = new QZoneSsoHandler(this, "100424468",
"c7394704798a158208a74ab60104f0ba");
qZoneSsoHandler.addToSocialSDK();
//设置QQ分享内容使用下面的代码:
QQShareContent qqShareContent = new QQShareContent();
//设置分享文字
qqShareContent.setShareContent("来自友盟社会化组件(SDK)让移动应用快速整合社交分享功能 -- QQ");
//设置分享title
qqShareContent.setTitle("hello, title");
//设置分享图片
qqShareContent.setShareImage(new UMImage(this, R.drawable.abc_ab_bottom_solid_dark_holo));
//设置点击分享内容的跳转链接
qqShareContent.setTargetUrl("你的URL链接");
mController.setShareMedia(qqShareContent);
//设置Qzone分享内容
QZoneShareContent qzone = new QZoneShareContent();
//设置分享文字
qzone.setShareContent("来自友盟社会化组件(SDK)让移动应用快速整合社交分享功能 -- QZone");
//设置点击消息的跳转URL
qzone.setTargetUrl("你的URL链接");
//设置分享内容的标题
qzone.setTitle("QZone title");
//设置分享图片
qzone.setShareImage(new UMImage(this, R.drawable.abc_ab_bottom_solid_dark_holo));
mController.setShareMedia(qzone);
mController.getConfig().setPlatforms(SHARE_MEDIA.EMAIL,
SHARE_MEDIA.SMS, SHARE_MEDIA.YNOTE, SHARE_MEDIA.WEIXIN,
SHARE_MEDIA.WEIXIN_CIRCLE, SHARE_MEDIA.FACEBOOK,
SHARE_MEDIA.QQ, SHARE_MEDIA.QZONE, SHARE_MEDIA.DOUBAN,
SHARE_MEDIA.RENREN, SHARE_MEDIA.SINA, SHARE_MEDIA.TENCENT,
SHARE_MEDIA.YIXIN,SHARE_MEDIA.YIXIN_CIRCLE);
这里的APPid要改成自己的。不然微信无法分享,QQ可能会出问题。不过我没改,微信不能分享,QQ没问题。
开启分享
mController.openShare(this,false);
接下来清单文件要加上对应微信和QQ的响应界面。
<!-- ############ QQ空间和QQ 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" />
<!-- 100424468,如果你使用的公用账号,则不需要修改;否则修改成你在QQ开放平台申请的 APP ID-->
<data android:scheme="tencent100424468" />
</intent-filter>
</activity>
<activity android:name="com.tencent.connect.common.AssistActivity"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:screenOrientation="portrait">
</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
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>
当然,友盟SDK中得各种支持JAR包和res文件的内容也要一个不能少的添加到工程里。