swift-友盟分享

分享、推送、支付不知做过多少遍了,却从来没总结过,然后每次再做的时候又是各种看文档,很是繁琐,索性抽空来总结一下,方便以后使用

本篇文章主要包含以下几个模块
1:友盟分享的集成
2:友盟分享与支付宝、微信支付冲突解决
3:分享模块代码封装

友盟文档说明

友盟分享、推送、统计都有以下三个依赖库,其中'UMCCommon'必须集成,其他两个是可选项
``

pod 'UMCCommon'
pod 'UMCSecurityPlugins'//可选项:安全组件,有效的防止刷量和反作弊等行为
pod 'UMCCommonLog'//可选项:日志库,调试使用,可测试时集成,上线时删除


也就是说不管你集成分享、推送、统计中的一个或多个,这个依赖库必须添加

友盟统计SDK

 pod 'UMCAnalytics'

友盟推送SDK

pod 'UMCPush'


友盟分享SDK

# U-Share SDK UI模块(分享面板,建议添加)
pod 'UMCShare/UI'

# 集成微信(精简版0.2M)
pod 'UMCShare/Social/ReducedWeChat'

# 集成微信(完整版14.4M)
pod 'UMCShare/Social/WeChat'

# 集成QQ/QZone/TIM(精简版0.5M)
pod 'UMCShare/Social/ReducedQQ'

# 集成QQ/QZone/TIM(完整版7.6M)
pod 'UMCShare/Social/QQ'

# 集成新浪微博(精简版1M)
pod 'UMCShare/Social/ReducedSina'

# 集成新浪微博(完整版25.3M)
pod 'UMCShare/Social/Sina'

# 集成Facebook/Messenger
pod 'UMCShare/Social/Facebook'

# 集成Twitter
pod 'UMCShare/Social/Twitter'

# 集成支付宝
pod 'UMCShare/Social/AlipayShare'

# 集成钉钉
pod 'UMCShare/Social/DingDing'

# 集成豆瓣
pod 'UMCShare/Social/Douban'

# 集成人人
pod 'UMCShare/Social/Renren'

# 集成腾讯微博
pod 'UMCShare/Social/TencentWeibo'

# 集成易信
pod 'UMCShare/Social/YiXin'

# 集成Flickr
pod 'UMCShare/Social/Flickr'

# 集成Kakao
pod 'UMCShare/Social/Kakao'

# 集成Tumblr
pod 'UMCShare/Social/Tumblr'

# 集成Pinterest
pod 'UMCShare/Social/Pinterest'

# 集成Instagram
pod 'UMCShare/Social/Instagram'

# 集成Line
pod 'UMCShare/Social/Line'

# 集成WhatsApp
pod 'UMCShare/Social/WhatsApp'

# 集成有道云笔记
pod 'UMCShare/Social/YouDao'

# 集成印象笔记
pod 'UMCShare/Social/EverNote'

# 集成Google+
pod 'UMCShare/Social/GooglePlus'

# 集成Pocket
pod 'UMCShare/Social/Pocket'

# 集成DropBox
pod 'UMCShare/Social/DropBox'

# 集成VKontakte
pod 'UMCShare/Social/VKontakte'

# 集成邮件
pod 'UMCShare/Social/Email'

# 集成短信
pod 'UMCShare/Social/SMS'


友盟cocoapods集成分享、推送、统计 "说明文档" 链接

一:集成友盟分享

友盟分享
项目中分享使用了微信、微信朋友圈、QQ、QQ空间,分享页面是自定义的,所以不需要集成 pod 'UMCShare/UI'

1: 想实现分享功能,你需要到相应的开放平台注册应用获取需要的appKey/appID、appSecret

以微信为例

首先进入 微信开放平台 注册应用,通过审核后获取appID、appSecret(前端不需要),然后上传app的Bundle ID,如果需要微信登录功能,需要申请微信登录权限,注意微信登录有效期为一年,需要按时在微信平台认证

项目微信开放平台图片.jpeg
友盟官方提供的实例图.jpeg

实际图.jpeg

因为qq互联开放平台不是使用自己的qq号注册的,所以暂不演示了值得说明的是QQ及Qzone使用同一个AppID及App-key

pod中相关库.jpeg

至于分享为什么用精简版,后面会有说明

2:项目配置

以下为友盟提供的项目配置流程:

在Other Linker Flags加入-ObjC ,注意不要写为-Objc

友盟提供设置objc.jpeg

-ObjC属于链接库必备参数,如果不加此项,会导致库文件无法被正确链接,SDK无法正常运行

加入依赖系统库

友盟提供添加依赖库.jpeg

//不是只添加这两个依赖库的,还需要根据你分享的平台按需添加相应平台分享功能的依赖库,如下说明
libsqlite3.tbd
CoreGraphics.framework


然后不同的分享平台(有的拥有完整版/精简版区别)需要添加的依赖库也不尽相同,可参考 U-Share集成文档 按照自己的需求添加

3:配置SSO白名单

如果你的应用使用了如SSO授权登录或跳转到第三方分享功能,在iOS9/10下就需要增加一个可跳转的白名单,即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 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>fb-messenger-share-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>

<!-- 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>

<!-- Twitter-->
<string>twitter</string>
<string>twitterauth</string>
</array>


按需配置吧

4:配置URL Scheme

URL Scheme是通过系统找到并跳转对应app的一类设置,通过向项目中的info.plist文件中加入URL types可使用第三方平台所注册的appkey信息向系统注册你的app,当跳转到第三方应用授权或分享后,可直接跳转回你的app。

添加URL Types的工程面板设置

WechatIMG20976.jpeg

微信:wx+appID
qq需要添加两个,如下
1、"tencent"+腾讯QQ互联应用appID//例如:tencent100424468 
//转换方法终端中输入 echo 'ibase=10;obase=16;"你的appID"'|bc回车
2、“QQ”+腾讯QQ互联应用appID转换成十六进制(不足8位前面补0)//例如:QQ05fc5b14
微博:wb+appID


更多配置看这里

我项目中的配置如下:

项目实际Types设置.jpeg

这样,友盟分享的准备工作就完成了,开始在项目中使用

5:项目中实现分享

因为我项目是使用swift写的,所以需要在桥接文件中倒入如下配置


桥接文件中倒入相应的库.jpeg

然后就是友盟的初始化设置,并配置需要分享的平台信息

//设置友盟appKey
UMConfigure.initWithAppkey(umengAppKey, channel: "App Store")
//打开日志
UMConfigure.setLogEnabled(true)
//配置分享平台信息
self.configUMShareSetting()


func configUMShareSetting(){
    //微信
    UMSocialManager.default()?.setPlaform(UMSocialPlatformType.wechatSession, appKey: WXAppID, appSecret: nil, redirectURL: nil)
    //qq
    UMSocialManager.default()?.setPlaform(UMSocialPlatformType.QQ, appKey: QQAppID, appSecret: nil, redirectURL: nil)
    //qqZone
    UMSocialManager.default()?.setPlaform(UMSocialPlatformType.qzone, appKey: QQAppID, appSecret: nil, redirectURL: nil)
}


设置回调方法

func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
    let result:Bool = UMSocialManager.default()?.handleOpen(url, options: options) ?? false
    if !result {
        //其他如支付等回调
    }
    return result
}


然后在需要调用分享的地方实现如下类似的方法

func sendDataToSharePlatform(type:UMSocialPlatformType,dic:NSDictionary,presentVc:UIViewController){
    
    let image:UIImage = UIImage(named: dic["image"] as! String)!
    let text:NSString = dic["text"] as! NSString
    var urlStr:NSString = dic["url"] as! NSString
    let titleStr:NSString = dic["title"] as! NSString
    if urlStr.length <= 0 {
        urlStr = "https://h5.51jiashuju.com"
    }
    let messageObject = UMSocialMessageObject.init()
    messageObject.text = text as String
    let shareObject:UMShareWebpageObject = UMShareWebpageObject.shareObject(withTitle: titleStr as String, descr: text as String, thumImage: image)
    shareObject.webpageUrl = urlStr as String
    messageObject.shareObject = shareObject
    //分享调用接口
    UMSocialManager.default()?.share(to: type, messageObject: messageObject, currentViewController: presentVc, completion: { (data, error) in
        if error != nil{
            MBProgressHUD.showSuccess("分享失败")
        }else{
            MBProgressHUD.showSuccess("分享成功")
        }
    })
}


效果图

项目实际分享效果图.jpeg

事实上,我们项目中在不同页面的分享会有不同的展示选项,而且手机未安装的app自然是不会显示出来,所以我写了一个枚举传一个数组进来实现的分享面板自定义布局

protocol WEShareManageViewDelegate:NSObjectProtocol {
    func removeShareView()
    func chooseShareButton(typy:WESharePlamtType)
}

enum WESharePlamtType:NSInteger {
    case WESharePlamtTypeUnKnown      = -1 //未知
    case WESharePlamtTypeWeixin       = 0  //微信
    case WESharePlamtTypeFriends      = 1  //微信朋友圈
    case WESharePlamtTypeQQ           = 2  //qq
    case WESharePlamtTypeQQFriends    = 3  //qq朋友圈
    case WESharePlamtTypeCopy         = 4  //复制链接
    case WESharePlamtTypeNOInterested = 5  //不感兴趣
    case WESharePlamtTypeReport       = 6  //举报
    case WESharePlamtTypeDelete       = 7  //删除
}


以后有时间,会将封装的功能放上来,非常简洁明了,可以直接拿来使用

6:关于友盟分享与微信支付、支付宝支付冲突问题的解决

1:微信分享 和 微信支付 的冲突

项目中微信支付和分享都是使用的pods集成,如果微信分享使用完整版就会跟微信支付有重复文件的冲突,所以选择微信分享精简版是完美的解决方案

总结:在集成 "微信支付" 的情况下必须选择 "微信分享精简版"(都使用pod集成)

2:友盟分享 和 支付宝支付 的冲突

友盟分享和支付宝支付冲突.jpeg

错误显示有34个重复文件,关于UTDID冲突,解决办法如下:


解决友盟分享和支付宝支付冲突问题.png

支付宝SDK是拖入项目中的,所以替换掉使用的支付宝SDK(使用下面那个)就好了

总结:如果同时集成"友盟分享"和"支付宝支付"的功能,支付宝sdk请选择上图下面那个(解决UTDID冲突)

支付宝SDK下载地址

最后再说明一个无脑问题,如果你没在项目中判断是否安装某某app来进行显示与隐藏的情况下,有时你会收到canOpenURL: failed for URL: “weixin://,并不一定是你配置白名单的问题,而是你手机根本就没安装你要分享到的那个app!!!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,029评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,395评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,570评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,535评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,650评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,850评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,006评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,747评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,207评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,536评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,683评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,342评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,964评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,772评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,004评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,401评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,566评论 2 349

推荐阅读更多精彩内容