友盟社會化組件,可讓移動應用快速具有社會化分享、登陸、評論、喜歡等功能,並提供實時、全面的社會化數據統計分析服務。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 *; }