快捷分享是ShareSDK提供的壹套基於其接口的GUI。通過簡單的配置,可以在不考慮ShareSDK具體分享操作的情況下,調用很少的代碼,就完成分享操作。
快捷分享有編輯界面和沒有編輯界面,可以彈出編輯界面需要具備兩個條件:
第壹:不是使用分享平臺的客戶端進行分享
第二:不是自定義分享平臺
可以修改代碼進行自定義規則
代碼配置
集成快捷分享的步驟可以參考導入SDK章節的說明。下面主要介紹如何調用快捷分享:
1)首先也是最重要的,和直接調用接口壹樣,需要在啟動快捷分享前,添加initSDK的代碼。
2)在您準備觸發分享的地方(如OnClick方法裏面),添加如下代碼:
public void showOnekeyshare ( String platform, boolean silent ) {
OnekeyShare oks = new OnekeyShare ( ) ;
// 分享時Notification的圖標和文字
oks. setNotification (R. drawable. ic_launcher,
getContext ( ). getString (R. string. app_name ) ) ;
// address是接收人地址,僅在信息和郵件使用
oks. setAddress ( "12345678901" ) ;
// title標題,印象筆記、郵箱、信息、微信、人人網和QQ空間使用
oks. setTitle (getContext ( ). getString (R. string. share ) ) ;
// titleUrl是標題的網絡鏈接,僅在人人網和QQ空間使用
oks. setTitleUrl ( "" ) ;
// text是分享文本,所有平臺都需要這個字段
oks. setText (getContext ( ). getString (R. string. share_content ) ) ;
// imagePath是圖片的本地路徑,Linked-In以外的平臺都支持此參數
oks. setImagePath (MainActivity. TEST_IMAGE ) ;
// imageUrl是圖片的網絡路徑,新浪微博、人人網、QQ空間、
// 微信的兩個平臺、Linked-In支持此字段
oks. setImageUrl ("/imgs/sharesdk/content/2013/07/25/1374723172663.jpg" ) ;
// url僅在微信(包括好友和朋友圈)中使用
oks. setUrl ( "" ) ;
// appPath是待分享應用程序的本地路勁,僅在微信中使用
oks. setAppPath (MainActivity. TEST_IMAGE ) ;
// comment是我對這條分享的評論,僅在人人網和QQ空間使用
oks. setComment (getContext ( ). getString (R. string. share ) ) ;
// site是分享此內容的網站名稱,僅在QQ空間使用
oks. setSite (context. getString (R. string. app_name ) ) ;
// siteUrl是分享此內容的網站地址,僅在QQ空間使用
oks. setSiteUrl ( "" ) ;
// venueName是分享社區名稱,僅在Foursquare使用
oks. setVenueName ( "Southeast in China" ) ;
// venueDescription是分享社區描述,僅在Foursquare使用
oks. setVenueDescription ( "This is a beautiful place!" ) ;
// latitude是維度數據,僅在新浪微博、騰訊微博和Foursquare使用
oks. setLatitude (23.122619f ) ;
// longitude是經度數據,僅在新浪微博、騰訊微博和Foursquare使用
oks. setLongitude (113.372338f ) ;
// 是否直接分享(true則直接分享)
oks. setSilent (silent ) ;
// 指定分享平臺,和slient壹起使用可以直接分享到指定的平臺
if (platform != null ) {
oks. setPlatform (platform ) ;
}
// 去除註釋可通過OneKeyShareCallback來捕獲快捷分享的處理結果
// oks.setCallback(new OneKeyShareCallback());
//通過OneKeyShareCallback來修改不同平臺分享的內容
oks. setShareContentCustomizeCallback (
new ShareContentCustomizeDemo ( ) ) ;
oks. show (context ) ;
}
請註意,上面代碼中的參數是快捷分享可以接受的所有參數列表,如果您的項目並不集成ShareSDK的所有平臺,並沒有必要像上面的代碼那樣傳遞所有參數進快捷分享。所以請根據您的項目特點,去除不必要的參數。具體平臺參數說明,可以參考API文檔。
3) 如果您的項目中集成微信平臺,請將SDK解壓目錄中的“Src/wxapi”目錄復制到您的項目主包下。如果您的項目中集成易信平臺,請將SDK解壓目錄中的“Src/yxapi”目錄復制到您的項目主包下。
完成上述的步驟,快捷分享就已經集成了。
自定義外部回調
新版本的快捷分享添加了壹個callback的Extra,可以在啟動快捷分享的時候,設置壹個callback給它,於是快捷分享操作結束以後,不再調用自己的callback,而是調用從外部設置進來的callback。設置方法和其他的extra類似:
OnekeyShare oks = new OnekeyShare ( ) ;
// 參考代碼配置章節,設置分享參數
// 設置自定義的外部回調
oks. setCallback ( new OneKeyShareCallback ( ) ) ;
oks. show (context ) ;
上述代碼中的OneKeyShareCallback是壹個實現了PlatformActionListener的類,因此它有onComplete、onError和onCancel等方法。啟動快捷分享的時候將OneKeyShareCallback的類名傳遞進去,快捷分享自己會嘗試創建其實例,如果創建失敗或者沒有傳遞callback字段,則使用默認的callback,如果成功,則以後會將分享結果給這個類處理。
為不同平臺定義差別化分享內容
快捷分享允許開發者設置了統壹的分享模板以後,為不同平臺設置差別化的分享內容。為了實現這個功能,需要為快捷分享提供壹個ShareContentCustomizeCallback的實例,並參考下面的偽代碼設置到快捷分享中:
OnekeyShare oks = new OnekeyShare ( ) ;
// 參考代碼配置章節,設置分享參數
//通過OneKeyShareCallback來修改不同平臺分享的內容
oks. setShareContentCustomizeCallback (
new ShareContentCustomizeDemo ( ) ) ;
oks. show (context ) ;
ShareContentCustomizeCallback是壹個接口,使用時需要實現其onShare(Platform, ShareParams)方法。此方法被回調的時候會傳遞壹個即將執行分享的平臺實例和即將被分享的分享內容(ShareParams)。開發者可以通過修改這個ShareParams參數完成分享內容根據平臺的差異化。
/**
* 快捷分享項目現在添加為不同的平臺添加不同分享內容的方法。
*本類用於演示如何區別Twitter的分享內容和其他平臺分享內容。
*/
public class ShareContentCustomizeDemo implements ShareContentCustomizeCallback {
public void onShare (Platform platform, ShareParams paramsToShare ) {
// 改寫twitter分享內容中的text字段,否則會超長,
// 因為twitter會將圖片地址當作文本的壹部分去計算長度
if (Twitter. NAME. equals (platform. getName ( ) ) ) {
String text = platform. getContext ( ). getString (R. string. share_content_short ) ;
paramsToShare. setText (text ) ;
}
}
}
在九宮格中添加自定義圖標
快捷分享的九宮格列表提供添加自定義圖標的功能,方法如下:
OnekeyShare oks = new OnekeyShare ( ) ;
// 參考代碼配置章節,設置分享參數
// 構造壹個圖標
Bitmap logo = BitmapFactory. decodeResource (getResources ( ), R. drawable. logo ) ;
// 定義圖標的標簽
String label = getResources ( ). getString (R. string. app_name ) ;
// 圖標點擊後會通過Toast提示消息
OnClickListener listener = new OnClickListener ( ) {
public void onClick ( View v ) {
Toast. makeText (getContext ( ), “Hello”, Toast. LENGTH_SHORT ). show ( ) ;
oks. finish ( ) ;
}
} ;
oks. setCustomerLogo (logo, label, listener ) ;
oks. show (context ) ;
這樣的代碼可以多次使用,以添加任意數量的自定義圖標。快捷分享默認會將自定義圖標放在九宮格的最後位置,如果您需要放在它在其他地方,可以到PlatformGridView.PlatformAdapter中修改代碼。
其他自定義方式
因為通用性,所以快捷分享不會提供太多涉及平臺差異的高級功能。不過快捷分享是開源的,其源碼放在OneKeyhare項目裏面,開發者可以通過修改這些源碼強化快捷分享的功能。
隨著ShareSDK的不斷優化和壯大,新平臺加入的同時我們還在強化已有平臺的功能。比方說微信及微信朋友圈分享時支持分享Bitmap對象、印象筆記分享時支持多圖文同時分享等等。這些功能只是部分平臺特有的,不會集成到快捷分享中。如果您的項目需要這些功能,需要修改快捷分享的代碼,或者直接參考接口調用章節的相關描述,調用接口來實現。