1、系統方式創建分享
-
按照下圖在 Info.plist 文件中將 Localization native development region 的值改為 China。如果不設置此項彈出的分享頁面中顯示的按鈕為英文說明。
-
UIActivityViewController 方式創建
// 設置分享的內容 NSString *textToShare = @"請大家登錄《iOS雲端與網絡通訊》服務網站。"; UIImage *imageToShare = [UIImage imageNamed:@"swift"]; NSURL *urlToShare = [NSURL URLWithString:@"http://m.baidu.com"]; // 創建分享視圖控制器 /* activityItems: 分享的內容 applicationActivities: 分享的類型,默認(nil)時為 UIActivity */ NSArray *items = @[textToShare, imageToShare, urlToShare]; UIActivityViewController *activityVC = [[UIActivityViewController alloc] initWithActivityItems:items applicationActivities:nil]; // 設置不出現的分享按鈕 /* Activity 類型又分為 “操作” 和 “分享” 兩大類: UIActivityCategoryAction 操作: UIActivityTypeAirDrop AirDrop AirDrop UIActivityTypePrint 打印 Print UIActivityTypeSaveToCameraRoll 保存到相冊 Save Image UIActivityTypeAssignToContact 添加到聯系人 AssignToContact UIActivityTypeAddToReadingList 添加到 Safari 閱讀列表 AddToReadingList UIActivityTypeCopyToPasteboard 復制到剪貼板 Copy UIActivityTypeOpenInIBooks 在 iBook 中打開 UIActivityCategoryShare 分享: UIActivityTypeMail 郵箱 Mail UIActivityTypeMessage 短信 Message UIActivityTypePostToTwitter 分享到 Twitter UIActivityTypePostToFacebook 分享到 Facebook UIActivityTypePostToVimeo 分享到 Vimeo(視頻媒體) UIActivityTypePostToFlickr 分享到 Flickr(網絡相簿) UIActivityTypePostToWeibo 分享到 新浪微博 UIActivityTypePostToTencentWeibo 分享到 騰訊微博 */ // 添加到此數組中的系統分享按鈕項將不會出現在分享視圖控制器中 activityVC.excludedActivityTypes = @[UIActivityTypeAssignToContact, UIActivityTypePrint]; // 顯示分享視圖控制器 [self presentViewController:activityVC animated:YES completion:nil]; // 分享完成 activityVC.completionWithItemsHandler = ^(NSString *activityType, BOOL completed, NSArray *returnedItems, NSError *activityError) { // 分享完成或退出分享時調用該方法 if (completed) { NSLog(@"分享完成"); } else { NSLog(@"取消分享"); } };
-
效果
2、系統方式自定義分享
-
按照下圖在 Info.plist 文件中將 Localization native development region 的值改為 China。如果不設置此項彈出的分享頁面中顯示的按鈕為英文說明。
-
自定義按鈕
-
myUIActivity.h
#import <UIKit/UIKit.h> @interface myUIActivity : UIActivity <UINavigationControllerDelegate> @end
-
myUIActivity.m
#import "myUIActivity.h" /* 自定義分享按鈕 */ @implementation myUIActivity // 設置分享按鈕的類型 - (NSString *)activityType { // 在 completionWithItemsHandler 回調里可以用於判斷,一般取當前類名 return NSStringFromClass([myUIActivity class]); } // 設置分享按鈕的標題 - (NSString *)activityTitle { // 設置顯示在分享框里的名稱 return @"自定義分享按鈕"; } // 設置分享按鈕的圖片 - (UIImage *)activityImage { // 圖片自定變為黑白色,默認尺寸為 56 * 56 像素 return [UIImage imageNamed:@"JHQ0228"]; } // 設置是否顯示分享按鈕 - (BOOL)canPerformWithActivityItems:(NSArray *)activityItems { // 這里一般根據用戶是否授權等來決定是否要隱藏分享按鈕 return YES; } // 預處理分享數據 - (void)prepareWithActivityItems:(NSArray *)activityItems { // 解析分享數據時調用,可以進行一定的處理 NSLog(@"prepareWithActivityItems"); // 手動執行分享操作,保存到相冊 UIImageWriteToSavedPhotosAlbum(activityItems[1], nil, nil, nil); } // 執行分享 - (UIViewController *)activityViewController { // 點擊自定義分享按鈕時調用,跳轉到自定義的視圖控制器 NSLog(@"activityViewController"); return nil; } // 執行分享 - (void)performActivity { // 點擊自定義分享按鈕時調用 NSLog(@"performActivity"); } // 完成分享 - (void)activityDidFinish:(BOOL)completed { // 分享視圖控制器退出時調用 NSLog(@"activityDidFinish"); } @end
-
-
使用自定義按鈕
-
ViewController.m
#import "myUIActivity.h" // 設置分享的內容 NSString *textToShare = @"請大家登錄《iOS雲端與網絡通訊》服務網站。"; UIImage *imageToShare = [UIImage imageNamed:@"swift"]; NSURL *urlToShare = [NSURL URLWithString:@"http://m.baidu.com"]; // 設置分享的類型 myUIActivity *myActivity = [[myUIActivity alloc] init]; // 創建分享視圖控制器 NSArray *items = @[textToShare, imageToShare, urlToShare]; NSArray *activities = @[myActivity]; UIActivityViewController *activityVC = [[UIActivityViewController alloc] initWithActivityItems:items applicationActivities:activities]; // 設置不出現的分享按鈕 activityVC.excludedActivityTypes = @[UIActivityTypeAirDrop]; // 顯示分享視圖控制器 [self presentViewController:activityVC animated:YES completion:nil]; // 分享完成 activityVC.completionWithItemsHandler = ^(NSString *activityType, BOOL completed, NSArray *returnedItems, NSError *activityError) { // 分享完成或退出分享時調用該方法 if (completed) { NSLog(@"分享完成"); } else { NSLog(@"取消分享"); } };
-
-
效果
3、友盟 登錄/分享 集成
-
U-Share 快速集成多平台分享、登錄功能。幫助應用或游戲快速具備國內外多平台分享、第三方登錄功能,SDK 包最小,集成成本最低,平台覆蓋最全,並基於友盟+大數據,提供最為權威、實時的用戶畫像、分享回流等數據分析,助力產品開發與推廣。
-
覆蓋國內外近 30 家社交平台,支持文本、圖片、音樂、視頻、鏈接等多種內容類型的分享,並提供了主流游戲平台的 SDK。
- 國內平台:微信、朋友圈、QQ、Qzone、新浪微博、騰訊微博、人人、豆瓣、易信、短信、郵件等。
- 國外平台:Facebook、Twitter、Instagram、Google+、LINE、WhatsApp、Pinterest、Evernote、Pocket、LinkedIn、KakaoTalk 等。
-
U-Share 集成流程
-
U-Share 第三方賬號申請及綁定
-
U-Share 快速集成文檔
-
U-Share API 說明
-
U-Share SDK 下載
-
集成友盟社會化組件流程
-
1.1 注冊友盟賬號
-
1.2 申請第三方賬號
- 參照文檔:申請第三方賬號
-
1.3 綁定第三方賬號
- 參照文檔:綁定第三方賬號到友盟后台
-
1.4 下載 SDK
- 進入下載 SDK 頁面,勾選自己需要的功能進行下載。
-
1.5 技術支持
-
官方微博: umengsocial
-
開發者社區:http://bbs.umeng.com/thread-5908-1-1.html?from=qianming
-
技術支持:聯系客服
-
-
3.1 第三方賬號申請及綁定
3.1.1 申請第三方賬號
-
進行分享、授權操作需要在第三方平台創建應用並提交審核,友盟默認提供了大多數平台的測試賬號,但如果需要將分享、授權來源、分享到 QQ、Qzone 的 icon 更改為自己 APP 的應用,就需要自己申請第三方賬號。
-
新浪微博
-
登錄新浪微博開放平台,填寫相關應用信息並上傳 icon 圖片。注意修改安全域名為
sns.whalecloud.com
同時設置授權回調頁為http://sns.whalecloud.com/sina2/callback
安全域名設置在應用信息 --> 基本信息,具體位置參考下 -
授權回調頁、取消授權回調頁設置在應用信息 --> 高級信息,具體位置參考下圖
-
安全域名的修改需要二次審核通過才生效,授權回調頁修改即時生效
-
-
微信
- 登錄微信開放平台,填寫相關應用信息,審核通過后獲取到微信 AppID 及 AppSecret,如果需要微信登錄功能,需要申請微信登錄權限。
-
QQ 及 Qzone
-
QQ 及 Qzone 使用同一個 AppID 及 Appkey,登錄騰訊開放平台,選擇移動應用,填寫相關應用信息並提交審核,未審核前通過只能使用測試賬號,添加測試賬號方法如下:選擇用戶能力 --> 進階社交能力 --> 應用調試者,添加測試賬號必須在申請者好友列表中,如下圖
-
-
人人網
-
登錄人人開放平台,填寫相關應用信息,同時填寫應用根域名為
sns.whalecloud.com
具體位置: 基本信息 --> 應用根域名 如圖
-
-
豆瓣
-
登錄豆瓣開放平台,創建應用並填寫相關應用信息,注意權限必須選擇廣播,同時填寫回調地址為
http://sns.whalecloud.com/douban/callback
-
3.1.2 綁定第三方賬號到友盟后台
-
目前需要在友盟后台綁定的第三方賬號為:新浪微博、騰訊微博、人人網、豆瓣、Qzone,其余平台如微信、QQ 直接在代碼中設置。
-
綁定地址:http://umeng.com/apps,登錄友盟網站 -> 左上角選擇你們的產品 -> 組件 -> 社會化組件 -> 設置
-
短鏈接開關
- 短鏈接開關只對新浪微博、騰訊微博、人人網、豆瓣四個平台有效,開啟短鏈接開關,分享文案中附加的鏈接會被轉碼,同時可以統計到分享回流率(點擊鏈接的次數),關閉短鏈接開關則無法統計,短鏈接開關默認為關閉狀態。
-
文字截斷開關
- 文字截斷開關只對新浪微博、騰訊微博、人人網、豆瓣四個平台有效,同時只對使用自定義分享編輯頁或沒有分享編輯頁用戶有效,當分享文案超出字數限制時自動截斷,開關狀態默認關閉。
3.2 U-Share SDK 集成
3.2.1 下載 U-Share SDK
- 通過 iOS 社會化組件下載頁面選擇所需的社交平台后進行下載。
3.2.2 加入 U-Share SDK
-
將 U-Share SDK 添加到工程
-
添加項目配置,在 Other Linker Flags 加入 -ObjC
-
加入依賴系統庫 libsqlite3.tbd
-
添加平台相應的依賴庫,根據集成的不同平台加入相關的依賴庫,未列出平台則不用添加。添加方式:選中項目 Target -> Linked Frameworks and Libraries 列表中添加
- 注:Twitter 平台加入后需添加 TwitterKit.framework/Resources/TwitterKitResources.bundle。
3.3 U-Share SDK 平台配置
- 從這一步驟就開始需要第三方 appKey 和 appSecret 等信息,可參考第三方賬號申請及綁定申請所需的平台賬號。
3.3.1 配置各平台 URL Scheme
-
添加 URL Types
-
URL Scheme 是通過系統找到並跳轉對應 app 的一類設置,通過向項目中的 info.plist 文件中加入 URL types 可使用第三方平台所注冊的 appkey 信息向系統注冊你的 app,當跳轉到第三方應用授權或分享后,可直接跳轉回你的 app。
-
添加 URL Types 有如下幾處,都可進行設置
-
1、通過工程設置面板
-
2、通過 info.plist 文件編輯
-
3、直接編輯 info.plist 中 XML 代碼
-
-
-
配置第三方平台 URL Scheme
-
未列出則不需設置
-
3.3.2 適配 iOS 9/10 系統
-
iOS9 系統后 Apple 對 HTTP 請求及訪問外部應用做了更加嚴格的要求,包括 HTTP 白名單、跳轉第三方應用白名單等,具體設置第三方平台參數請參照適配 iOS9/10 系統。
-
HTTPS 傳輸安全
-
Apple 將從 2017 年開始執行 ATS(App Transport Security),所有進行審核的應用中網絡請求全部支持 HTTPS,屆時以下配置將會失效,請提前做好准備。
-
以 iOS10 SDK 編譯的工程會默認以 SSL 安全協議進行網絡傳輸,即 HTTPS,如果依然使用 HTTP 協議請求網絡會報系統異常並中斷請求。目前可用如下兩種方式保持用 HTTP 進行網絡連接:
-
在 info.plist 中加入安全域名白名單(右鍵 info.plist 用 source code 打開)
<key>NSAppTransportSecurity</key> <dict> <!-- 配置允許 http 的任意網絡End--> <key>NSExceptionDomains</key> <dict> <!-- 集成新浪微博對應的HTTP白名單--> <key>sina.com.cn</key> <dict> <key>NSIncludesSubdomains</key> <true/> <key>NSThirdPartyExceptionAllowsInsecureHTTPLoads</key> <true/> <key>NSThirdPartyExceptionRequiresForwardSecrecy</key> <false/> </dict> <key>sinaimg.cn</key> <dict> <key>NSIncludesSubdomains</key> <true/> <key>NSThirdPartyExceptionAllowsInsecureHTTPLoads</key> <true/> <key>NSThirdPartyExceptionRequiresForwardSecrecy</key> <false/> </dict> <key>sinajs.cn</key> <dict> <key>NSIncludesSubdomains</key> <true/> <key>NSThirdPartyExceptionAllowsInsecureHTTPLoads</key> <true/> <key>NSThirdPartyExceptionRequiresForwardSecrecy</key> <false/> </dict> <key>sina.cn</key> <dict> <!-- 適配iOS10 --> <key>NSExceptionMinimumTLSVersion</key> <string>TLSv1.0</string> <key>NSIncludesSubdomains</key> <true/> <key>NSThirdPartyExceptionRequiresForwardSecrecy</key> <false/> </dict> <key>weibo.cn</key> <dict> <!-- 適配iOS10 --> <key>NSExceptionMinimumTLSVersion</key> <string>TLSv1.0</string> <key>NSIncludesSubdomains</key> <true/> <key>NSThirdPartyExceptionRequiresForwardSecrecy</key> <false/> </dict> <key>weibo.com</key> <dict> <!-- 適配iOS10 --> <key>NSExceptionMinimumTLSVersion</key> <string>TLSv1.0</string> <key>NSIncludesSubdomains</key> <true/> <key>NSThirdPartyExceptionAllowsInsecureHTTPLoads</key> <true/> <key>NSThirdPartyExceptionRequiresForwardSecrecy</key> <false/> </dict> <!-- 新浪微博--> <!-- 集成人人授權對應的HTTP白名單--> <key>renren.com</key> <dict> <key>NSIncludesSubdomains</key> <true/> <key>NSThirdPartyExceptionAllowsInsecureHTTPLoads</key> <true/> <key>NSThirdPartyExceptionRequiresForwardSecrecy</key> <false/> </dict> <!-- 人人授權--> </dict> </dict>
-
若新版 Xcode 控制台輸出 “[] tcp_connection_xxx“ 等內容,可以在運行按鈕旁的選擇 target 選項內的 Edit Scheme - Run - Arguments - Enviroment variables 中增加 OS_ACTIVITY_MODE=disable,可將相關日志關閉。
-
-
配置 ApplicationQueriesSchemes(應用間跳轉)
-
如果你的應用使用了如 SSO 授權登錄或跳轉到第三方分享功能,在 iOS9/10 下就需要增加一個可跳轉的白名單,即 LSApplicationQueriesSchemes,否則將在 SDK 判斷是否跳轉時用到的 canOpenURL 時返回 NO,進而只進行 webview 授權或授權/分享失敗。 在項目中的 info.plist 中加入應用白名單,右鍵 info.plist 選擇 source code 打開(具體設置在 Build Setting -> Packaging -> Info.plist File 可獲取 plist 路徑)。
<key>LSApplicationQueriesSchemes</key> <array> <!-- 微信 URL Scheme 白名單--> <string>wechat</string> <string>weixin</string> <!-- 新浪微博 URL Scheme 白名單--> <string>sinaweibohd</string> <string>sinaweibo</string> <string>sinaweibosso</string> <string>weibosdk</string> <string>weibosdk2.5</string> <!-- QQ、Qzone URL Scheme 白名單--> <string>mqqapi</string> <string>mqq</string> <string>mqqOpensdkSSoLogin</string> <string>mqqconnect</string> <string>mqqopensdkdataline</string> <string>mqqopensdkgrouptribeshare</string> <string>mqqopensdkfriend</string> <string>mqqopensdkapi</string> <string>mqqopensdkapiV2</string> <string>mqqopensdkapiV3</string> <string>mqqopensdkapiV4</string> <string>mqzoneopensdk</string> <string>wtloginmqq</string> <string>wtloginmqq2</string> <string>mqqwpa</string> <string>mqzone</string> <string>mqzonev2</string> <string>mqzoneshare</string> <string>wtloginqzone</string> <string>mqzonewx</string> <string>mqzoneopensdkapiV2</string> <string>mqzoneopensdkapi19</string> <string>mqzoneopensdkapi</string> <string>mqqbrowser</string> <string>mttbrowser</string> <!-- 支付寶 URL Scheme 白名單--> <string>alipay</string> <string>alipayshare</string> <!-- 人人 URL Scheme 白名單--> <string>renrenios</string> <string>renrenapi</string> <string>renren</string> <string>renreniphone</string> <!-- 來往 URL Scheme 白名單--> <string>laiwangsso</string> <!-- 易信 URL Scheme 白名單--> <string>yixin</string> <string>yixinopenapi</string> <!-- instagram URL Scheme 白名單--> <string>instagram</string> <!-- whatsapp URL Scheme 白名單--> <string>whatsapp</string> <!-- line URL Scheme 白名單--> <string>line</string> <!-- Facebook URL Scheme 白名單--> <string>fbapi</string> <string>fb-messenger-api</string> <string>fbauth2</string> <string>fbshareextension</string> <!-- Kakao URL Scheme 白名單--> <!-- 注:以下第一個參數需替換為自己的kakao appkey--> <!-- 格式為 kakao + "kakao appkey"--> <string>kakaofa63a0b2356e923f3edd6512d531f546</string> <string>kakaokompassauth</string> <string>storykompassauth</string> <string>kakaolink</string> <string>kakaotalk-4.5.0</string> <string>kakaostory-2.9.0</string> <!-- pinterest URL Scheme 白名單--> <string>pinterestsdk.v1</string> </array>
-
3.4 調用 U-Share SDK
3.4.1 初始化設置
-
初始化 U-Share 及第三方平台
-
app 啟動后進行 U-Share 和第三方平台的初始化工作,以下代碼將所有平台初始化示例放出,開發者根據平台需要選取相應代碼,並替換為所屬注冊的 appKey 和 appSecret。
-
在 AppDelegate.m 中設置如下代碼
#import <UMSocialCore/UMSocialCore.h> - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // 打開調試日志 [[UMSocialManager defaultManager] openLog:YES]; // 設置友盟 appkey [[UMSocialManager defaultManager] setUmSocialAppkey:@"57b432afe0f55a9832001a0a"]; // 獲取友盟 social 版本號 // NSLog(@"UMeng social version: %@", [UMSocialGlobal umSocialSDKVersion]); // 設置微信的 appKey 和 appSecret [[UMSocialManager defaultManager] setPlaform:UMSocialPlatformType_WechatSession appKey:@"wxdc1e388c3822c80b" appSecret:@"3baf1193c85774b3fd9d18447d76cab0" redirectURL:@"http://mobile.umeng.com/social"]; // 設置分享到 QQ 互聯的 appKey 和 appSecret // U-Share SDK 為了兼容大部分平台命名,統一用 appKey 和 appSecret 進行參數設置, // 而 QQ 平台僅需將 appID 作為 U-Share 的 appKey 參數傳進即可。 [[UMSocialManager defaultManager] setPlaform:UMSocialPlatformType_QQ appKey:@"100424468" appSecret:nil redirectURL:@"http://mobile.umeng.com/social"]; // 設置新浪的 appKey 和 appSecret [[UMSocialManager defaultManager] setPlaform:UMSocialPlatformType_Sina appKey:@"3921700954" appSecret:@"04b48b094faeb16683c32669824ebdad" redirectURL:@"http://sns.whalecloud.com/sina2/callback"]; // 支付寶的 appKey [[UMSocialManager defaultManager] setPlaform:UMSocialPlatformType_AlipaySession appKey:@"2015111700822536" appSecret:nil redirectURL:@"http://mobile.umeng.com/social"]; // 設置易信的 appKey [[UMSocialManager defaultManager] setPlaform:UMSocialPlatformType_YixinSession appKey:@"yx35664bdff4db42c2b7be1e29390c1a06" appSecret:nil redirectURL:@"http://mobile.umeng.com/social"]; // 設置點點蟲(原來往)的 appKey 和 appSecret [[UMSocialManager defaultManager] setPlaform:UMSocialPlatformType_LaiWangSession appKey:@"8112117817424282305" appSecret:@"9996ed5039e641658de7b83345fee6c9" redirectURL:@"http://mobile.umeng.com/social"]; // 設置領英的 appKey 和 appSecret [[UMSocialManager defaultManager] setPlaform:UMSocialPlatformType_Linkedin appKey:@"81t5eiem37d2sc" appSecret:@"7dgUXPLH8kA8WHMV" redirectURL:@"https://api.linkedin.com/v1/people"]; // 設置 Twitter 的 appKey 和 appSecret [[UMSocialManager defaultManager] setPlaform:UMSocialPlatformType_Twitter appKey:@"fB5tvRpna1CKK97xZUslbxiet" appSecret:@"YcbSvseLIwZ4hZg9YmgJPP5uWzd4zr6BpBKGZhf07zzh3oj62K" redirectURL:nil]; // 如果不想顯示平台下的某些類型,可用以下接口設置 // [[UMSocialManager defaultManager] removePlatformProviderWithPlatformTypes:@[@(UMSocialPlatformType_WechatFavorite), @(UMSocialPlatformType_YixinTimeLine), @(UMSocialPlatformType_LaiWangTimeLine), @(UMSocialPlatformType_Qzone)]]; ... return YES; }
-
-
設置系統回調
// 支持所有 iOS 系統 - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation { BOOL result = [[UMSocialManager defaultManager] handleOpenURL:url]; if (!result) { // 其他如支付等 SDK 的回調 } return result; }
-
注:以上為建議使用的系統 openURL 回調,且 新浪 平台僅支持以上回調。還有以下兩種回調方式,如果開發者選取以下回調,也請補充相應的函數調用。
-
1、僅支持 iOS9 以上系統,iOS8 及以下系統不會回調
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey, id> *)options { BOOL result = [[UMSocialManager defaultManager] handleOpenURL:url]; if (!result) { // 其他如支付等 SDK 的回調 } return result; }
-
2、支持目前所有 iOS 系統
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url { BOOL result = [[UMSocialManager defaultManager] handleOpenURL:url]; if (!result) { // 其他如支付等 SDK 的回調 } return result; }
-
-
3.4.2 第三方平台登錄
-
支持登錄的平台:微信、QQ、新浪微博、騰訊微博、人人網、豆瓣、Facebook、Twitter、Linkedin 領英、Kakao。
-
支持登錄並獲取用戶信息的平台:微信、QQ、新浪微博、Facebook、Twitter、Linkedin 領英、Kakao。
-
授權並獲取用戶信息
// 在需要進行獲取登錄信息的 UIViewController 中加入如下代碼 #import <UMSocialCore/UMSocialCore.h> - (void)getUserInfoForPlatform:(UMSocialPlatformType)platformType { [[UMSocialManager defaultManager] getUserInfoWithPlatform:platformType currentViewController:self completion:^(id result, NSError *error) { UMSocialUserInfoResponse *resp = result; // 第三方登錄數據(為空表示平台未提供) // 授權數據 NSLog(@" uid: %@", resp.uid); NSLog(@" openid: %@", resp.openid); NSLog(@" accessToken: %@", resp.accessToken); NSLog(@" refreshToken: %@", resp.refreshToken); NSLog(@" expiration: %@", resp.expiration); // 用戶數據 NSLog(@" name: %@", resp.name); NSLog(@" iconurl: %@", resp.iconurl); NSLog(@" gender: %@", resp.gender); // 第三方平台 SDK 原始數據 NSLog(@" originalResponse: %@", resp.originalResponse); }]; }
- 注:若在 4.x 及 5.x 版本中使用微信登錄,升級后需參考說明:4.x/5.x版本升級(授權信息變化)。
3.4.3 第三方平台分享
-
調用分享面板
-
在分享按鈕綁定如下觸發代碼
#import <UShareUI/UShareUI.h> // 顯示分享面板 [UMSocialUIManager showShareMenuViewInWindowWithPlatformSelectionBlock:^(UMSocialPlatformType platformType, NSDictionary *userInfo) { // 根據獲取的 platformType 確定所選平台進行下一步操作 }];
-
-
定制自己的分享面板預定義平台
-
以下方法可設置平台順序
#import <UShareUI/UShareUI.h> [UMSocialUIManager setPreDefinePlatforms:@[@(UMSocialPlatformType_Sina),@(UMSocialPlatformType_QQ),@(UMSocialPlatformType_WechatSession)]]; [UMSocialUIManager showShareMenuViewInWindowWithPlatformSelectionBlock:^(UMSocialPlatformType platformType, NSDictionary *userInfo) { // 根據獲取的 platformType 確定所選平台進行下一步操作 }];
-
為避免應用審核被拒,僅會對有效的平台進行顯示,如平台應用未安裝,或平台應用不支持等會進行隱藏。由於以上原因,在模擬器上部分平台會隱藏。
-
如果遇到分享面板未顯示,請參考分享面板無法彈出。
-
-
-
設置分享內容
-
分享文本
- (void)shareTextToPlatformType:(UMSocialPlatformType)platformType { // 創建分享消息對象 UMSocialMessageObject *messageObject = [UMSocialMessageObject messageObject]; // 設置文本 messageObject.text = @"社會化組件 UShare 將各大社交平台接入您的應用,快速武裝 App。"; // 調用分享接口 [[UMSocialManager defaultManager] shareToPlatform:platformType messageObject:messageObject currentViewController:self completion:^(id data, NSError *error) { if (error) { NSLog(@"************ Share fail with error %@ *********", error); }else{ NSLog(@"response data is %@", data); } }]; }
- 其他分享類型示例請參考 U-Share API 文檔。
-
3.5 技術支持
-
訪問:友盟開發者社區
-
發郵件至 social-support@umeng.com。
- 為了能夠盡快響應您的反饋,請提供您的 appkey 及 log 中的詳細出錯日志,您所提供的內容越詳細越有助於我們幫您解決問題。
-
開啟友盟分享調試 log 方法:
#import <UMSocialCore/UMSocialCore.h> [[UMSocialManager defaultManager] openLog:YES];
- 在 console 中查看日志。
-
效果
3.6 簡單使用
-
AppDelegate.m
#import <UMSocialCore/UMSocialCore.h> - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // 打開日志 [[UMSocialManager defaultManager] openLog:YES]; // 打開圖片水印 //[UMSocialGlobal shareInstance].isUsingWaterMark = YES; // 獲取友盟 social 版本號 UMSocialLogInfo(@"UMeng social version: %@", [UMSocialGlobal umSocialSDKVersion]); // 設置友盟 appkey [[UMSocialManager defaultManager] setUmSocialAppkey:@"57b432afe0f55a9832001a0a"]; // 設置微信的 appKey 和 appSecret [[UMSocialManager defaultManager] setPlaform:UMSocialPlatformType_WechatSession appKey:@"wxdc1e388c3822c80b" appSecret:@"3baf1193c85774b3fd9d18447d76cab0" redirectURL:@"http://mobile.umeng.com/social"]; /* * 添加某一平台會加入平台下所有分享渠道,如微信:好友、朋友圈、收藏,QQ:QQ 和 QQ 空間 * 以下接口可移除相應平台類型的分享,如微信收藏,對應類型可在枚舉中查找 */ //[[UMSocialManager defaultManager] removePlatformProviderWithPlatformTypes:@[@(UMSocialPlatformType_WechatFavorite)]]; // 設置分享到 QQ 互聯的 appID // U-Share SDK為了兼容大部分平台命名,統一用 appKey 和 appSecret 進行參數設置, // 而 QQ 平台僅需將 appID 作為 U-Share 的 appKey 參數傳進即可。 [[UMSocialManager defaultManager] setPlaform:UMSocialPlatformType_QQ appKey:@"1105821097" /*設置 QQ 平台的 appID*/ appSecret:nil redirectURL:@"http://mobile.umeng.com/social"]; // 設置新浪的 appKey 和 appSecret [[UMSocialManager defaultManager] setPlaform:UMSocialPlatformType_Sina appKey:@"3921700954" appSecret:@"04b48b094faeb16683c32669824ebdad" redirectURL:@"https://sns.whalecloud.com/sina2/callback"]; // 釘釘的 appKey [[UMSocialManager defaultManager] setPlaform:UMSocialPlatformType_DingDing appKey:@"dingoalmlnohc0wggfedpk" appSecret:nil redirectURL:nil]; // 支付寶的 appKey [[UMSocialManager defaultManager] setPlaform:UMSocialPlatformType_AlipaySession appKey:@"2015111700822536" appSecret:nil redirectURL:@"http://mobile.umeng.com/social"]; // 設置易信的 appKey [[UMSocialManager defaultManager] setPlaform:UMSocialPlatformType_YixinSession appKey:@"yx35664bdff4db42c2b7be1e29390c1a06" appSecret:nil redirectURL:@"http://mobile.umeng.com/social"]; // 設置點點蟲(原來往)的 appKey 和 appSecret [[UMSocialManager defaultManager] setPlaform:UMSocialPlatformType_LaiWangSession appKey:@"8112117817424282305" appSecret:@"9996ed5039e641658de7b83345fee6c9" redirectURL:@"http://mobile.umeng.com/social"]; // 設置領英的 appKey 和 appSecret [[UMSocialManager defaultManager] setPlaform:UMSocialPlatformType_Linkedin appKey:@"81t5eiem37d2sc" appSecret:@"7dgUXPLH8kA8WHMV" redirectURL:@"https://api.linkedin.com/v1/people"]; // 設置 Facebook 的 appKey 和 UrlString [[UMSocialManager defaultManager] setPlaform:UMSocialPlatformType_Facebook appKey:@"506027402887373" appSecret:nil redirectURL:@"http://www.umeng.com/social"]; // 設置 Pinterest 的 appKey [[UMSocialManager defaultManager] setPlaform:UMSocialPlatformType_Pinterest appKey:@"4864546872699668063" appSecret:nil redirectURL:nil]; // dropbox 的 appKey [[UMSocialManager defaultManager] setPlaform: UMSocialPlatformType_DropBox appKey:@"k4pn9gdwygpy4av" appSecret:@"td28zkbyb9p49xu" redirectURL:@"https://mobile.umeng.com/social"]; // vk 的 appkey [[UMSocialManager defaultManager] setPlaform:UMSocialPlatformType_VKontakte appKey:@"5786123" appSecret:nil redirectURL:nil]; return YES; } //#define __IPHONE_10_0 100000 #if __IPHONE_OS_VERSION_MAX_ALLOWED > 100000 - (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey, id> *)options { BOOL result = [[UMSocialManager defaultManager] handleOpenURL:url]; if (!result) { // 其他如支付等SDK的回調 } return result; } #endif - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation { BOOL result = [[UMSocialManager defaultManager] handleOpenURL:url]; if (!result) { // 其他如支付等SDK的回調 } return result; } - (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url { BOOL result = [[UMSocialManager defaultManager] handleOpenURL:url]; if (!result) { // 其他如支付等SDK的回調 } return result; }
-
ViewController.m
#import <UMSocialCore/UMSocialCore.h> #import <UShareUI/UShareUI.h> #pragma mark - 第三方平台登錄 - (IBAction)loginButtonClick:(UIButton *)sender { [self getUserInfoForPlatform:UMSocialPlatformType_WechatSession]; } - (void)getUserInfoForPlatform:(UMSocialPlatformType)platformType { [[UMSocialManager defaultManager] getUserInfoWithPlatform:platformType currentViewController:self completion:^(id result, NSError *error) { UMSocialUserInfoResponse *resp = result; // 第三方登錄數據(為空表示平台未提供) // 授權數據 NSLog(@" uid: %@", resp.uid); NSLog(@" openid: %@", resp.openid); NSLog(@" accessToken: %@", resp.accessToken); NSLog(@" refreshToken: %@", resp.refreshToken); NSLog(@" expiration: %@", resp.expiration); // 用戶數據 NSLog(@" name: %@", resp.name); NSLog(@" iconurl: %@", resp.iconurl); NSLog(@" gender: %@", resp.gender); // 第三方平台 SDK 原始數據 NSLog(@" originalResponse: %@", resp.originalResponse); }]; } #pragma mark - 第三方平台分享 - (IBAction)shareButtonClick:(UIButton *)sender { [self showShareMenuView]; } - (void)showShareMenuView { // 設置平台順序,只顯示設置列表中的應用 [UMSocialUIManager setPreDefinePlatforms:@[@(UMSocialPlatformType_Sina), @(UMSocialPlatformType_QQ), @(UMSocialPlatformType_WechatSession), @(UMSocialPlatformType_AlipaySession)]]; // 設置分享面板位置,底部 默認 [UMSocialShareUIConfig shareInstance].sharePageGroupViewConfig.sharePageGroupViewPostionType = UMSocialSharePageGroupViewPositionType_Bottom; // 設置分享按鈕背景形狀,有圖片 沒有圓背景 [UMSocialShareUIConfig shareInstance].sharePageScrollViewConfig.shareScrollViewPageItemStyleType = UMSocialPlatformItemViewBackgroudType_None; // 添加自定義分享按鈕 [UMSocialUIManager addCustomPlatformWithoutFilted:UMSocialPlatformType_UserDefine_Begin+2 withPlatformIcon:[UIImage imageNamed:@"icon_circle"] withPlatformName:@"演示 icon"]; // 顯示分享面板 [UMSocialUIManager showShareMenuViewInWindowWithPlatformSelectionBlock:^(UMSocialPlatformType platformType, NSDictionary *userInfo) { // 根據獲取的 platformType 確定所選平台進行下一步操作 [self shareTextToPlatformType:platformType]; // 在回調里面獲得點擊的 if (platformType == UMSocialPlatformType_UserDefine_Begin+2) { NSLog(@"點擊演示添加 Icon 后該做的操作"); dispatch_async(dispatch_get_main_queue(), ^{ UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"添加自定義 icon" message:@"具體操作方法請參考 UShareUI 內接口文檔" delegate:nil cancelButtonTitle:NSLocalizedString(@"確定", nil) otherButtonTitles:nil]; [alert show]; }); } else { } }]; } // 設置分享內容 - (void)shareTextToPlatformType:(UMSocialPlatformType)platformType { // 創建分享消息對象 UMSocialMessageObject *messageObject = [UMSocialMessageObject messageObject]; // 設置文本 messageObject.text = @"社會化組件 UShare 將各大社交平台接入您的應用,快速武裝 App。"; // 調用分享接口,進行分享 [[UMSocialManager defaultManager] shareToPlatform:platformType messageObject:messageObject currentViewController:self completion:^(id data, NSError *error) { if (error) { NSLog(@"************ Share fail with error %@ *********",error); }else{ NSLog(@"response data is %@",data); } }]; }