1. 程式人生 > >iOS友盟分享的使用總結

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  
Facebook “fb”+FacebookID fb506027402887373  
Twitter “twitterkit-”+TwitterAppkey twitterkit-fB5tvRpna1CKK97xZUslbxiet  
VKontakte “vk”+ VKontakteID vk5786123  
  URL Types配置的結果

四、專案初始化設定

上面都是各種配置,現在正是開始寫程式碼

  • 初始化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和微信不支援圖文分享,只能分享圖片或者文字其中一種

  1. 分享文字
- (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];

還有其他的一些常見問題,可以參考文件: 友盟分享文件