在 iOS 开发中,社交分享或者第三方授权登录已经是一个常见的功能了,当我们需要快速集成多个平台的分享或者登录的时候,如果把一个个的第三方 SDK 导入工程项目里,费时费力还容易出错,这个时候我们使用 ShareSDK、友盟等第三方的分享平台可以快速在项目中集成多个社交平台的分享或者授权登录
下面就介绍一下如何在 iOS 项目中集成和使用友盟,本文使用的是最新版的友盟 U-Share SDK v6.4.3,SDK 的集成文档十分详细,本文只是做一个简单的整理和归纳
U-Share SDK 集成与配置
通过 Cocoapods 集成
友盟支持手动集成和通过 Cocoapods 两种方式集成,手动集成需要手动倒入 SDK、配置参数以及添加各种依赖库,操作起来比较麻烦,本文只介绍通过 Cocoapods 集成,手动集成可以参考官方文档
Cocoapods 的安装本文不做介绍,网上有很多资料了
首先从终端 cd 到项目根目录,执行下面的命令
|
|
接着项目根目录下吗面就添加好了一个 Podfile
文件,用 vim 打开这个文件
|
|
Cocoapods 集成 U-Share SDK 可灵活配置平台,可选添加以下平台代码到 Podfile
文件中:
|
|
友盟集成了国内外很多个社交平台,我们只需根据自己项目的情况,集成需要的的平台即可
接着在项目根目录更新 U-Share SDK
|
|
我们还可以使用 pod search
命令检查 U-Share SDK及其最新版本
|
|
Cocoapods 集成遇到问题请参考 更新Cocoapods常见问题
配置SSO白名单
如果你的应用使用了如 SSO 授权登录或跳转到第三方分享功能,在iOS9/10 下就需要增加一个可跳转的白名单,即LSApplicationQueriesSchemes
,否则将在 SDK 判断是否跳转时用到的canOpenURL 时返回 NO,进而只进行webview授权或授权/分享失败。 在项目中的 info.plist
中加入应用白名单,右键info.plist
选择 source code
打开(plist
具体设置在Build Setting -> Packaging -> Info.plist File
可获取plist
路径) 请根据选择的平台进行配置:
|
|
配置 URL Scheme
URL Scheme 是通过系统找到并跳转对应 App 的一类设置,通过向项目中的 info.plist
文件中加入 URL types
可使用第三方平台所注册的 appkey 信息向系统注册你的 App,当跳转到第三方应用授权或分享后,可直接跳转回你的 App
添加 URL Types
可在工程设置面板设置,如下:
配置第三方平台 URL Scheme,未列出则不需设置
平台 | 格式 | 举例 | 备注 |
---|---|---|---|
微信 | 微信appKey | wxdc1e388c3822c80b | |
QQ/Qzone | 需要添加两项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 | dingoalmlnohc0wggfedpk | identifier的参数都使用dingtalk |
易信 | 易信appkey | yx35664bdff4db42c2b7b e1e29390c1a06 |
|
点点虫 | 点点虫appID | 8112117817424282305 | URL Type中的identifier填”Laiwang” |
领英 | “li”+appID | li4768945 | |
“fb”+FacebookID | fb506027402887373 | ||
VKontakte | “vk”+ VKontakteID | vk5786123 |
新浪微博事儿比较多,如果发现使用微博分享发现有问题,请参考新浪微博集成说明
官方文档还有部分平台集成的 特别说明
初始化设置
通过前面几步之后,SDK 和 配置都就绪后,就开始进行U-Share和第三方平台的初始化工作
获取友盟 AppKey
首先需要注册并登录友盟账号之后,在我的产品中,找到 U-Share,然后选择立即使用
选择添加应用
填写应用基本信息,然后提交并获取 AppKey
然后就获得了这个应用对应的 AppKey
之后再去你需要集成的各大第三方平台注册自己帐号并且添加自己的应用,各大平台也都大同小异的会给你一个对应这个应用的 AppKey 和 AppSecret,这些 AppKey 和 AppSecret 会在友盟初始化平台的时候使用到
初始化U-Share及第三方平台
上面说了一大堆,终于开始进入正题,开始写代码了,首先在 AppDelegate.m
中设置如下代码
|
|
添加系统回调方法
添加系统回调方法一共有三个,下面这个方法支持全部 iOS 系统
|
|
注:以上方法为建议使用的系统openURL回调方法,且 新浪 平台仅支持以上方法的回调
还有以下两种回调方法
|
|
注:上面的回调方法仅支持 iOS9 以上系统,iOS8及以下系统不会回调
|
|
注:这个回调方法支持全部iOS系统,但是 iOS9 之后就废弃了
分享到第三方平台
友盟分享目前支持的类型有:
- 网页类型(网页链接)
- 图片
- 文本
- 表情(GIF图片,即Emotion类型,只有微信支持)
- 图文(包含一张图片和一段文本)
- 视频(只支持视频URL、缩略图及描述)
- 音乐(只支持音乐URL、缩略图及描述)
分享文本
|
|
调用友盟的分享接口的时候需要传入一个 UMSocialPlatformType
,表示分享的内容需要分享到那个平台,这是一个枚举类型,里面对应了分享平台的类型,下面列举部分:
|
|
分享图片
|
|
分享图文(新浪支持,微信/QQ仅支持图或文本分享)
|
|
分享网页
|
|
分享音乐
|
|
分享视频
|
|
分享微信小程序
我目前没法测试分享微信小程序,所以无法验证开发文档中的代码的效果
|
|
友盟分享注意事项
1.分享的图片地址如果是 HTTP 而不是 HTTPS SDK 会报错
|
|
需要在 AppDelegate.m
里设置
|
|
2.未安装新浪微博客户端使用微博分享是会出现微博登录界面一闪而过或者直接报错无法调起微博登录授权界面,这是由于新浪微博 SDK 还未更新 ATS 的支持,故目前需要对其进行配置,把新浪微博的 HTTP 地址添加进 ATS 的白名单, 右键 info.plist
选择用 Source Code
打开,然后添加如下代码:
|
|
或者你也可以更加暴力的完全禁止 ATS
|
|
但是不建议这种方式,毕竟现在苹果现在对App的审核要求是全部使用HTTPS,为了避免审核出现被拒的情况,建议 APP 所以的请求都采用 HTTPS,如果一些涉及到第三方还在采用 HTTP 的时候就按照上面微博的情况添加到白名单
关于 ATS 的问题可以参看喵神的博文 关于iOS 10 中 ATS 的问题
3.App 引入第三方分享或授权登录的时候必须检测该平台是否已经安装并且支持分享,App时候只显示已经安装的平台,否则苹果审核可能会被拒,UMSocialManager
提供了检测平台是否已经安装和是否支持分享的方法
|
|
友盟分享面板UI
分享面板的使用
友盟提供了自己的分享面板UI,如果项目中没有要求可以使用友盟自带的分享面板,使用起来非常简单
|
|
注:
setPreDefinePlatforms
传入的平台必须是合法并且是core模块已经检测到的已经存在的平台,不然会被过滤掉(此条款是上线AppStore审核的条件)
分享面板 UI 的定制
友盟的分享面板由四个主体控件组成,可以根据自己的需求来自定义这四个控件;
- UMSocialShareTitleView title控件,对应的配置类 –> UMSocialShareTitleViewConfig
- UMSocialSharePageScrollView 分页控件,对应的配置类 –> UMSocialSharePageScrollViewConfig
- UMSocialSharePageControl PageControl控件,对应的配置类 –> UMSocialSharePageControlConfig
- UMSocialShareCancelControl CancelControl控件,对应的配置类 –> UMSocialShareCancelControlConfig
用户通过修改每个对应的控件对应相应的配置类的参数来控制控件的外观
UMSocialShareTitleViewConfig
的参数如下:
|
|
UMSocialSharePageScrollViewConfig
的参数如下:
|
|
UMSocialSharePageControlConfig
的参数如下:
|
|
UMSocialShareCancelControlConfig
的参数如下:
|
|
假如要修改当前分享面板为:无titleview,面板显示再中间,肖像模式下的2行3列,风景模式2行6列,没有取消控件,在调用显示分享面板的时候添加如下代码即可:
|
|
分享面板的其他功能使用可以参考官方文档:分享面板UI
第三方登录集成
第三方登录主要用于简化用户登录流程,通过用户拥有的微博、QQ、微信等第三方账号进行登录,最终通过调用登录接口,获取用户在第三方平台的用户ID、头像等资料完成自己App账号体系的构建
支持的平台:
- 国内平台 微信、QQ、新浪、腾讯微博、人人网、豆瓣
- 国外平台 Facebook、Twitter、linkedIn、Kakao
在需要进行获取登录信息的控制器中加入如下代码:
|
|
授权登录成功后,第三方平台会将用户资料传回,由于各个平台对于用户资料的标识不同,因此为了便于开发者使用,友盟将一些常用的字段做了统一封装,开发者可以直接获取,不再需要对不同平台的不同字段名做转换,这里列出封装的字段及含义:
UShare封装后字段名 | QQ原始字段名 | 微信原始字段名 | 新浪原始字段名 | 字段含义 | 备注 |
---|---|---|---|---|---|
uid | openid | unionid | id | 用户唯一标识uid如果要实现 Android 与 iOS 平台打通,必须确保为统一APPID | |
name | screen_name | screen_name | screen_name | 用户昵称 | |
gender | gender | gender | gender | 用户性别 | 该字段会直接返回男女 |
iconurl | profile_image_url | profile_image_ur | profile_image_url | 用户头像 |
以上就是友盟分享 U-Share 的集成与使用,基本都是来自官方文档,官方文档写的很详细,集成过程中遇到问题和错误在文档中基本可以找得到解决的办法
本人刚开始写博客,主要是为了给自己的知识点做一个笔记,方便自己以后查阅,如果能让别人有所启发也是荣幸之至!如有错误,欢迎指正!