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];

还有其他的一些常见问题,可以参考文档: 友盟分享文档

posted @ 2018-11-09 17:53  星辰之力  阅读(1693)  评论(0编辑  收藏  举报