iOS友盟分享的使用總結
現在幾乎所有的APP都會整合分享,為了可以更好的推廣自己的APP.
目前市面上常用的分享無非就三個: 1.友盟分享; 2.shareSDK(mob); 3.蘋果原生.
由於蘋果原生的分享使用起來不方便,或者說很多人不會使用,不像第三方的那麼方便.所有用的人比較的少.而我平時自己的專案中多使用的是友盟分享和shareSDK.
今天我主要介紹一下友盟分享的一點使用方法,和一些知識點.分享給大家,也是自己做筆記用.
一、準備
1.在友盟註冊應用,獲取UMeng的appKey和appSecret。
2.申請需要分享的第三方平臺的開發者帳號,並繫結應用,預設回撥地址。
這部分屬於基礎的東西,就不贅述了
二、整合
配置平臺 Cocoapods整合U-Share SDK可靈活配置平臺,如工程target名為UMSocialDemo,可選新增以下平臺程式碼,如在專案的根目錄的Podfile中加入:
(另外:由於友盟的SDK很大,可以選擇手動匯入,不過比較麻煩)
target 'UMSocialDemo' do # U-Share SDK UI模組(分享面板,建議新增) pod ‘UMengUShare/UI’ # 整合微信(精簡版0.2M) pod ‘UMengUShare/Social/ReducedWeChat' # 整合微信(完整版14.4M) pod ‘UMengUShare/Social/WeChat' # 整合QQ/QZone/TIM(精簡版0.5M) pod ‘UMengUShare/Social/ReducedQQ' # 整合QQ/QZone/TIM(完整版7.6M) pod ‘UMengUShare/Social/QQ' # 整合新浪微博(精簡版1M) pod ‘UMengUShare/Social/ReducedSina' # 整合新浪微博(完整版25.3M) pod ‘UMengUShare/Social/Sina' # 整合Facebook/Messenger pod ‘UMengUShare/Social/Facebook' # 整合Twitter pod ‘UMengUShare/Social/Twitter' # 整合支付寶 pod ‘UMengUShare/Social/AlipayShare' # 整合釘釘 pod ‘UMengUShare/Social/DingDing' # 整合豆瓣 pod ‘UMengUShare/Social/Douban' # 整合人人 pod ‘UMengUShare/Social/Renren' # 整合騰訊微博 pod ‘UMengUShare/Social/TencentWeibo' # 整合來往(點點蟲) pod ‘UMengUShare/Social/LaiWang' # 整合易信 pod ‘UMengUShare/Social/YiXin' # 整合領英 pod ‘UMengUShare/Social/Linkedin' # 整合Flickr pod ‘UMengUShare/Social/Flickr' # 整合Kakao pod ‘UMengUShare/Social/Kakao' # 整合Tumblr pod ‘UMengUShare/Social/Tumblr' # 整合Pinterest pod ‘UMengUShare/Social/Pinterest' # 整合Instagram pod ‘UMengUShare/Social/Instagram' # 整合Line pod ‘UMengUShare/Social/Line' # 整合WhatsApp pod ‘UMengUShare/Social/WhatsApp' # 整合有道雲筆記 pod ‘UMengUShare/Social/YouDao' # 整合印象筆記 pod ‘UMengUShare/Social/EverNote' # 整合Google+ pod ‘UMengUShare/Social/GooglePlus' # 整合Pocket pod ‘UMengUShare/Social/Pocket' # 整合DropBox pod ‘UMengUShare/Social/DropBox' # 整合VKontakte pod ‘UMengUShare/Social/VKontakte' # 整合郵件 pod ‘UMengUShare/Social/Email' # 整合簡訊 pod ‘UMengUShare/Social/SMS' # 加入IDFA獲取 pod ‘UMengUShare/Plugin/IDFA' end
需要哪個匯入哪個,在終端 pod install
更新.
三、第三方平臺配置
在iOS9以上系統需要增加一個可跳轉App的白名單,即LSApplicationQueriesSchemes
否則將在SDK判斷是否跳轉時用到的canOpenURL時返回NO,進而只進行webview授權或授權/分享失敗
在專案中的info.plist中加入應用白名單,右鍵info.plist選擇source code開啟(plist具體設定在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、TIM 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> <string>tim</string> <string>timapi</string> <string>timopensdkfriend</string> <string>timwpa</string> <string>timgamebindinggroup</string> <string>timapiwallet</string> <string>timOpensdkSSoLogin</string> <string>wtlogintim</string> <string>timopensdkgrouptribeshare</string> <string>timopensdkapiV4</string> <string>timgamebindinggroup</string> <string>timopensdkdataline</string> <string>wtlogintimV1</string> <string>timapiV1</string> <!-- 支付寶 URL Scheme 白名單--> <string>alipay</string> <string>alipayshare</string> <!-- 釘釘 URL Scheme 白名單--> <string>dingtalk</string> <string>dingtalk-open</string> <!--Linkedin URL Scheme 白名單--> <string>linkedin</string> <string>linkedin-sdk2</string> <string>linkedin-sdk</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> <!-- Twitter URL Scheme 白名單--> <string>twitter</string> <string>twitterauth</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> <!-- Tumblr URL Scheme 白名單--> <string>tumblr</string> <!-- 印象筆記 --> <string>evernote</string> <string>en</string> <string>enx</string> <string>evernotecid</string> <string>evernotemsg</string> <!-- 有道雲筆記--> <string>youdaonote</string> <string>ynotedictfav</string> <string>com.youdao.note.todayViewNote</string> <string>ynotesharesdk</string> <!-- Google+--> <string>gplus</string> <!-- Pocket--> <string>pocket</string> <string>readitlater</string> <string>pocket-oauth-v1</string> <string>fb131450656879143</string> <string>en-readitlater-5776</string> <string>com.ideashower.ReadItLaterPro3</string> <string>com.ideashower.ReadItLaterPro</string> <string>com.ideashower.ReadItLaterProAlpha</string> <string>com.ideashower.ReadItLaterProEnterprise</string> <!-- VKontakte--> <string>vk</string> <string>vk-share</string> <string>vkauthorize</string> </array>
-
設定URL Scheme
URL Scheme是通過系統找到並跳轉對應app的設定,通過向專案中的info.plist檔案中加入URL types可使用第三方平臺所註冊的appkey資訊向系統註冊你的app,當跳轉到第三方應用授權或分享後,可直接跳轉回你的app。
新增URL Types工程設定面板設定
配置第三方平臺URL Scheme 未列出則不需設定
平臺 | 格式 | 舉例 | 備註 |
---|---|---|---|
微信 | 微信appKey | wxdc1e388c3822c80b | |
QQ/Qzone/TIM | 需要新增兩項URL Scheme: 1、"tencent"+騰訊QQ互聯應用appID 2、“QQ”+騰訊QQ互聯應用appID轉換成十六進位制(不足8位前面補0) |
如appID:100424468 1、tencent100424468 2、QQ05fc5b14 | QQ05fc5b14為100424468轉十六進位制而來,因不足8位向前補0,然後加"QQ"字首 |
新浪微博 | “wb”+新浪appKey | wb3921700954 | |
支付寶 | “ap”+appID | ap2015111700822536 | URL Type中的identifier填"alipayShare" |
易信 | 易信appkey | yx35664bdff4db42c2b7be1e29390c1a06 | |
點點蟲 | 點點蟲appID | 8112117817424282305 | URL Type中的identifier填"Laiwang" |
領英 | “li”+appID | li4768945 | |
“fb”+FacebookID | fb506027402887373 | ||
“twitterkit-”+TwitterAppkey | twitterkit-fB5tvRpna1CKK97xZUslbxiet | ||
VKontakte | “vk”+ VKontakteID | vk5786123 |
四、專案初始化設定
上面都是各種配置,現在正是開始寫程式碼
- 初始化U-Share及第三方平臺
設定各個分享平臺的AppKey,統一呼叫這個方法,platform為平臺名稱(注意:QQ平臺僅需將appID作為U-Share的appKey引數傳進即可)
在AppDelegate.m中設定如下程式碼:
#import <UMSocialCore/UMSocialCore.h> - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { /* 開啟除錯日誌 */ [[UMSocialManager defaultManager] openLog:YES]; /* 設定友盟appkey */ [[UMSocialManager defaultManager] setUmSocialAppkey:USHARE_DEMO_APPKEY]; [self configUSharePlatforms]; return YES; } - (void)configUSharePlatforms { /* 設定微信的appKey和appSecret [微信平臺從U-Share 4/5升級說明]http://dev.umeng.com/social/ios/%E8%BF%9B%E9%98%B6%E6%96%87%E6%A1%A3#1_1 */ [[UMSocialManager defaultManager] setPlaform:UMSocialPlatformType_WechatSession appKey:@"wxdc1e388c3822c80b" appSecret:@"3baf1193c85774b3fd9d18447d76cab0" redirectURL:nil]; /* 設定分享到QQ互聯的appID * U-Share SDK為了相容大部分平臺命名,統一用appKey和appSecret進行引數設定,而QQ平臺僅需將appID作為U-Share的appKey引數傳進即可。 100424468.no permission of union id [QQ/QZone平臺整合說明]http://dev.umeng.com/social/ios/%E8%BF%9B%E9%98%B6%E6%96%87%E6%A1%A3#1_3 */ [[UMSocialManager defaultManager] setPlaform:UMSocialPlatformType_QQ appKey:@"1105821097"/*設定QQ平臺的appID*/ appSecret:nil redirectURL:@"http://mobile.umeng.com/social"]; /* 設定新浪的appKey和appSecret [新浪微博整合說明]http://dev.umeng.com/social/ios/%E8%BF%9B%E9%98%B6%E6%96%87%E6%A1%A3#1_2 */ [[UMSocialManager defaultManager] setPlaform:UMSocialPlatformType_Sina appKey:@"3921700954" appSecret:@"04b48b094faeb16683c32669824ebdad" redirectURL:@"https://sns.whalecloud.com/sina2/callback"]; ..... 其他的APP分享平臺類似,不列舉........ }
- 設定系統回撥
// 支援所有iOS系統 - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation { //6.3的新的API呼叫,是為了相容國外平臺(例如:新版facebookSDK,VK等)的呼叫[如果用6.2的api呼叫會沒有回撥],對國內平臺沒有影響 BOOL result = [[UMSocialManager defaultManager] handleOpenURL:url sourceApplication:sourceApplication annotation:annotation]; if (!result) { // 其他如支付等SDK的回撥 } return result; }
五、分享的訊息型別
分享目前主要支援的型別有:
- 網頁型別(包含 標題+描述+icon 的卡片,點選會進入配置的url)
- 圖片
- 文字
- 表情(GIF圖片,即Emotion型別,只有微信支援)
- 圖文(包含一張圖片和一段文字)
- 視訊(只支援視訊URL、縮圖及描述)
- 音樂(只支援音樂URL、縮圖及描述)
自定義分享型別,qq和微信不支援圖文分享,只能分享圖片或者文字其中一種
- 分享文字
- (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); } }]; }
2.分享圖片
- (void)shareImageToPlatformType:(UMSocialPlatformType)platformType { //建立分享訊息物件 UMSocialMessageObject *messageObject = [UMSocialMessageObject messageObject]; //建立圖片內容物件 UMShareImageObject *shareObject = [[UMShareImageObject alloc] init]; //如果有縮圖,則設定縮圖 shareObject.thumbImage = [UIImage imageNamed:@"icon"]; [shareObject setShareImage:@"https://mobile.umeng.com/images/pic/home/social/img-1.png"]; //分享訊息物件設定分享內容物件 messageObject.shareObject = shareObject; //呼叫分享介面 [[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); } }]; }
3.分享圖文(新浪支援,微信/QQ僅支援圖或文字分享)
- (void)shareImageAndTextToPlatformType:(UMSocialPlatformType)platformType { //建立分享訊息物件 UMSocialMessageObject *messageObject = [UMSocialMessageObject messageObject]; //設定文字 messageObject.text = @"社會化元件UShare將各大社交平臺接入您的應用,快速武裝App。"; //建立圖片內容物件 UMShareImageObject *shareObject = [[UMShareImageObject alloc] init]; //如果有縮圖,則設定縮圖 shareObject.thumbImage = [UIImage imageNamed:@"icon"]; [shareObject setShareImage:@"https://www.umeng.com/img/index/demo/1104.4b2f7dfe614bea70eea4c6071c72d7f5.jpg"]; //分享訊息物件設定分享內容物件 messageObject.shareObject = shareObject; //呼叫分享介面 [[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); } }]; }
4.分享網頁
- (void)shareWebPageToPlatformType:(UMSocialPlatformType)platformType { //建立分享訊息物件 UMSocialMessageObject *messageObject = [UMSocialMessageObject messageObject]; //建立網頁內容物件 UMShareWebpageObject *shareObject = [UMShareWebpageObject shareObjectWithTitle:@"分享標題" descr:@"分享內容描述" thumImage:[UIImage imageNamed:@"icon"]]; //設定網頁地址 shareObject.webpageUrl =@"http://mobile.umeng.com/social"; //分享訊息物件設定分享內容物件 messageObject.shareObject = shareObject; //呼叫分享介面 [[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); } }]; }
5.分享音樂
- (void)shareMusicToPlatformType:(UMSocialPlatformType)platformType { //建立分享訊息物件 UMSocialMessageObject *messageObject = [UMSocialMessageObject messageObject]; //建立音樂內容物件 UMShareMusicObject *shareObject = [UMShareMusicObject shareObjectWithTitle:@"分享標題" descr:@"分享內容描述" thumImage:[UIImage imageNamed:@"icon"]]; //設定音樂網頁播放地址 shareObject.musicUrl = @"http://c.y.qq.com/v8/playsong.html?songid=108782194&source=yqq#wechat_redirect"; // shareObject.musicDataUrl = @"這裡設定音樂資料流地址(如果有的話,而且也要看所分享的平臺支不支援)"; //分享訊息物件設定分享內容物件 messageObject.shareObject = shareObject; //呼叫分享介面 [[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); } }]; }
6.分享視訊
- (void)shareVedioToPlatformType:(UMSocialPlatformType)platformType { //建立分享訊息物件 UMSocialMessageObject *messageObject = [UMSocialMessageObject messageObject]; //建立視訊內容物件 UMShareVideoObject *shareObject = [UMShareVideoObject shareObjectWithTitle:@"分享標題" descr:@"分享內容描述" thumImage:[UIImage imageNamed:@"icon"]]; //設定視訊網頁播放地址 shareObject.videoUrl = @"http://video.sina.com.cn/p/sports/cba/v/2013-10-22/144463050817.html"; // shareObject.videoStreamUrl = @"這裡設定視訊資料流地址(如果有的話,而且也要看所分享的平臺支不支援)"; //分享訊息物件設定分享內容物件 messageObject.shareObject = shareObject; //呼叫分享介面 [[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); } }]; }
7 分享微信表情
8 分享微信小程式
這兩個不常用,不列舉了.
六、呼叫分享面板
在分享按鈕繫結如下觸發程式碼
#import <UShareUI/UShareUI.h> //顯示分享面板 [UMSocialUIManager showShareMenuViewInWindowWithPlatformSelectionBlock:^(UMSocialPlatformType platformType, NSDictionary *userInfo) { // 根據獲取的platformType確定所選平臺進行下一步操作 }];
也可以自定義面板,但是最好監聽回撥,檢視是否分享成功,提升體驗.
七、其他的小知識點
判斷是否安裝QQ、微信、微博
#import <TencentOpenAPI/QQApiInterface.h> if ( [QQApiInterface isQQInstalled]) { //已經安裝QQ }
#import "WXApi.h" if ([WXApi isWXAppInstalled]) { //已經安裝微信 }
if ([WeiboSDK isWeiboAppInstalled]) { NSLog(@"已經安裝微部落格戶端"); }
其他的應用判斷,可以根據以下方法:
/** * 平臺是否安裝 * * @param platformType 平臺型別 @see UMSocialPlatformType * * @return YES 代表安裝,NO 代表未安裝 * @note 呼叫前請檢查是否配置好平臺相關白名單: http://dev.umeng.com/social/ios/quick-integration#1_3 * 在判斷QQ空間的App的時候,QQApi判斷會出問題 */ -(BOOL) isInstall:(UMSocialPlatformType)platformType; ///呼叫方法 BOOL extractedExpr = [[UMSocialManager defaultManager] isInstall:UMSocialPlatformType_DingDing]; if (extractedExpr) { NSLog(@"安裝l"); } else { NSLog(@"沒安裝"); }
/** * 當前平臺是否支援分享 * * @param platformType 平臺型別 @see UMSocialPlatformType * * @return YES代表支援,NO代表不支援 */ -(BOOL) isSupport:(UMSocialPlatformType)platformType; ///呼叫 BOOL extractedExpr = [[UMSocialManager defaultManager] isSupport:UMSocialPlatformType_DingDing];
還有其他的一些常見問題,可以參考文件: 友盟分享文件