基于友盟使用Swift3.0集成分享功能和第三方登录
很多APP都有分享的功能和第三方登录,今天就基于友盟的基础上快速的集成一下。
第一、根据官网的文档配置工程,这里我选择利用CocoaPods配置所需文件。CocoaPods的使用教程
第二、所需平台的配置信息配置(略,可以参考官方文档)
第三、iOS9适配及其其他一些相关配置
1、iOS9网络适配 --> 在info.plist中添加
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
2、在info.plist中配置白名单,这里是列出了部分,有需要的自己添加对应的平台
<key>LSApplicationQueriesSchemes</key>
<array>
<string>sinaweibo</string>
<string>sinaweibohd</string>
<string>weibosdk2.5</string>
<string>weibosdk</string>
<string>sinaweibosso</string>
<string>mqqOpensdkSSoLogin</string>
<string>mqzone</string>
<string>sinaweibo</string>
<string>alipayauth</string>
<string>alipay</string>
<string>safepay</string>
<string>mqq</string>
<string>mqqapi</string>
<string>mqqopensdkapiV3</string>
<string>mqqopensdkapiV2</string>
<string>mqqapiwallet</string>
<string>mqqwpa</string>
<string>mqqbrowser</string>
<string>wtloginmqq2</string>
<string>weixin</string>
<string>wechat</string>
</array>
3、在Info->URL Types 中添加 URL Schemes,这一步很接单具体见官方文档
第四、代码编写
1、在桥接文件中导入对应的头文件
2、在AppDelegate中配置信息
//设置友盟社会化组件appkey
UMSocialData.setAppKey("youkey")
//设置微信AppId、appSecret,分享url
UMSocialWechatHandler.setWXAppId("appid", appSecret: "youSecret", url: "url")
//设置手机QQ 的AppId,Appkey,和分享URL,需要#import "UMSocialQQHandler.h"
UMSocialQQHandler.setQQWithAppId("appid", appKey: "appkey", url: "url")
//打开新浪微博的SSO开关,设置新浪微博回调地址,这里必须要和你在新浪微博后台设置的回调地址一致。需要 #import "UMSocialSinaSSOHandler.h"
UMSocialSinaSSOHandler.openNewSinaSSO(withAppKey: "key", secret: "secret", redirectURL: "url")
// 隐藏指定没有安装客户端的平台
UMSocialConfig.hiddenNotInstallPlatforms([UMShareToWechatSession, UMShareToWechatTimeline, UMShareToQzone, UMShareToQQ, UMShareToSina])
// 回调方法
func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: AnyObject) -> Bool {
let result = UMSocialSnsService.handleOpen(url)
return result;
}
3、配置使用默认UI分享按钮触发的事件
// 点击分享按钮触发的事件,默认的UI界面分享
@IBAction func shareBtn(_ sender: AnyObject) {
UMSocialData.default().extConfig.title = "分享的title"
UMSocialData.default().extConfig.qqData.url = url
UMSocialData.default().extConfig.qzoneData.url = url
UMSocialData.default().extConfig.wechatSessionData.url = url
UMSocialData.default().extConfig.wechatTimelineData.url = url
UMSocialData.default().urlResource.setResourceType(UMSocialUrlResourceTypeDefault, url: url)
UMSocialSnsService.presentSnsIconSheetView(self, appKey: "友盟的appkey", shareText: "分享连接", shareImage: UIImage.init(named: "pic.png"), shareToSnsNames: [UMShareToQQ, UMShareToQzone, UMShareToWechatSession, UMShareToWechatTimeline, UMShareToSina], delegate: self)</span>
}
4、分享的代理监测
// 分享回调代理。如果不想监测可以把上面的代理设置为nil
extension ViewController: UMSocialUIDelegate {
// 各个页面执行授权完成、分享完成、或者评论完成时的回调函数
func didFinishGetUMSocialData(inViewController response: UMSocialResponseEntity!) {
print("didFinishGetUMSocialDataInViewController -- 各个页面执行授权完成、分享完成、或者评论完成时的回调函数")
if response.responseCode == UMSResponseCodeSuccess {
print("分享成功 response = \(response)")
}
}
// 自定义关闭授权页面事件
func closeOauthWebViewController(_ navigationCtroller: UINavigationController!, socialControllerService: UMSocialControllerService!) -> Bool {
print("closeOauthWebViewController -- 自定义关闭授权页面事件")
return true
}
// 关闭当前页面之后
func didCloseUIViewController(_ fromViewControllerType: UMSViewControllerType) {
print("didCloseUIViewController -- 关闭当前页面之后")
}
// 点击分享平台
func didSelectSocialPlatform(_ platformName: String!, with socialData: UMSocialData!) {
print("didSelectSocialPlatform -- 点击分享平台")
}
}
5.自定义界面按钮分享,将一下代码写在对应的按钮事件下面
方式一:使用下面的代码即可,修改平台名字即可实现其他方式的分享
// 新浪的连接直接写入到分享文字中就行
UMSocialControllerService.default().setShareText("text", shareImage: UIImage(named: "pic.png"), socialUIDelegate: nil)
UMSocialSnsPlatformManager.getSocialPlatform(withName: UMShareToSina).snsClickHandler(self, UMSocialControllerService.default(), true)
方式二:
let resource = UMSocialUrlResource.init(snsResourceType: UMSocialUrlResourceTypeDefault, url: "url")
UMSocialDataService.default().postSNS(WithTypes:"types", content: "分享内容", image: UIImage(named: "pic.png"), location: nil, urlResource: resource, presentedController: self) { (shareResponse) in
if shareResponse.responseCode == UMSResponseCodeSuccess {
print("分享成功")
}
}
第五、第三方登录
1、QQ登录
2、微信登录
@IBAction func clickQQLogin(_ sender: AnyObject) {
let snsPlatform = UMSocialSnsPlatformManager.getSocialPlatform(withName: UMShareToQQ)
snsPlatform?.loginClickHandler(self, UMSocialControllerService.default(), true, {response in
if response?.responseCode == UMSResponseCodeSuccess {
// 获取信息与自己的登录系统对接数据
let dataDic: NSDictionary = UMSocialAccountManager.socialAccountDictionary()
print("QQ ------ dataDic = \(dataDic)")
let snsAccount = dataDic.value(forKey: (snsPlatform?.platformName)!)
print("QQ ------- snsAccount = \(snsAccount)")
}
})
}
@IBAction func clickWeChatLogin(_ sender: AnyObject) {
let snsPlatform = UMSocialSnsPlatformManager.getSocialPlatform(withName: UMShareToWechatSession)
snsPlatform?.loginClickHandler(self, UMSocialControllerService.default(), true, {response in
if response?.responseCode == UMSResponseCodeSuccess {
// 获取信息与自己的登录系统对接数据
let dataDic: NSDictionary = UMSocialAccountManager.socialAccountDictionary()
print("WeChat ------ dataDic = \(dataDic)")
let snsAccount = dataDic.value(forKey: (snsPlatform?.platformName)!)
print("WeChat ------ snsAccount = \(snsAccount)")
}
})
}
3、新浪登录
@IBAction func clickSinaLogin(_ sender: AnyObject) {
let snsPlatform = UMSocialSnsPlatformManager.getSocialPlatform(withName: UMShareToSina)
snsPlatform?.loginClickHandler(self, UMSocialControllerService.default(), true, {response in
if response?.responseCode == UMSResponseCodeSuccess {
// 获取信息与自己的登录系统对接数据
let dataDic: NSDictionary = UMSocialAccountManager.socialAccountDictionary()
print("Sina ------ dataDic = \(dataDic)")
let snsAccount = dataDic.value(forKey: (snsPlatform?.platformName)!)
print("Sina ------- snsAccount = \(snsAccount)")
}
})
}
第六、在集成分享的过程中经常遇到的问题
1、警告
object file (Pods/UmengSocialCOM/Umeng_SDK_Social_iOS_ARM64_5.2.1/UMSocial_Sdk_Extra_Frameworks/AlipayShare/libAPOpenSdk.a(APOpenAPIObject.o)) was built for newer iOS version (8.1) than being linked (8.0)
将项目的工程target的版本改为最小8.1 就行了
2、控制台打印如下类似信息
-canOpenURL: failed for URL: "weixin:" - error: "(null)
有可能你没有配置白名单,也有可能是你没有安装对应平台
以上便是分享和三方登录的基本流程了