友盟社会化组件,可让移动应用快速具有社会化分享、登陆、评论、喜欢等功能,并提供实时、全面的社会化数据统计分析服务。html
指南将会手把手教你使用社会化组件SDK,用5分钟为APP增长新浪微博、腾讯微博、人人网分享功能。java
注意:本文示例代码均针对最新版SDK,若是你所用SDK的类名或方法名与此文不符合,请使用你所用SDK的随包文档、或者下载使用最新版SDK。android
若是你以前已经在友盟注册了应用,并获取到了Appkey,能够继续使用它.web
若是你还没有在友盟注册开发者帐号,须要先注册,注册以后登陆你的帐号,点击**添加新应用**,填写完应用基本信息后,将进入"下载SDK并添加代码"页面,此页面便可获得Appkey
。api
jar文件对应列表服务器
平台 | jar文件 |
---|---|
腾讯微博 | SocialSDK_TencentWB_1.jar,SocialSDK_TencentWB_2.jar |
QQ空间 | SocialSDK_QQZone_1.jar,SocialSDK_QQZone_2.jar |
微信好友 | SocialSDK_WeiXin.jar |
SocialSDK_QQZone_1.jar,SocialSDK_QQZone_2.jar |
注意微信
1:QQ和QQ Zone SSO(免登陆)引用的jar文件相同。当须要同时支持QQ和QQ Zone的时候,只需添加一次SocialSDK_QQZone_1.jar,SocialSDK_QQZone_2.jar文件便可.
2:因为咱们对微信的包名作了修改(libammsdk.jar -> SocialSDK_WeiXin.jar),如出现"Unable to execute dex: Multiple dex files define "问题,请删除libammsdk.jar或者SocialSDK_WeiXin.jar中的一个便可解决问题。微信开发
解压SDK压缩包,将文件夹中的social_sdk_library_project文件夹导入Eclipse,并在您的工程中添加对此项目的引用便可。app
解压SDK压缩包,将文件夹中的'libs'和'res'文件夹复制到你的项目工程根目录下(如使用'ADT 17'如下用户须要手动添加'libs'下的jar文件到工程Path中):ide
<</FONT>application android:debuggable="true" android:icon="@drawable/icon" android:label="@string/app_name" android:theme="@android:style/Theme.Black.NoTitleBar" > <</FONT>activity android:name=".UmengHome" android:label="@string/app_name" > <<SPAN class="title" >intent-filter> <<SPAN class="title" >action android:name="android.intent.action.MAIN" /> <<SPAN class="title" >category android:name="android.intent.category.LAUNCHER" /> </<SPAN class="title" >intent-filter> </<SPAN class="title" >activity> <</FONT>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" > </<SPAN class="title" >activity> <</FONT>activity android:name="com.tencent.tauth.AuthActivity" android:launchMode="singleTask" android:noHistory="true" > <<SPAN class="title" >intent-filter> <<SPAN class="title" >action android:name="android.intent.action.VIEW" /> <<SPAN class="title" >category android:name="android.intent.category.DEFAULT" /> <<SPAN class="title" >category android:name="android.intent.category.BROWSABLE" /> <<SPAN class="title" >data android:scheme="tencent100424468" /> </<SPAN class="title" >intent-filter> </<SPAN class="title" >activity> <<SPAN class="title" >activity android:name="com.tencent.plus.ImageActivity" /> <<SPAN class="title" >activity android:name="com.tencent.connect.common.AssistActivity" android:theme="@android:style/Theme.Translucent.NoTitleBar" android:screenOrientation="portrait"> </<SPAN class="title" >activity> <</FONT>meta-data android:name="UMENG_APPKEY" android:value="xxxxxxxxxxxxxxxxxxxxxx" > </<SPAN class="title" >meta-data> </<SPAN class="title" >application> <<SPAN class="title" >uses-sdk android:minSdkVersion="8" /> <<SPAN class="title" >uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <<SPAN class="title" >uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <<SPAN class="title" >uses-permission android:name="android.permission.READ_PHONE_STATE" /> <<SPAN class="title" >uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <<SPAN class="title" >uses-permission android:name="android.permission.INTERNET" /> <<SPAN class="title" >uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <<SPAN class="title" >uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> </<SPAN class="title" >manifest> <<SPAN class="title" >manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.umeng.example" android:versionCode="1" android:versionName="1.0" >
若是选用多种UmengSDK产品使用不一样Appkey,可为SocialSDK配置单独的appkey,以下:
SocializeConstants.APPKEY = "xxxxxxxxx";
// 首先在您的Activity中添加以下成员变量 final UMSocialService mController = UMServiceFactory.getUMSocialService("com.umeng.share", RequestType.SOCIAL); // 设置分享内容 mController.setShareContent("友盟社会化组件(SDK)让移动应用快速整合社交分享功能,http://www.umeng.com/social"); // 设置分享图片, 参数2为图片的url地址 mController.setShareMedia(new UMImage(getActivity(), "http://www.umeng.com/images/pic/banner_module_social.png")); // 设置分享图片,参数2为本地图片的资源引用 //mController.setShareMedia(new UMImage(getActivity(), R.drawable.icon)); // 设置分享图片,参数2为本地图片的路径(绝对路径) //mController.setShareMedia(new UMImage(getActivity(), // BitmapFactory.decodeFile("/mnt/sdcard/icon.png"))); // 设置分享音乐 //UMusic uMusic = new UMusic("http://sns.whalecloud.com/test_music.mp3"); //uMusic.setAuthor("GuGu"); //uMusic.setTitle("天籁之音"); // 设置音乐缩略图 //uMusic.setThumb("http://www.umeng.com/images/pic/banner_module_social.png"); //mController.setShareMedia(uMusic); // 设置分享视频 //UMVideo umVideo = new UMVideo( // "http://v.youku.com/v_show/id_XNTE5ODAwMDM2.html?f=19001023"); // 设置视频缩略图 //umVideo.setThumb("http://www.umeng.com/images/pic/banner_module_social.png"); //umVideo.setTitle("友盟社会化分享!"); //mController.setShareMedia(umVideo);
设置website的方式以下:
mController.setAppWebSite(SHARE_MEDIA.RENREN, "http://www.umeng.com/social");
mController.getConfig().removePlatform( SHARE_MEDIA.RENREN, SHARE_MEDIA.DOUBAN); yourShareButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // 是否只有已登陆用户才能打开分享选择页 mController.openShare(getActivity(), false); } });
编译并运行后,点击添加分享功能的View出现以下页面,那么说明你已经集成成功基本的分享功能和平台了!可是,为了使您的用户有更好的分享体验,以及您的应用有更多的分享量,更好地在社交平台上传播,咱们建议您按照下面的指引进行SSO(免登陆)和新平台的设置。
![]() |
![]() |
选择分享平台面板 | 分享编辑页 |
SSO名词解释 : SSO英文全称Single Sign On,单点登陆。SSO是在多个应用系统中,用户只须要登陆一次就能够访问全部相互信任的应用系统。
例如用户已经登陆新浪微博客户端,使用SSO受权登陆时则不须要用户手动输入用户名、密码,直接点击登陆便可, 所以可成为免登陆.
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); UMSsoHandler ssoHandler = mController.getConfig().getSsoHandler(requestCode) ; if(ssoHandler != null){ ssoHandler.authorizeCallBack(requestCode, resultCode, data); } }
1.解压已下载的SDK.zip文件,将SocialSDK_WeiXin.jar拷贝到工程的libs(若是没有此目录,新建libs目录)目录中.
2.在libs目录中找到SocialSDK_WeiXin.jar文件,鼠标右键-->Add to Build Path.
// wx967daebe835fbeac是你在微信开发平台注册应用的AppID, 这里须要替换成你注册的AppID String appID = "wx967daebe835fbeac"; // 微信图文分享必须设置一个url String contentUrl = "http://www.umeng.com/social"; // 添加微信平台,参数1为当前Activity, 参数2为用户申请的AppID, 参数3为点击分享内容跳转到的目标url UMWXHandler wxHandler = mController.getConfig().supportWXPlatform(getActivity(),appID, contentUrl); //设置分享标题 wxHandler.setWXTitle("友盟社会化组件很不错"); // 支持微信朋友圈 UMWXHandler circleHandler = mController.getConfig().supportWXCirclePlatform(getActivity(),appID, contentUrl) ; circleHandler.setCircleTitle("友盟社会化组件还不错...");
微信和朋友圈支持纯文字,纯图片(点击查看大图),图文,音乐,视频分享。
注意
此版本兼容了微信支付的功能,请更新SocialSDK_WeiXin.jar文件。
若是在您的项目中集成了微信或者微信朋友圈,而且您须要准确的分享回调,则须要在AndroidManifest.xml中下注册下面的回调Activity。
<</FONT>activity android:name=".wxapi.WXEntryActivity" android:theme="@android:style/Theme.Translucent.NoTitleBar" android:configChanges="keyboardHidden|orientation|screenSize" android:exported="true" android:screenOrientation="portrait" />
而后将SDK包中weixin目录下的wxapi文件夹拷贝到您的工程的包目录下, 而后修改WXEntryActivity的完整路径便可。
例如social_sdk_example的包名为com.umeng.soexample,所以将wxapi文件夹拷贝到com.umeng.soexample下,最终WXEntryActivity的 完整路径为com.umeng.soexample.wxapi.WXEntryActivity。
其中分享的回调接口SnsPostListener的onComplete方法的第二个参数表明分享的状态码,当值为200时表示分享成功;其他的值则为分享失败。
微信集成相关说明
1.微信集成注意如下几点
正确填写AppID.
工程的包名必须同申请应用的包名一致。
开发者的应用须要经过审核。开发者在申请应用必需要经过微信官网的审核才能进行调试.
2.Demo中集成的微信没法使用?
缘由:Demo中使用的微信AppID绑定的签名信息和你打包时所用的签名信息不一致,致使没法响应. 解决办法有两个,您任选其一:
//为了不每次都从服务器获取APP ID、APP KEY,请设置APP ID跟APP KEY。 //参数1为当前Activity, 参数2为开发者在QQ互联申请的APP ID, //参数3为开发者在QQ互联申请的APP kEY,参数4为点击分享nerve跳转的URL地址 mController.getConfig().supportQQPlatform(getActivity(),"APP ID","APP KEY","http://www.umeng.com/social");
注意:
1.此版本集成了QQ的最新jar文件,请更新SocialSDK_QQZone_1.jar,SocialSDK_QQZone_2.jar文件。
2.QQ分享内容为音乐,视频的时候,其形式必须为url;图片支持url和本地图片类型。
3.QQ SSO受权不会在onActivityResult方法内被调用。
4.未安装手机QQ客户端的状况下,QQ不支持纯图片分享。
5.未安装手机QQ客户端的状况下,QQ取消受权不执行相关回调。
6.QQ和QQ空间受权,对于同一个应用同一个帐号返回的uid,openid相同。 7.为了防止QQ受权出现不可预测的问题,请保证添加QQ平台只执行一次(只调用一次mController.getConfig().supportQQPlatform)!
若是已经添加了SocialSDK_QQZone_1.jar,SocialSDK_QQZone_2.jar文件,则不须要再次添加.
1. 解压已下载的SocialSDK.zip文件,SocialSDK_QQZone_1.jar,SocialSDK_QQZone_2.jar拷贝到工程的libs(若是没有此目录,新建libs目录)目录中.
2. 在libs目录中找到SocialSDK_QQZone_1.jar,SocialSDK_QQZone_2.jar文件,鼠标右键-->Add to Build Path.
3. 在AndroidManifest.xml中注册AuthActivity,QQ空间和QQ共用该受权Activity,具体配置参考上文的AndroidManifest.xml文件.
4. 请在QQ互联填写签名:移动应用信息->平台信息->apk签名.(签名地址)
//为了不每次都从服务器获取APP ID、APP KEY,请设置APP ID跟APP KEY mController.getConfig().setSsoHandler( new QZoneSsoHandler(Activity activity, "APP ID", "APP KEY") );
注意:
1.本次集成了QZone的最新jar包,升级时请注意更新SocialSDK_QQZone_1.jar,SocialSDK_QQZone_2.jar文件。
2.在进行QZone SSO受权时,请在AndroidManifest.xml中配置相应的Activity。具体参加上文AndroidManifest.xml文件配置。
3.QZone不支持纯图片分享。
4.无手机QQ客户端的状况下,QQ取消受权不执行相关回调。
5.QQ和QQ空间受权,对于同一个应用同一个帐号返回的uid,openid相同。
//设置新浪SSO handler mController.getConfig().setSsoHandler(new SinaSsoHandler());
1.解压已下载的SocialSDK.zip文件,将SocialSDK_tencentWB_1.jar,SocialSDK_tencentWB_2.jar拷贝到工程的libs(若是没有此目录,新建libs目录)目录中.
2.在libs目录中找到SocialSDK_tencentWB_1.jar,SocialSDK_tencentWB_2.jar文件,鼠标右键-->Add to Build Path.
//设置腾讯微博SSO handler mController.getConfig().setSsoHandler(new TencentWBSsoHandler());
注意:
1.手机中必须安装微博客户端V3.8.1及以上的版本才支持SSO功能.
2.腾讯微博的SSO没有回调。因为腾讯微博SSO没有提供回调,所以腾讯微博SSO不会在onActivityResult方法内被调用(腾讯微博的流程不通过onActivityResult方法).
下面是Social SDK不一样平台应用信息注册网站的地址:
平台 | 网址 |
---|---|
新浪微博 | http://open.weibo.com |
腾讯微博 | http://dev.t.qq.com |
QQ空间 | http://connect.qq.com/intro/login/ |
微信好友 | http://open.weixin.qq.com |
https://developers.facebook.com | |
https://dev.twitter.com | |
人人 | http://dev.renren.com |
豆瓣 | http://developers.douban.com/ |
为了保证引用友盟Social SDK jar文件以及腾讯jar文件被混淆,请在proguard.cfg文件中添加如下代码避免被混淆.
-dontshrink -dontoptimize -dontwarn com.google.android.maps.** -dontwarn android.webkit.WebView -dontwarn com.umeng.** -dontwarn com.tencent.weibo.sdk.** -dontwarn com.facebook.** -libraryjars libs/SocialSDK_QQZone_2.jar -keep enum com.facebook.** -keepattributes Exceptions,InnerClasses,Signature -keepattributes *Annotation* -keepattributes SourceFile,LineNumberTable -keep public interface com.facebook.** -keep public interface com.tencent.** -keep public interface com.umeng.socialize.** -keep public interface com.umeng.socialize.sensor.** -keep public interface com.umeng.scrshot.** -keep public class com.umeng.socialize.* {*;} -keep public class javax.** -keep public class android.webkit.** -keep class com.facebook.** -keep class com.umeng.scrshot.** -keep public class com.tencent.** {*;} -keep class com.umeng.socialize.sensor.** -keep class com.tencent.mm.sdk.openapi.WXMediaMessage {*;} -keep class com.tencent.mm.sdk.openapi.** implements com.tencent.mm.sdk.openapi.WXMediaMessage$IMediaObject {*;} -keep class im.yixin.sdk.api.YXMessage {*;} -keep class im.yixin.sdk.api.** implements im.yixin.sdk.api.YXMessage$YXMessageData{*;} -keep public class [your_pkg].R$*{ public static final int *; }