前段日子做了一个新闻类的应用,作为一个新闻类的应用,分享是必不可少的一个功能,也就是我们经常看到的熟悉的页面:
由于自己是初次接触,很多的东西都不是很明白,如今回头看看,真的没有很多的东西!由于是基于第三方做的一些开发,所以我们需要做的也就是按照规范直接调用即可!说归说,但是在实践的过程中还是会遇到各种各样的问题,接下来就将自己在过程中遇到的问题以及需要注意的点分享给大家,希望可以帮助到刚刚接触到这一块技术的亲们!
一、各种平台账号的注册
友盟官网注册自己的账号、微信开放平台注册自己的账号、qq互联注册自己的账号(这个可以和自己的PM要一下),这个在后边的代码中会使用得到,而且是你的应用的唯一标示,接下来就需要按照官方文档上的提示一步步去实现了。
**注意:这里注册的账号一定要根据自己的实际情况对应,如果自己做的是移动应用就注册移动应用、如果是网站应用即注册网站应用!
二、SDK导入和调用
友盟官方提供了三种导入SDK的方法,如果你是第一次接触这个,推荐使用快速集成的方案,这样可以减少不少的麻烦,想要实现什么平台的分享就对应勾选起来即可。例如只做qq和微信的分享,只需要勾选相应的平台和自己需要的资料即可!(如果是初次接触,建议将文档及工程demo都下载下来,方便自己的学习)
再接下来就是配置文件中权限的配置,
<!-- QQ、QQ空间所需权限 -->
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.SET_DEBUG_APP" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.USE_CREDENTIALS" />
<uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
<!-- 微信回调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" />
<!-- ############ 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="tencent1104805317" />
</intent-filter>
</activity>
<activity
android:name="com.tencent.connect.common.AssistActivity"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Translucent.NoTitleBar" >
</activity>
<!-- 友盟APPID -->
<meta-data
android:name="UMENG_APPKEY"
android:value="55ecf150e0f55a537400042f" >
</meta-data>
</application>
<!-- ###################声明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" />
注:这里的配置主要是对各个平台的权限配置和友盟APPID的配置
<!-- 友盟APPID -->
<meta-data
android:name="UMENG_APPKEY"
android:value="55ecf150e0f55a537400042f" >
</meta-data>
最后就是在自己的activity中实现友盟控制器的使用。
1.声明分享控制器
final UMSocialService mController = UMServiceFactory
.getUMSocialService("com.umeng.share");
2.在onCreate方法中添加各个分享平台
// 添加微信平台到SDK
UMWXHandler wxHandler = new UMWXHandler(PictureViewInfoActivity.this,
"wxd4d271556de359af", "55958b52d9760b0e9ae763ecc380d198");
wxHandler.addToSocialSDK();
// 添加微信朋友圈平台到SDK
UMWXHandler wxCicleHandler = new UMWXHandler(
PictureViewInfoActivity.this, "wxd4d271556de359af",
"55958b52d9760b0e9ae763ecc380d198");
wxCicleHandler.setToCircle(true);
wxCicleHandler.addToSocialSDK();
// 添加qq到SDK,参数1为当前Activity,参数2为开发者在QQ互联申请的APP ID,参数3为开发者在QQ互联申请的APP kEY.
UMQQSsoHandler qqSsoHandler = new UMQQSsoHandler(
PictureViewInfoActivity.this, "1104805317", "gvdED7aW06yaigv7");
qqSsoHandler.addToSocialSDK();
// 添加qq空间平台到SDK
QZoneSsoHandler qZoneSsoHandler = new QZoneSsoHandler(
PictureViewInfoActivity.this, "1104805317", "gvdED7aW06yaigv7");
qZoneSsoHandler.addToSocialSDK();
// 去除人人网、豆瓣网、腾讯微博、新浪微博的分享
mController.getConfig().removePlatform(SHARE_MEDIA.RENREN,
SHARE_MEDIA.DOUBAN, SHARE_MEDIA.SINA, SHARE_MEDIA.TENCENT);
3.打开分享面板;
share = (LinearLayout) findViewById(R.id.picView_Share);
share.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
mController.openShare(PictureViewInfoActivity.this, false);
}
});
4.设置分享内容;
// 设置分享内容
try {
/*-------------------------设置微信好友分享内容-------------------*/
WeiXinShareContent weixinContent = new WeiXinShareContent();
// 设置分享文字
weixinContent.setShareContent(pictureViewInfo.get(0)
.getTitle());
// 设置title
weixinContent.setTitle("来自***的分享");
// 设置分享内容跳转URL
weixinContent.setTargetUrl(URLs.SOCIAL_SHARE_HTTP
+ pictureViewInfo.get(0).getUid() + "");
// 设置分享图片
weixinContent.setShareImage(new UMImage(
PictureViewInfoActivity.this, URLs.imgeUrl
+ pictureViewInfo.get(0).getPath()));
mController.setShareMedia(weixinContent);
/*-------------------------设置微信朋友圈分享内容----------------------------*/
CircleShareContent circleMedia = new CircleShareContent();
circleMedia.setShareContent("*******!");
circleMedia.setTitle("来自***的分享" + " | "
+ pictureViewInfo.get(0).getTitle());
circleMedia.setShareMedia(new UMImage(
PictureViewInfoActivity.this, URLs.imgeUrl
+ pictureViewInfo.get(0).getPath()));
circleMedia.setTargetUrl(URLs.SOCIAL_SHARE_HTTP
+ pictureViewInfo.get(0).getUid() + "");
mController.setShareMedia(circleMedia);
/*--------------------------------qq-----------------------------*/
QQShareContent qqShareContent = new QQShareContent();
// 设置分享文字
qqShareContent.setShareContent(pictureViewInfo.get(0)
.getTitle());
// 设置分享title
qqShareContent.setTitle("来自***的分享");
// 设置分享图片
qqShareContent.setShareImage(new UMImage(
PictureViewInfoActivity.this, URLs.imgeUrl
+ pictureViewInfo.get(0).getPath()));
// 设置点击分享内容的跳转链接
qqShareContent.setTargetUrl(URLs.SOCIAL_SHARE_HTTP
+ pictureViewInfo.get(0).getUid() + "");
mController.setShareMedia(qqShareContent);
/*--------------------------------qq空间-----------------------------*/
QZoneShareContent qzone = new QZoneShareContent();
// 设置分享文字
qzone.setShareContent(pictureViewInfo.get(0).getTitle());
// 设置分享内容的标题
qzone.setTitle("来自***的分享");
// 设置分享图片
qzone.setShareImage(new UMImage(
PictureViewInfoActivity.this, URLs.imgeUrl
+ pictureViewInfo.get(0).getPath()));
// 设置点击消息的跳转URL
qzone.setTargetUrl(URLs.SOCIAL_SHARE_HTTP
+ pictureViewInfo.get(0).getUid() + "");
mController.setShareMedia(qzone);
// mController
// .setShareContent(pictureViewInfo.get(0).getTitle()
// +
// "http://123.56.114.148:8082/CheDuanZi/api/json!share.do?articleId="
// + pictureViewInfo.get(0).getUid());
// // 设置分享图片
// mController.setShareMedia(new UMImage(
// PictureViewInfoActivity.this,
// "http://123.56.114.148:8082/CheDuanZi/statics"
// + pictureViewInfo.get(0).getPath()));
// 设置点击分享内容的跳转链接
// qqShareContent
// .setTargetUrl("http://123.56.114.148:8082/CheDuanZi/api/json!share.do?articleId=100");
// mController.setShareMedia(qqShareContent);
} catch (Exception e) {
// TODO: handle exception
}
需要注意的是分享内容必须设置setTargetUrl()和setShareContent(),这里只列出了qq好友、空间和微信好友、朋友圈的分享,其他平台的分享内容的设置以此类推!
一切就绪之后,还需要提醒的是微信分享功能的测试是需要打包测试的,很多人就是因为不知道这一点而发愁了半天也不能实现;如果需要调试qq分享的话可以在互联平台上填写自己的调试qq号码,供自己调试使用,和打包测试相比很是方便!
最后提示一下大家,尽可能在官网上找资料,网络上查到的东西尽管很多,但是他的真实性无法保证!就拿自己在设置微信分享的APPID和APPSecret时,网上有资料说是用打包时的MD5码和SH1码,
但事实证明这个是不对的,正确的答案是微信开发平台上得到的APPID和APPSecret;
克服自己内心的抵触、恐惧心理,相信大家一定可以做到!