前言:社会化分享SDK更新很快,目前最高是5.0.1。5.0抛弃之前的版本完全重构,尤其要注意的是5.0版本的功能也只有分享与授权并无其他功能。这就意味着:需要原功能的开发者,请继续使用v4.3.0版本。笔者尝试过使用最高的,但由于能力问题,现在乖乖用4.3.但是,看了4.3的官方demo,实在是想吐槽。算了,自己整理,老老实实的干。
注意:社会化分享需要的key比较多,需要到各平台分别获取
一、总纲
1.下载并导入分享SDK(main/libs'和'main/res)
http://dev.umeng.com/social/android/sdk-download
2.将分享平台copy到工程
将platforms提供的文件夹拷入工程目录下, 和工程本身相应目录合并。
3. 配置manifest
各个平台需要的培训有所不同,这部分官方提供的源码中说的很详细,直接copy。注意:由于copy了部分Activity,注意配置文件中他们的路径,这里要仔细核对,尤其是“.xxActivity”。
此处,在官方demo基础上,修改适合本应用的xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.personalblog"
android:versionCode="1"
android:versionName="1.0" >
<application
android:allowBackup="true"
android:icon="@drawable/logo"
android:label="@string/app_name"
android:theme="@android:style/Theme.Black.NoTitleBar"
>
<!-- android:name="com.personalblog.test.activity.WelActivity" -->
<activity
android:name="com.personalblog.MainActivity"
android:configChanges="orientation|keyboard"
android:label="@string/app_name"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<!-- 友盟AppKey, 需要替换成你自己的 -->
<meta-data
android:name="UMENG_APPKEY"
android:value="5691bdf8e0f55aec4b00197d" >
</meta-data>
<!-- 4eaee02c527015373b000003 -->
<!-- android:value="52a98cf856240b902211203e" > -->
<!-- ************************* 分享相关的注册 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" />
<!-- 100424468,如果你使用的公用账号,则不需要修改;否则修改成你在QQ开放平台申请的 APP ID-->
<data android:scheme="tencent1105024715" />
</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="com.personalblog.test.wxapi.WXEntryActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:exported="true"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
<!-- 易信回调activity -->
<activity
android:name="com.personalblog.test.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="com.facebook.FacebookActivity"
android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
android:label="@string/app_name"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
<!--<provider-->
<!--android:name="com.facebook.FacebookContentProvider"-->
<!--android:authorities="com.facebook.app.FacebookContentProvider1444817025830662"-->
<!--android:exported="true" />-->
<meta-data
android:name="com.facebook.sdk.ApplicationId"
android:value="@string/facebook_app_id" />
<!-- ************************* 分享相关的注册 END **************************** -->
<!-- 评论相关注册 START -->
<activity
android:name="com.umeng.socialize.view.CommentActivity"
android:configChanges="orientation|keyboard"
android:theme="@style/Theme.UMDefault" >
</activity>
<activity
android:name="com.umeng.socialize.view.CommentDetail"
android:configChanges="orientation|keyboard"
android:noHistory="true"
android:theme="@style/Theme.UMDefault" >
</activity>
<activity
android:name="com.umeng.socialize.view.CommentDetailNoMap"
android:configChanges="orientation|keyboard"
android:noHistory="true"
android:theme="@style/Theme.UMDefault" >
</activity>
<!-- 评论相关注册 End -->
<!-- Socialize Example Activity -->
<activity
android:name="com.personalblog.test.activity.NavigationActivity"
android:configChanges="orientation|keyboard"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
</activity>
<activity
android:name="com.personalblog.test.activity.SocialHomeActivity"
android:configChanges="orientation|keyboard"
android:label="@string/app_name" >
</activity>
<activity
android:name="com.personalblog.test.activity.SwitchActivity"
android:configChanges="orientation|keyboard"
android:label="@string/app_name"
android:launchMode="standard" >
</activity>
<activity
android:name="com.personalblog.test.activity.CustomPlatformActivity"
android:configChanges="orientation|keyboard"
android:label="@string/umeng_example_home_btn_plus" >
</activity>
<activity
android:name="com.personalblog.test.activity.ActionBarExampleDetail"
android:configChanges="orientation|keyboard"
android:label="@string/umeng_example_home_btn_plus" >
</activity>
<meta-data
android:name="UMENG_CHANNEL"
android:value="Umeng" >
</meta-data>
<uses-library
android:name="com.google.android.maps"
android:required="false" />
<uses-library android:name="android.test.runner" />
</application>
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="14"
tools:overrideLibrary="com.umeng.socialize.evernote,com.umeng.socialize.pinterest"
/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_LOGS" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<!-- renren sso Permission for Unit Test -->
<!-- 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" />
</manifest>
4. 在分享位置的通过某个按钮或其他方法弹出分享面板
二、QQ和QQ空间分享集成过程
注意:需先在QQ互联成为开发者,便可以创建应用获取Id和Key。(http://connect.qq.com/)QQ和QQ空间,使用的是同一个id和key。
1. 在oncreate()配置需要分享的相关平台 configPlatforms();
/**
* 配置分享平台参数</br>
*/
private void configPlatforms() {
addQQQZonePlatform();
}
private void addQQQZonePlatform() {
String appId = "1105024715";
String appKey = "sEi5DWJjMS9TJeU7";
// 添加QQ支持, 并且设置QQ分享内容的target url
UMQQSsoHandler qqSsoHandler = new UMQQSsoHandler(this,appId, appKey);
qqSsoHandler.addToSocialSDK();
// 添加QZone平台
QZoneSsoHandler qZoneSsoHandler = new QZoneSsoHandler(this, appId, appKey);
qZoneSsoHandler.addToSocialSDK();
}
2.在oncreate()中设置分享的内容 setShareContent();
/**
* 根据不同的平台设置不同的分享内容</br>
*/
private void setShareContent() {
///*******************************分享资源**************************************
UMImage qzone_thumbImage = new UMImage(this,R.drawable.qzone_thumb);
String targetUrl = "http://csdnblog.bmob.cn";
String title = "我的分享";
String content = "我的分享:csdn博客个人特色版,你值得拥有!";
///-----------------------------QQ和QQ空间------------------
/**
* @功能描述 : 添加QQ平台支持 QQ分享的内容, 包含四种类型, 即单纯的文字、图片、音乐、视频. 参数说明 : title, summary,
* image url中必须至少设置一个, targetUrl必须设置,网页地址必须以"http://"开头 . title :
* 要分享标题 summary : 要分享的文字概述 image url : 图片地址 [以上三个参数至少填写一个] targetUrl
* : 用户点击该分享时跳转到的目标地址 [必填] ( 若不填写则默认设置为友盟主页 )
* @return
*/
// 设置QQ空间分享内容
QZoneShareContent qzone = new QZoneShareContent();
qzone.setTitle(title);
qzone.setShareMedia(qzone_thumbImage);
qzone.setShareContent(content);
qzone.setTargetUrl(targetUrl);
mController.setShareMedia(qzone);
// 设置QQ分享内容
QQShareContent qqShareContent = new QQShareContent();
qqShareContent.setTitle(title);
qqShareContent.setShareMedia(qzone_thumbImage);
qqShareContent.setShareContent(content);
qqShareContent.setTargetUrl(targetUrl);
mController.setShareMedia(qqShareContent);
}
3.在分享位置的通过某个按钮或其他方法弹出分享面板
public void onClick(View view) {
int id = view.getId();
switch ( id ) {
case R.id.button_share:
mController.getConfig().setPlatforms(SHARE_MEDIA.WEIXIN, SHARE_MEDIA.WEIXIN_CIRCLE,
SHARE_MEDIA.QQ, SHARE_MEDIA.QZONE, SHARE_MEDIA.SINA, SHARE_MEDIA.TENCENT,
SHARE_MEDIA.DOUBAN,
SHARE_MEDIA.RENREN);
//弹出分享面板
mController.openShare(this, false);
break;
这是应该是最简单的分享了,没有使用第三方授权,也没用监听分享后的状态,便完成QQ和QQ空间的分享。
三、其他分享集成过程
笔者集成了微信、朋友圈、短信、邮件、新浪微博(之前可以,最近不知为毛又坏了,可能是开发者为审核通过),方法完全是和QQ一样。其中,微信系列算是比较坑的,因为需要的keystore是和申请者的电脑绑定的,所以其他人调试就。。。此外,微信调试是时候会等一会就闪没了。我搜索了下原因,有是因为秘钥输错的,我的则是分享内容不全的原因(itle, summary,image url中必须至少设置一个,就都没填)。在使用新浪微博时,注意回调就好。
该部分代码:
///umeng分享start///
/**
* 弹出分享面板,供页面调用
*/
public void share(){
mController.getConfig().setPlatforms(SHARE_MEDIA.WEIXIN,SHARE_MEDIA.WEIXIN_CIRCLE,SHARE_MEDIA.QQ, SHARE_MEDIA.QZONE,SHARE_MEDIA.SINA,SHARE_MEDIA.EMAIL,SHARE_MEDIA.SMS);
//弹出分享面板
mController.openShare(this, false);
}
/**
* 配置分享平台参数</br>
*/
private void configPlatforms() {
// 添加新浪SSO授权
mController.getConfig().setSsoHandler(new SinaSsoHandler());
// 添加QQ、QZone平台
addQQQZonePlatform();
// 添加微信、微信朋友圈平台
addWXPlatform();
addSMSPlatform();
addEmail();
}
private void addSMSPlatform() {
// 添加短信
SmsHandler smsHandler = new SmsHandler();
smsHandler.addToSocialSDK();
}
/**
* @功能描述 : 添加微信平台分享
* @return
*/
private void addWXPlatform() {
// 注意:在微信授权的时候,必须传递appSecret
// wx967daebe835fbeac是你在微信开发平台注册应用的AppID, 这里需要替换成你注册的AppID
String appId = Constants.WEIXIN_ID;
String appSecret = Constants.WEIXIN_KEY;
// 添加微信平台
UMWXHandler wxHandler = new UMWXHandler(this, appId, appSecret);
wxHandler.addToSocialSDK();
// 支持微信朋友圈
UMWXHandler wxCircleHandler = new UMWXHandler(this, appId, appSecret);
wxCircleHandler.setToCircle(true);
wxCircleHandler.addToSocialSDK();
}
private void addQQQZonePlatform() {
String appId = Constants.QQ_ID;
String appKey = Constants.QQ_KEY;
// 添加QQ支持, 并且设置QQ分享内容的target url
UMQQSsoHandler qqSsoHandler = new UMQQSsoHandler(this,appId, appKey);
qqSsoHandler.addToSocialSDK();
// 添加QZone平台
QZoneSsoHandler qZoneSsoHandler = new QZoneSsoHandler(this, appId, appKey);
qZoneSsoHandler.addToSocialSDK();
}
/**
* 添加Email平台</br>
*/
private void addEmail() {
// 添加email
EmailHandler emailHandler = new EmailHandler();
emailHandler.addToSocialSDK();
}
/**
* 根据不同的平台设置不同的分享内容</br>
*/
private void setShareContent() {
///*******************************分享资源**************************************
UMImage qzone_thumbImage = new UMImage(this,R.drawable.logo);
String targetUrl = "http://csdnblog.bmob.cn";
String title = "我的分享";
String content = "我的分享:够哈皮,购物吃喝乐翻天,你值得拥有!";
///-----------------------------内容配置------------------
/**
* @功能描述 : 添加QQ平台支持 QQ分享的内容, 包含四种类型, 即单纯的文字、图片、音乐、视频. 参数说明 : title, summary,
* image url中必须至少设置一个, targetUrl必须设置,网页地址必须以"http://"开头 . title :
* 要分享标题 summary : 要分享的文字概述 image url : 图片地址 [以上三个参数至少填写一个] targetUrl
* : 用户点击该分享时跳转到的目标地址 [必填] ( 若不填写则默认设置为友盟主页 )
* @return
*/
// 设置QQ空间分享内容
QZoneShareContent qzone = new QZoneShareContent();
qzone.setTitle(title);
qzone.setShareMedia(qzone_thumbImage);
qzone.setShareContent(content);
qzone.setTargetUrl(targetUrl);
mController.setShareMedia(qzone);
// 设置QQ分享内容
QQShareContent qqShareContent = new QQShareContent();
qqShareContent.setTitle(title);
qqShareContent.setShareMedia(qzone_thumbImage);
qqShareContent.setShareContent(content);
qqShareContent.setTargetUrl(targetUrl);
mController.setShareMedia(qqShareContent);
// 设置新浪分享内容
SinaShareContent sinaContent = new SinaShareContent();
sinaContent.setTitle(title);
sinaContent.setShareMedia(qzone_thumbImage);
sinaContent.setShareContent(content);
sinaContent.setTargetUrl(targetUrl);
mController.setShareMedia(sinaContent);
// 设置微信分享的内容
WeiXinShareContent weixinContent = new WeiXinShareContent();
weixinContent.setTitle(title);
weixinContent.setShareMedia(qzone_thumbImage);
weixinContent.setShareContent(content);
weixinContent.setTargetUrl(targetUrl);
mController.setShareMedia(weixinContent);
// 设置朋友圈分享的内容
CircleShareContent circleMedia = new CircleShareContent();
circleMedia.setTitle(title);
circleMedia.setShareMedia(qzone_thumbImage);
circleMedia.setShareContent(content);
circleMedia.setTargetUrl(targetUrl);
mController.setShareMedia(circleMedia);
// 设置短信分享内容
SmsShareContent sms = new SmsShareContent();
sms.setShareContent(content);
// sms.setShareImage(urlImage);
mController.setShareMedia(sms);
// 设置邮件分享内容, 如果需要分享图片则只支持本地图片
MailShareContent mail = new MailShareContent(qzone_thumbImage);
mail.setTitle(title);
mail.setShareContent(content);
mController.setShareMedia(mail);
}
///umeng分享End///
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mContext = this;
setContentView(bindLayout());
initMap();
initData();
initView();
initLisener();
// 配置需要分享的相关平台
configPlatforms();
// 设置分享的内容
setShareContent();
}
@Override
public void onClick(View v) {
super.onClick(v);
if(v == rl_past_bet){
Intent intent = new Intent(this, PastBetActivity.class);
startActivity(intent);
}else if(v == tv_more){
Intent intent = new Intent(this, AllBetActivity.class);
startActivity(intent);
}else if(v == tv_submit){
Intent intent = new Intent(this, PayActivity.class);
startActivity(intent);
}else if (v==past_open) {
Intent intent = new Intent(this, PastBetActivity.class);
startActivity(intent);
}else if (v==iv_share) {
toast("正在进行分享");
share();
}
}
平台SDK什么的就下载官方的直接导入就可以了。
后言:这里的分享,是很简单的入门级分享,使用的是系统的分享版,但感觉已经够用了。此部分还有第三方登陆及摇一摇等特色化插件,这个只等稍后学习到再用在学了。