iOS開發 --- 接入友盟分享(微信、QQ)功能(v6.9.5 &更新日期:2018年11月1日)(一)

前期準備工作

  1. 註冊友盟賬號獲取AppKey;
  2. 註冊分享途徑賬號:

QQ:騰訊開放平臺註冊,獲取APP ID和APP KEY;

微信:微信開放平臺註冊,獲取AppID和AppSecret ;

.....

一,下載友盟分享SDK,並導入到項目。

  1. 將U-Common基礎功能庫(UMCommon.framework)添加到項目。
  2. 將U-Share SDK添加到項目。
  3.  

 

 

二,項目中相關配置

1,添加項目配置

在Other Linker Flags加入-ObjC,-ObjC屬於鏈接庫必備參數,如果不加此項,會導致庫文件無法被正確鏈接,SDK無法正常運行。

2,添加依賴系統庫

libsqlite3.tbd  數據緩存

CoreGraphics.framework

3,配置URL Scheme

配置第三方平臺URL Scheme規則參看官方文檔

URL Scheme是通過系統找到並跳轉對應app的一類設置,通過向項目中的info.plist文件中加入URL types可使用第三方平臺所註冊的appkey信息向系統註冊你的app,當跳轉到第三方應用授權或分享後,可直接跳轉回你的app。

URL Scheme格式:

微信(完整版)

精簡版無需添加以下依賴庫

SystemConfiguration.framework 判斷網絡狀態
CoreTelephony.framework 獲取運營商標識
libsqlite3.tbd 數據緩存
libc++.tbd
libz.tbd 數據壓縮

QQ(完整版)

精簡版無需添加以下依賴庫

SystemConfiguration.framework 判斷網絡狀態
libc++.tbd

4,配置白名單

在iOS9以上系統需要增加一個可跳轉App的白名單,即LSApplicationQueriesSchemes,否則將在SDK判斷是否跳轉時用到的canOpenURL時返回NO,進而只進行webview授權或授權/分享失敗。

<key>LSApplicationQueriesSchemes</key>
<array>
    <!-- 微信 URL Scheme 白名單-->
    <string>wechat</string>
    <string>weixin</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>
    <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>	
</array>
	

 

三,項目中主要代碼

1,初始化設置

#import <UMShare/UMShare.h>
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // UMConfigure 通用設置,請參考SDKs集成做統一初始化。
    // 以下僅列出U-Share初始化部分
    // U-Share 平臺設置
    [self configUSharePlatforms];
    [self confitUShareSettings];
    // Custom code
    return YES;
}
- (void)confitUShareSettings{
    /*
     * 打開圖片水印
     */
    //[UMSocialGlobal shareInstance].isUsingWaterMark = YES;
    /*
     * 關閉強制驗證https,可允許http圖片分享,但需要在info.plist設置安全域名
     <key>NSAppTransportSecurity</key>
     <dict>
     <key>NSAllowsArbitraryLoads</key>
     <true/>
     </dict>
     */
    //[UMSocialGlobal shareInstance].isUsingHttpsWhenShareContent = NO;
}
- (void)configUSharePlatforms{
    /* 設置微信的appKey和appSecret */
    [[UMSocialManager defaultManager] setPlaform:UMSocialPlatformType_WechatSession appKey:@"wxdc1e388c3822c80b" appSecret:@"3baf1193c85774b3fd9d18447d76cab0" redirectURL:@"http://mobile.umeng.com/social"];
    /*
     * 移除相應平臺的分享,如微信收藏
     */
    //[[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"];

}

 

2,調用分享面板

在分享按鈕綁定如下觸發代碼

#import <UShareUI/UShareUI.h>
//顯示分享面板
[UMSocialUIManager showShareMenuViewInWindowWithPlatformSelectionBlock:^(UMSocialPlatformType platformType, NSDictionary *userInfo) {
    // 根據獲取的platformType確定所選平臺進行下一步操作
}];

 

3,回調設置

// 兼容所有 iOS 設備

- (BOOL)application:(UIApplication *)app handleOpenURL:(nonnull NSURL *)url NS_DEPRECATED_IOS(2_0, 9_0){
    BOOL result = [[UMSocialManager defaultManager] handleOpenURL:url];
    if (!result) {
        // 其他如支付等SDK的回調
    }
    return result;
}


- (BOOL)application:(UIApplication *)app
            openURL:(NSURL *)url
            options:(NSDictionary<NSString *,id> *)options NS_AVAILABLE_IOS(9_0) {
    
    //6.3的新的API調用,是爲了兼容國外平臺(例如:新版facebookSDK,VK等)的調用[如果用6.2的api調用會沒有回調],對國內平臺沒有影響
    BOOL result = [[UMSocialManager defaultManager]  handleOpenURL:url options:options];
    if (!result) {
        // 其他如支付等SDK的回調
    }
    return result;
}

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(nullable NSString *)sourceApplication annotation:(id)annotation NS_DEPRECATED_IOS(4_2, 9_0){
    //6.3的新的API調用,是爲了兼容國外平臺(例如:新版facebookSDK,VK等)的調用[如果用6.2的api調用會沒有回調],對國內平臺沒有影響
    BOOL result = [[UMSocialManager defaultManager] handleOpenURL:url sourceApplication:sourceApplication annotation:annotation];
    if (!result) {
        // 其他如支付等SDK的回調
    }
    return result;
    
}

 

3,分享到第三方平臺類型

  • 網頁類型(網頁鏈接)
- (void)shareWebPageToPlatformType:(UMSocialPlatformType)platformType{
    //創建分享消息對象
    UMSocialMessageObject *messageObject = [UMSocialMessageObject messageObject];
    //創建網頁內容對象
    NSString* thumbURL =  @"https://mobile.umeng.com/images/pic/home/social/img-1.png";
    UMShareWebpageObject *shareObject = [UMShareWebpageObject shareObjectWithTitle:@"歡迎使用【友盟+】社會化組件U-Share" descr:@"歡迎使用【友盟+】社會化組件U-Share,SDK包最小,集成成本最低,助力您的產品開發、運營與推廣!" thumImage:thumbURL];
    //設置網頁地址
    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) {
            UMSocialLogInfo(@"************Share fail with error %@*********",error);
        }else{
            if ([data isKindOfClass:[UMSocialShareResponse class]]) {
                UMSocialShareResponse *resp = data;
                //分享結果消息
                UMSocialLogInfo(@"response message is %@",resp.message);
                //第三方原始返回的數據
                UMSocialLogInfo(@"response originalResponse data is %@",resp.originalResponse);
            }else{
                UMSocialLogInfo(@"response data is %@",data);
            }
        }
    }];
}

 

  • 圖片
- (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);
        }
    }];
}

 

  • 文本
- (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);
        }
    }];
}

 

  • 表情(GIF圖片,即Emotion類型,只有微信支持)
- (void)shareEmoticonToPlatformType:(UMSocialPlatformType)platformType{
    UMSocialMessageObject *messageObject = [UMSocialMessageObject messageObject];
    UMShareEmotionObject *shareObject = [UMShareEmotionObject shareObjectWithTitle:UMS_Title descr:UMS_Text thumImage:nil];
    NSString *filePath = [[NSBundle mainBundle] pathForResource:@"gifFile"
                                                         ofType:@"gif"];
    NSData *emoticonData = [NSData dataWithContentsOfFile:filePath];
    shareObject.emotionData = emoticonData;
    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{
            if ([data isKindOfClass:[UMSocialShareResponse class]]) {
                UMSocialShareResponse *resp = data;
                //分享結果消息
                NSLog(@"response message is %@",resp.message);
            }else{
                NSLog(@"response data is %@",data);
            }
        }
    }];
}

 

  • 圖文(包含一張圖片和一段文本)
- (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);
        }
    }];
}

 

  • 視頻(只支持視頻URL 、縮約圖及描述)
- (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);
        }
    }];
}

 

  • 音樂(只支持視頻URL 、縮約圖及描述)
- (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);
        }
    }];
}
  • 分享微信小程序
- (void)shareMiniProgramToPlatformType:(UMSocialPlatformType)platformType
{
    //創建分享消息對象
    UMSocialMessageObject *messageObject = [UMSocialMessageObject messageObject];
    UMShareMiniProgramObject *shareObject = [UMShareMiniProgramObject shareObjectWithTitle:@"小程序標題" descr:@"小程序內容描述" thumImage:[UIImage imageNamed:@"icon"]];
    shareObject.webpageUrl = @"兼容微信低版本網頁地址";
    shareObject.userName = @"小程序username,如 gh_3ac2059ac66f";
    shareObject.path = @"小程序頁面路徑,如 pages/page10007/page10007";
    messageObject.shareObject = shareObject;
    shareObject.hdImageData = [NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"logo" ofType:@"png"]];
    shareObject.miniProgramType = UShareWXMiniProgramTypeRelease; // 可選體驗版和開發板
    //調用分享接口
    [[UMSocialManager defaultManager] shareToPlatform:platformType messageObject:messageObject currentViewController:self completion:^(id data, NSError *error) {
        if (error) {
            UMSocialLogInfo(@"************Share fail with error %@*********",error);
        }else{
            if ([data isKindOfClass:[UMSocialShareResponse class]]) {
                UMSocialShareResponse *resp = data;
                //分享結果消息
                UMSocialLogInfo(@"response message is %@",resp.message);
                //第三方原始返回的數據
                UMSocialLogInfo(@"response originalResponse data is %@",resp.originalResponse);
            }else{
                UMSocialLogInfo(@"response data is %@",data);
            }
        }
        [self alertWithError:error];
    }];
}

四,調試模式與日誌

 

相關文章:

友盟分享小結 - iOS

iOS 友盟分享(微信)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章