Android集成友盟社會化分享功能

1.  產品概述

友盟社會化組件,可讓移動應用快速具有社會化分享、登陸、評論、喜歡等功能,並提供實時、全面的社會化數據統計分析服務。javascript

指南將會手把手教你使用社會化組件SDK,用5分鐘爲APP增長新浪微博、騰訊微博、人人網分享功能。html

注意:本文示例代碼均針對最新版SDK,若是你所用SDK的類名或方法名與此文不符合,請使用你所用SDK的隨包文檔、或者下載使用最新版SDK。java

 

2.  獲取友盟Appkey

若是你以前已經在友盟註冊了應用,並獲取到了Appkey,能夠繼續使用它.android

若是你還沒有在友盟註冊開發者帳號,須要先註冊,註冊以後登陸你的帳號,點擊**添加新應用**,填寫完應用基本信息後,將進入"下載SDK並添加代碼"頁面,此頁面便可獲得Appkeyweb

3.  下載並安裝SDK

  1. 下載SDK最新版api

  2. 添加代碼和資源引用緩存

jar文件對應列表服務器

平臺 jar文件
騰訊微博 SocialSDK_TencentWB_1.jar,SocialSDK_TencentWB_2.jar
QQ空間\QQ好友 SocialSDK_QQZone_1.jar,SocialSDK_QQZone_2.jar,SocialSDK_QQZone_3.jar
微信好友 SocialSDK_WeiXin_1.jar,SocialSDK_WeiXin_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中的一個便可解決問題。網絡

3.1  添加資源文件和jar文件有三種方式,請根據您的需求進行選擇

3.2  方法A:快速集成工具 ( 推薦 )

1:解壓SDK下載包,雙擊運行SDK根目錄下的SDKIntegration.jar或者在命令行下輸入java -jar SDKIntegration.jar運行集成工具;
2:選擇Android工程的根目錄,而且填寫您的友盟App Key;
3:勾選所需平臺和組件,點擊"快速集成";
4:檢查AndroidManifest.xml、jar文件是否正確。若是集成了QQ或者QZone,請修改相應地appid。以下圖所示:

3.3  方法B:添加工程引用(升級方便,推薦)

解壓SDK壓縮包,將文件夾中的social_sdk_library_project文件夾導入Eclipse,並在您的工程中添加對此項目的引用便可。

3.3.1  方法C:添加資源到現有項目中

解壓SDK壓縮包,將文件夾中的'main/libs'和'main/res'文件夾複製到你的項目工程根目錄下(如使用'ADT 17'如下用戶須要手動添加'libs'下的jar文件到工程Path中):

 
SDK壓縮包目錄

 

3.4  ** Manifest配置,添加友盟Appkey/Activity/權限**

<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.umeng.example" android:versionCode="1" android:versionName="1.0" > <application android:debuggable="true" android:icon="@drawable/icon" android:label="@string/app_name" android:theme="@android:style/Theme.Black.NoTitleBar" > <!-- ###################註冊SDK使用的Activity###################### --> <!--分享編輯頁--> <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> <!-- ############ 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> <!-- ###################添加UmengAppkey###################### --> <meta-data android:name="UMENG_APPKEY" android:value="xxxxxxxxxxxxxxxxxxxxxx" > </meta-data> </application> <uses-sdk android:minSdkVersion="8" /> <!-- ###################聲明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" /> </manifest> 

若是選用多種UmengSDK產品使用不一樣Appkey,可爲SocialSDK配置單獨的appkey,以下:

/*代碼添加Appkey,若是設置了非null值,SocialSDK將使用該值.*/ SocializeConstants.APPKEY = "xxxxxxxxx"; 

 

4.  打開平臺選擇面板

 

4.1  首先在您的Activity中添加以下成員變量並設置分享內容

// 首先在您的Activity中添加以下成員變量 final UMSocialService mController = UMServiceFactory.getUMSocialService("com.umeng.share"); // 設置分享內容 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);

4.2  人人網分享時,若是不設置website,點擊¨應用名稱¨或者¨圖片¨將跳轉到人人網主頁;若是設置website將跳轉到此website的頁面。

設置website的方式以下:

mController.setAppWebSite(SHARE_MEDIA.RENREN, "http://www.umeng.com/social"); 

 

4.2.1  經過某個按鈕或其餘方法彈出分享面板

mController.getConfig().removePlatform( SHARE_MEDIA.RENREN, SHARE_MEDIA.DOUBAN);
yourShareButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // 是否只有已登陸用戶才能打開分享選擇頁 mController.openShare(getActivity(), false); } }); 

 

5.  驗證效果

編譯並運行後,點擊添加分享功能的View出現以下頁面,那麼說明你已經集成成功基本的分享功能和平臺了!可是,爲了使您的用戶有更好的分享體驗,以及您的應用有更多的分享量,更好地在社交平臺上傳播,咱們建議您按照下面的指引進行SSO(免登陸)和新平臺的設置。

   
選擇分享平臺面板 分享編輯頁

 

6.  各平臺SSO(免登陸)配置

SSO名詞解釋 : SSO英文全稱Single Sign On,單點登陸。SSO是在多個應用系統中,用戶只須要登陸一次就能夠訪問全部相互信任的應用系統。
例如用戶已經登陸新浪微博客戶端,使用SSO受權登陸時則不須要用戶手動輸入用戶名、密碼,直接點擊登陸便可, 所以可成爲免登陸.

 

6.1  配置SSO受權回調

若是有使用任一平臺的SSO受權或者集成了facebook平臺, 則必須在對應的activity中實現onActivityResult方法, 並添加以下代碼

@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); /**使用SSO受權必須添加以下代碼 */ UMSsoHandler ssoHandler = mController.getConfig().getSsoHandler(requestCode) ; if(ssoHandler != null){ ssoHandler.authorizeCallBack(requestCode, resultCode, data); } } 

 

6.2  分享到微信和朋友圈

添加微信和朋友圈所依賴的jar文件
1.解壓已下載的zip文件,將platforms/weixin/libs目錄中SocialSDK_WeiXin_1.jar,SocialSDK_WeiXin_2.jar拷貝到工程的libs(若是沒有此目錄,新建libs目錄)目錄中。
2.在libs目錄中找到SocialSDK_WeiXin_1.jar,SocialSDK_WeiXin_2.jar文件,鼠標右鍵-->Add to Build Path。
3 將解壓目錄中platforms/weixin/res拷貝至你工程的res目錄。

6.3  添加以下集成代碼

String appID = "wx967daebe835fbeac"; String appSecret = "5fa9e68ca3970e87a1f83e563c8dcbce"; // 添加微信平臺 UMWXHandler wxHandler = new UMWXHandler(getActivity(),appId,appSecret); wxHandler.addToSocialSDK(); // 添加微信朋友圈 UMWXHandler wxCircleHandler = new UMWXHandler(getActivity(),appId,appSecret); wxCircleHandler.setToCircle(true); wxCircleHandler.addToSocialSDK(); 

微信和朋友圈支持純文字,純圖片(點擊查看大圖),圖文,音樂,視頻分享。
注意 
此版本兼容了微信支付的功能,請更新SocialSDK_WeiXin_1.jar文件。

6.4  微信和微信朋友圈的回調

若是在您的項目中集成了微信或者微信朋友圈,而且您須要準確的分享回調,則須要在AndroidManifest.xml中下注冊下面的回調Activity。

<activity android:name=".wxapi.WXEntryActivity" android:theme="@android:style/Theme.Translucent.NoTitleBar" android:configChanges="keyboardHidden|orientation|screenSize" android:exported="true" android:screenOrientation="portrait" /> 

而後將SDK包中platforms/weixin目錄下的wxapi文件夾拷貝到您的工程的包目錄下, 而後修改WXEntryActivity的完整路徑便可。
例如social_sdk_example的包名爲com.umeng.soexample,所以將wxapi文件夾拷貝到com.umeng.soexample下,最終WXEntryActivity的 完整路徑爲com.umeng.soexample.wxapi.WXEntryActivity。
其中分享的回調接口SnsPostListener的onComplete方法的第二個參數表明分享的狀態碼,當值爲200時表示分享成功;其他的值則爲分享失敗。

微信集成相關說明

微信集成注意如下幾點

  • 正確填寫AppID。
  • 工程的包名必須同申請應用的包名一致。
  • 在微信開放平臺填寫你App的的簽名,測試、發佈時要保證App的簽名跟微信開放平臺的簽名一致。
  • 開發者的應用須要經過審覈。開發者在申請應用必需要經過微信官網的審覈才能進行調試。

Demo中集成的微信沒法使用?

緣由:Demo中使用的微信AppID綁定的簽名信息和你打包時所用的簽名信息不一致,致使沒法響應. 解決辦法有兩個,您任選其一:

  • 申請一個測試Demo中AppID.(申請地址).
    填寫"包名"時請使用Demo的包名"com.umeng.soexample".
    填寫"簽名"使用簽名生成工具(簽名工具)生成,簽名時填寫Demo的包名.
    獲取微信AppID後替換Demo中的使用的AppID.

  • 使用SDK中的 debug.keystore編譯運行Demo工程.

 

6.5  分享給QQ好友

添加QQ分享所依賴的jar文件

  1. 解壓已下載的zip文件,將platforms/qq_zone/libs目錄中SocialSDK_QQZone_1.jar,SocialSDK_QQZone_2.jar,SocialSDK_QQZone_3.jar拷貝到工程的libs(若是沒有此目錄,新建libs目錄)目錄中。

  2. 在libs目錄中找到SocialSDK_QQZone_1.jar,SocialSDK_QQZone_2.jar,SocialSDK_QQZone_3.jar文件,鼠標右鍵-->Add to Build Path。

  3. 將解壓目錄中platforms/qq_zone/res文件拷貝至你工程res目錄。

  4. 在AndroidManifest.xml中註冊AuthActivity,QQ空間和QQ共用該受權Activity,具體配置參考上文的AndroidManifest.xml文件。

6.6  添加以下集成代碼

//參數1爲當前Activity,參數2爲開發者在QQ互聯申請的APP ID,參數3爲開發者在QQ互聯申請的APP kEY. UMQQSsoHandler qqSsoHandler = new UMQQSsoHandler(getActivity(), "100424468", "c7394704798a158208a74ab60104f0ba"); qqSsoHandler.addToSocialSDK(); 

注意:

1.此版本集成了QQ的最新jar文件,請更新SocialSDK_QQZone_1.jar,SocialSDK_QQZone_2.jar,SocialSDK_QQZone_3.jar文件.

2.QQ分享內容爲音樂,視頻的時候,其形式必須爲url;圖片支持url和本地圖片類型.

3.QQ SSO受權不會在onActivityResult方法內被調用。

4.未安裝手機QQ客戶端的狀況下,QQ不支持純圖片分享.

5.未安裝手機QQ客戶端的狀況下,QQ取消受權不執行相關回調。

6.QQ和QQ空間受權,對於同一個應用同一個帳號返回的uid,openid相同。

 

6.7  SSO(免登陸)分享到QQ空間

6.7.1  添加QQ空間所依賴的jar文件跟資源文件

若是已經添加了SocialSDK_QQZone_1.jar,SocialSDK_QQZone_2.jar,SocialSDK_QQZone_3.jar文件,則不須要再次添加。

1.解壓已下載的zip文件,將platforms/qq_qzone/libs中 SocialSDK_QQZone_1.jar,SocialSDK_QQZone_2.jar,SocialSDK_QQZone_3. jar拷貝到工程的libs(若是沒有此目錄,新建libs目錄)目錄中。

2.在libs目錄中找到SocialSDK_QQZone_1.jar,SocialSDK_QQZone_2.jar,SocialSDK_QQZone_3.jar文件,鼠標右鍵-->Add to Build Path。

3.將解壓目錄中platforms/qq_zone/res文件拷貝至你工程res目錄。

4.在AndroidManifest.xml中註冊AuthActivity,QQ空間和QQ共用該受權Activity,具體配置參考上文的AndroidManifest.xml文件。

6.7.2  在集成代碼中添加以下代碼

//參數1爲當前Activity,參數2爲開發者在QQ互聯申請的APP ID,參數3爲開發者在QQ互聯申請的APP kEY. QZoneSsoHandler qZoneSsoHandler = new QZoneSsoHandler(getActivity(), "100424468", "c7394704798a158208a74ab60104f0ba"); qZoneSsoHandler.addToSocialSDK(); 

注意:

1.本次集成了QZone的最新jar包,升級時請注意更新SocialSDK_QQZone_1.jar,SocialSDK_QQZone_2.jar,SocialSDK_QQZone_3.jar文件。
2.在進行QZone SSO受權時,請在AndroidManifest.xml中配置相應的Activity。具體參加上文AndroidManifest.xml文件配置。
3.QZone不支持純圖片分享。
4.無手機QQ客戶端的狀況下,QQ取消受權不執行相關回調。
5.QQ和QQ空間受權,對於同一個應用同一個帳號返回的uid,openid相同。

 

6.8  SSO(免登陸)分享到新浪微博

注意必定保證在新浪微博上填寫應用簽名,參考文檔

6.8.1  1.添加SSO必須的文件

將platforms/sina/libs中的SocialSDK_Sina.jar添加到工程libs中並將該jar加入到build path中, 因爲4.2版本將remoteSSO文件打入SocialSDK_Sina.jar中,所以老版本升級過程當中須要刪除舊版本中的remoteSSO文件,不然會出現文件衝突

6.8.2  在代碼中添加以下代碼

//設置新浪SSO handler mController.getConfig().setSsoHandler(new SinaSsoHandler()); 

 

6.9  SSO(免登陸)分享到騰訊微博

添加騰訊微博SSO所依賴的jar文件
1.解壓已下載的zip文件,將platforms/tencentweibo/libs中SocialSDK_tencentWB_1.jar,SocialSDK_tencentWB_2.jar,,SocialSDK_tencentWB_3.jar拷貝到工程的libs(若是沒有此目錄,新建libs目錄)目錄中.
2.在libs目錄中找到SocialSDK_tencentWB_1.jar,SocialSDK_tencentWB_2.jar,,SocialSDK_tencentWB_3.jar文件,鼠標右鍵-->Add to Build Path.

在集成代碼中添加以下代碼

//設置騰訊微博SSO handler mController.getConfig().setSsoHandler(new TencentWBSsoHandler()); 

注意:

1.手機中必須安裝微博客戶端V3.8.1及以上的版本才支持SSO功能.
2.騰訊微博的SSO沒有回調。因爲騰訊微博SSO沒有提供回調,所以騰訊微博SSO不會在onActivityResult方法內被調用(騰訊微博受權流程不通過onActivityResult方法).

 

6.10  SSO(免登陸)分享到人人

添加人人SSO所依賴的jar文件 1.解壓已下載的zip文件,將platforms/renren/libs/SocialSDK_renren_1.jar,SocialSDK_renren_2.jar,拷貝到你工程libs目錄中。
2.在libs工程找到SocialSDK_renren_1.jar,SocialSDK_renren_2.jar文件,鼠標右鍵-->Add to Build Path。

在集成代碼中添加以下代碼

//添加人人網SSO受權功能 //APPID:201874 //API Key:28401c0964f04a72a14c812d6132fcef //Secret:3bf66e42db1e4fa9829b955cc300b737 RenrenSsoHandler renrenSsoHandler = new RenrenSsoHandler(getActivity(), "201874", "28401c0964f04a72a14c812d6132fcef", "3bf66e42db1e4fa9829b955cc300b737"); mController.getConfig().setSsoHandler(renrenSsoHandler); 

在SDK中的OAuth受權部分包含了Activity,爲了程序能正常容許,請將如下Activity信息在您的應該工程Androidmanefest.xml中註冊:

<activity android:name="com.renn.rennsdk.oauth.OAuthActivity" android:configChanges="orientation|navigation|keyboardHidden"/> 
而後添加以下權限 :
<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" /> 

注意

1.手機中必須安裝人人客戶端V5.9.3及以上的版本才支持SSO功能。
2.因爲人人SSO沒有提供回調,所以人人SSO不會在onActivityResult方法內被調用(人人SSO受權流程不通過onActivityResult方法)。

 

7.  微信簽名說明

因爲微信的簽名過程跟驗證流程較多,出錯的可能性較大,這裏將對微信的簽名過程跟驗證作詳細的說明。

7.1  獲取簽名文件

獲取應用簽名方式有兩種 方式一:
1:用eclipse導出 帶簽名 的apk文件,注意此時選擇的簽名文件是你發佈app時的簽名文件。在導出的最後一步,eclipse會顯示一個Certificate fingerprints(證書指紋),以下圖。此時找到MD5值,將該MD5值複製出來,按照「 去掉冒號(:),大寫轉小寫 」的規則裝換,此時字符串就是簽名。

 
經過eclispe獲取簽名

方式二:
導出 帶簽名 的apk文件,將該apk文件安裝至手機中。安裝微信的簽名工具,打開GenSignature應用程序,填寫你App的包名,點擊「Get Signature」便可獲得簽名。

 
經過微信簽名工具獲取簽名

7.2  請在微信開放平臺申請應用

1:填寫App的相關信息,注意確保包名跟簽名填寫正確,填寫完成提交微信審覈。

7.3  微信集成測試

1:在進行微信集成測試時,請填寫你申請App的AppID。測試時須要導出帶簽名的apk文件測試,不然將不能正常分享。

 

8.  應用信息註冊地址列表

下面是Social SDK不一樣平臺應用信息註冊網站的地址:

平臺 網址
新浪微博 http://open.weibo.com
騰訊微博 http://dev.t.qq.com
QQ空間 http://open.qq.com/
微信好友 http://open.weixin.qq.com
FaceBook https://developers.facebook.com
人人 http://dev.renren.com
豆瓣 http://developers.douban.com/

 

9.  混淆

爲了保證引用友盟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.modelmsg.WXMediaMessage {*;} -keep class com.tencent.mm.sdk.modelmsg.** implements com.tencent.mm.sdk.modelmsg.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 *; } 
相關文章
相關標籤/搜索