在Android中使App快速 簡單地支援新浪微博 微信 QQ facebook等十幾個主流社交平臺的分享功能
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow
也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!
前言
在現在的APP或者遊戲中,分享功能幾乎已經成為標配。分享功能不但能夠滿足使用者的需求,也能夠為產品帶來更多的使用者,甚至可以對使用者的行為、活躍度、年齡段等情況進行資料統計,使得軟體公司可以對產品進行更精準的定位。今天我們就來簡單剖析市場上一款優秀的分享SDK以及其整合過程,這款分享SDK就是友盟的社會化分享元件。
友盟社會化分享,幫助移動應用快速具備分享、登入、評論、喜歡等社交功能,提升使用者粘度、助力產品推廣,並提供實時、全面的社會化資料統計分析服務。
更多請訪問友盟社會化元件官網。
基本概念
根據友盟的整合文件,我們對於友盟社會化分享SDK的操作主要是通過UMSocialService介面來進行操作,一些相關的配置則需要通過SocialzieConfig類來進行配置,這個配置類通過UMSocialService的getConfig()函式來獲得。在友盟社會化分享SDK中一個社交平臺通過SHARE_MEDIA列舉來標識,比如新浪微博就是SHARE_MEDIA.SINA,微信就是SHARE_MEDIA.WEIXIN。通過這個平臺列舉我們就知道了使用者是要將內容分享到哪個社交平臺,至於為什麼是用列舉,我想可能是因為老程式碼的遺留問題吧。而為了增強平臺的可擴充套件性,友盟又增加了一個UMSsoHandler
因此,我們得到如下幾張結構圖:
圖1
從圖1中可以看出,SDK的核心控制類中含有一個配置類,該配置類管理SDK中的各個社交平臺,因此如果我們要支援分享到某個平臺,必須將該平臺新增到SDK的配置類中。如果不需要某個平臺,就將該平臺從SDK配置類中刪除即可。
圖2 圖3
圖2和圖3分別是授權和分享的基本流程。對於授權來說,如果該平臺只有webview授權,那麼就是用webview進行授權。如果該平臺既支援webview授權又支援SSO授權 ( 即通過客戶端來授權 ),在使用者沒有配置SSO授權的情況下是用webview授權,否則是用SSO授權。如果該平臺只是SSO授權,那麼在客戶端的版本支援的情況就會是用SSO授權。而SSO授權都是通過UMSsoHandler這個類來進行操作的。再看圖3,分享也是兩個分支,即通過API進行分享和通過社交平臺客戶端分享,例如豆瓣只支援API分享,而微信只支援通過客戶端進行分享。通過客戶端進行分享也是通過UMSsoHandler這個類。
總結一下:
SDK中含有配置類,配置類管理各個社交平臺。當用戶要把內容分享到某個社交平臺時,SDK內部進行處理,如果是通過API分享,那麼直接底層分享。如果是通過客戶端分享,那麼通過平臺找到對應的UMSsoHandler物件,然後再通過UMSsoHandler的相應方法跳轉到社交平臺或者IM軟體的客戶端進行分享。授權也是同樣的原理。
整合過程
下面,我們就以新浪微博為例來講解一下整合過程。
首先到新浪微博開放平臺中建立一個新的應用,新浪微博開放平臺。
圖 4
然後填寫應用的相關資訊後會進入到APP詳細資訊的配置頁面。如下圖所示:
圖 5
在這裡主要配置的是應用的包名和簽名。應用的包名在AndroidManifest.xml中檢視,package屬性的值就是。
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.sharedemo" android:versionCode="1" android:versionName="1.0" >
應用簽名即是應用的keystore的MD5值,但也不一定,比如facebook的簽名就是keystore的SHA1加上分號,然後再加上應用包名。這裡我們只講解新浪微博的設定,我們可以通過eclipse檢視應用的簽名。如下圖 :
圖6
下圖中的MD5 fingerprint的值就是我們的APP簽名,這個值不是直接填寫到新浪開發平臺官網的,而是需要將冒號去掉,並且將字母轉換為小寫。如上圖5所示。然後填寫完其它的資訊,提交稽核即可。此時,我們就有了新浪微博的app id和app key了。
通過稽核我們可以到友盟官網建立應用並且繫結新浪微博的app id和app key了。如圖7.
圖 7
此時,我們就可以在工程中整合友盟社會化分享元件SDK了。
首先,下載SDK並且解壓縮SDK。SDK目錄如下。
圖8
其中main資料夾下的為核心sdk的jar和資源,將jar包拷貝到libs目錄下,並且新增到編譯路徑中,然後將res目錄下的資源拷貝到你工程中對應的目錄下即可。platforms目錄下即為各個社交平臺的jar包和資源。SDK預設添加了新浪微博、豆瓣、人人網、騰訊微博這幾個平臺,其他平臺需要手動新增jar包、資源 ( 存放在platforms中對應的目錄中 ),然後手寫程式碼新增到SDK中。
圖9
先看上圖9 的左邊,確保你所需要的jar包和資源都拷貝進了對應的目錄,然後看右邊的程式碼。首先宣告一個UMSocialService的物件,這個物件就是整個SDK的控制器,通過這個控制器我們可以進行授權、分享等操作。我們通過相應的方法設定分享內容,然後設定各個平臺在分享面板上的顯示順序( 不是必須 ), 最後我們在一個按鈕的點選事件中呼叫了UMSocialService的openShare(context, listener)方法,這個方法就是開啟分享面板。使用者點選這個面板上的平臺時就會將分享內容分享到這個平臺( 如果沒有授權則需要先授權一次 )。
最後,不要忘了將你獲取到的友盟appkey等資訊配置AndroidManifest.xml。配置AndroidManifest.xml參考友盟文件,友盟社會化元件文件。
執行程式後,會得到如下的效果圖。點選某個平臺就可以進行授權,然後分享。
效果圖
圖10 圖11
新增其他社交平臺
在最新版的SDK中預設只添加了新浪微博、騰訊微博、豆瓣、人人網這四個平臺,但是友盟社會化元件還支援微信、微信朋友圈、QQ、QQ空間、facebook、instagram、pinterest、來往、易信等十幾個平臺,其他的平臺請參考友盟社會化元件官網。如果我們要使用除了預設四個平臺的其他平臺,那麼需要我們手動新增到SDK中。下面我們就來演示如果將微信和微信朋友圈新增到SDK中。 首先將SDK解壓縮包中Platforms/weixin目錄下的Libs目錄和res目錄下的相關檔案拷貝到工程目錄下對應的資料夾中,然後通過程式碼 把相關平臺新增到SDK中,程式碼如下 : // 微信平臺 UMWXHandler wxHandler = new UMWXHandler(getActivity(), "你的微信app id", "你的微信 app secret") ; wxHandler.addToSocialSDK(); // 微信朋友圈平臺, 與微信共用一個app id, app secret UMWXHandler circleHandler = new UMWXHandler(getActivity(), "你的微信app id", "你的微信 app secret") ; circleHandler.setToCircle(true); circleHandler.addToSocialSDK();
上面 的微信app id和app secret都需要到微信開放平臺申請,這一步最為麻煩,這裡需要建立你的應用,然後填寫應用的包名和MD5簽名(針對於Android平臺),注意,這裡的包名和簽名一定不能錯,而且測試的時候要檢查你安裝後的apk的簽名和你填寫時候的簽名是否一致,有的情況下我們使用eclipse自帶的keystore來測試,打包的時候又成了別的keystore,這樣就導致了簽名不一致的情況,因此一定要注意簽名的正確性問題。如果簽名和包名有錯誤,那麼你在使用app id和app secret來進行分享時則無法調出微信或者微信朋友圈的分享介面。出現這種情況你就需要複查你的apk的簽名和包名是否與微信開放平臺上填寫的一致了。如果資訊填寫無誤,那麼提交稽核即可。稽核成功後即可進行分享。 圖12 然後把壓縮包中的Platforms/Android/weixin目錄下的wxapi放到你的根包的目錄下,例如我的工程的包名為 com.example.sharedemo,那麼wxapi的路徑就是com.example.sharedemo.wxapi。這一點不能錯,否則微信分享可能無法成功。如圖:
圖13 然後在AndroidManafest.xml中註冊微信的這個 WXEntryActivity,如下 :
<activity android:name=".wxapi.WXEntryActivity" android:theme="@android:style/Theme.Translucent.NoTitleBar" android:configChanges="keyboardHidden|orientation|screenSize" android:exported="true" android:screenOrientation="portrait" />
這樣,整合就完成了。但是想要成功分享還得微信開放平臺的稽核通過,這需要一些時間,因此為了節省時間,填寫包名和簽名時儘量保證沒有問題。稽核通過後,即可分享成功。
圖14 這樣微信和微信朋友圈就整合成功了。
其他的平臺整合也是這麼一個步驟。 1、到對應的開放平臺建立應用; 2、如果需要填寫簽名和包名,那麼填寫這些資訊; 3、拿到應用的app id, app secret( 有的是 app key )等資訊,填寫到友盟對應的Handler中,例如UMWXHandler。 4、呼叫handler的addToSocialSDK()方法將平臺新增到SDK中; 5、在AndroidManifest.xml中註冊Activity等,使得分享時可以跳轉到目標activity中。
自定義平臺
如果友盟社會化分享元件中沒有你想要的平臺,那麼你可以把自己的平臺新增到友盟的SDK中,整個過程也很簡單。示例如下 : // 構造平臺,引數1為平臺名字,引數2為平臺圖示 CustomPlatform myCustomPlatform = new CustomPlatform("我的平臺", R.drawable.ic_launcher); // 平臺點選事件處理 myCustomPlatform.mClickListener = new OnSnsPlatformClickListener() { @Override public void onClick(Context arg0, SocializeEntity arg1, SnsPostListener arg2) { // 在這裡處理平臺的點選事件,一般為呼叫目標設計平臺的分享或者授權方法. } }; // 將平臺新增到SDK中 mController.getConfig().addCustomPlatform(myCustomPlatform);
這樣就新增成功了。注意,此時如果你需要設定各個平臺在分享面板中的順序,那麼你就不要使用
mController.getConfig().setPlatforms(SHARE_MEDIA.SINA, SHARE_MEDIA.TENCENT, SHARE_MEDIA.DOUBAN, SHARE_MEDIA.RENREN)
這種方式來進行排序了,因為你有了自定義平臺,通過上面的設定方法的話自定義平臺則無法顯示在分享面板上。此時,應該使用如下方法。
mController.getConfig().setPlatforms(SHARE_MEDIA.SINA.toString(), SHARE_MEDIA.TENCENT.toString(),, SHARE_MEDIA.DOUBAN.toString(),"我的平臺" ) ;
效果如下 :
圖15
總結
看似整個過程比較的複雜,其實這也都是各個設計平臺為了使用者資訊的安全所設定的一些安全機制導致的。例如應用的包名和簽名、稽核機制等,這些機制導致了整合的失敗率大大增加。而各個平臺的申請、介面不一致也導致了SDK設計上存在一些不合理的問題。總的來說,友盟社會化元件還是不錯的,包含了目前的主流平臺,即使沒有包含你所需要的平臺也可以通過自定義平臺來實現,這樣就保證了擴充套件性。 整合時只要遵循如下順序則失敗率會大大減小:1、到各個平臺的開發平臺申請應用,獲得app id, app key等資訊,如果要填寫包名和簽名時千萬要保證正確性,否則會消耗很多時間在上面; 2、得到app id, app key等資訊到友盟官網看看該平臺是否需要繫結這些資訊,一般來說通過客戶端分享的平臺都不需要繫結,例如微信;而通過api進行分享的基本上都需要繫結,例如人人網、新浪等; 3、將平臺新增到sdk中(通過各種友盟的Handler); 4、在AndroidManifest.xml中註冊許可權或者activity。
圖16