关闭

基于友盟使用Swift3.0在Xcode8.0beta版中集成分享功能和第三方登录

标签: 友盟分享第三方登录Swift分享和登录分享和第三方登录常见问题Swift3.0分享和登录
2662人阅读 评论(0) 收藏 举报
分类:

基于友盟使用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登录
@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)")
            }
        })
        
    }
2、微信登录
@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)
有可能你没有配置白名单,也有可能是你没有安装对应平台

以上便是分享和三方登录的基本流程了
 






0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:71483次
    • 积分:1320
    • 等级:
    • 排名:千里之外
    • 原创:59篇
    • 转载:4篇
    • 译文:1篇
    • 评论:16条
    最新评论