博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
React Native 接入微博、微信、QQ 登录功能
阅读量:4085 次
发布时间:2019-05-25

本文共 3342 字,大约阅读时间需要 11 分钟。

在 App 开发中我们经常需要在用户登录模块接入 SNS 登录组件,这样会大大提高用户的注册体验。特别当一个不是刚性需求 App 推广的时候,这样会很大的降低用户体验的成本,没有人愿意忍受输入邮箱、手机号码去注册一个账号的流程。http://www.cnblogs.com/suxun/p/5223906.html
本文主要分享了在 React Native 中接入微博、微信、QQ 登录的流程,以及此前登录组件中修复的一个已知 bug 的修复。

使用中有任何问题欢迎留言交流、讨论。http://blog.1ygowu.com ReactNative技术交流 QQ群127482131

使用的登录组件

这里使用的组件是 react-native-open-share,此组件从 iOS 的 SNS 通用登录组件  fork 出来的,添加了到 React Native 的组件映射。源作者是 ,后来我在使用的过程中发现了新浪微博登录的一个 bug,下面会说明此 bug 的原因。我 fork 出来后,修复了此 bug,修复后的项目在 ,等待源作者 merge 进 master 中去,目前需要使用的可以去我的项目地址中下载使用。

截图

项目接入

项目前期具体接入的过程在项目页面已经做了详细的说明,如果在接入过程中遇到什么问题欢迎留言讨论。
这里主要针对接入过程中可能需要注意的几个点作一些说明。

关于新浪微博、微信、QQ 接入审核的注意点

  • 三个平台都需要进行项目提交审核,一般都是一到两个工作日审核结束。
  • 新浪微博、QQ 获取登录权限是免费的,微信的登录权限(以及一些其他的高级功能)需要每年缴纳300元人民币的费用。
    平台对应的地址分别为:,,

关于项目中 key 以及认证 URL 的设置

项目中两个地方需要设置key,分别为 Info.plist 和 AppDelegate.m 中。
需要注意的是,在 Info.plist 中,key 的前面是有前缀的,按照示例程序中的添加修改即可,一定要注意。
新浪微博需要特别注意,授权回调页的 URL 需要和登录组件中的 URL 完全一致,因为 App 不涉及到回调后的页面,所以只要保证两个 URL 一致并能访问即可。

截图

组件中的 URL 地址定义在文件 SocietyLoginManager.m 中的约 105 行处。

截图

其他没有特别需要注意的地方,按照项目接入说明接入即可。

React Native 中的使用

在 React Native 通过添加三个 SNS 的图标,添加上对应的方法调用即可,代码如下:

123456 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
var openShare = require('react-native-open-share'); //头部导入组件_weiboLogin: function() { var _this = this; openShare.weiboLogin(); if (!_this.weiboLogin) { _this.weiboLogin = DeviceEventEmitter.addListener( 'managerCallback', (response) => { AlertIOS.alert( 'response', JSON.stringify(response) ); _this.weiboLogin.remove(); delete _this.weiboLogin; } ); } }, _qqLogin: function() { var _this = this; openShare.qqLogin(); if (!_this.qqLogin) { _this.qqLogin = DeviceEventEmitter.addListener( 'managerCallback', (response) => { AlertIOS.alert( 'response', JSON.stringify(response) ); _this.qqLogin.remove(); delete _this.qqLogin; } ); } }, _wechatLogin: function() { var _this = this; openShare.wechatLogin(); if (!_this.wechatLogin) { _this.wechatLogin = DeviceEventEmitter.addListener( 'managerCallback', (response) => { AlertIOS.alert( 'response', JSON.stringify(response) ); _this.wechatLogin.remove(); delete _this.wechatLogin; } ); } }

接入后就可以在 alert 中看到返回的 json 数据了。

之前组件中存在的一个 bug 处理

之前的组件,在微博返回数据的时候直接使用 NSDictionary 进行返回了,但是微博的 SDK 中返回日期类型的时候会导致 React Native 解析 json 的时候报错,错误如下:

1
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Invalid type in JSON write (__NSDate)'    *** First throw call stack:...

主要的出错代码在文件 SocietyLoginManager.m 中的约 112 行处。
所以对返回的数据增加对应的日期格式化函数,并调用即可。
主要的处理函数,相关的调用去查看源代码即可。

123456 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
//处理 返回数据中的 expirationDate 值,因为值的格式有问题,转换成 string 后才能符合 json 的格式要求。 ********开始********//Commit by Parry at 2016-01-26- (NSMutableDictionary*)change: (NSDictionary *)message { NSMutableDictionary* data = [message mutableCopy]; if ([message objectForKey:@"expirationDate"]) { NSDateFormatter *dateToStringFormatter = [[NSDateFormatter alloc] init]; [dateToStringFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; NSDate *date= [data objectForKey:@"expirationDate"]; NSString *strDate = [dateToStringFormatter stringFromDate:date]; data = [message mutableCopy]; [data setObject:strDate forKey:@"expirationDate"]; } return data; } //处理 返回数据中的expirationDate值,因为值的格式有问题,转换成 string 后才能符合 json 的格式要求。 ********结束********
你可能感兴趣的文章
【Unity】当人物主角被障碍物遮挡后,将障碍物半透明化
查看>>
【OC】oc中的多态
查看>>
【OC】@property的特性
查看>>
【OC】去除首尾字符串的方法stringByTrimmingCharactersInSet
查看>>
【OC】类的延展Extendsion
查看>>
【OC】oc中的简单单例
查看>>
frame和bounds修改大小的区别
查看>>
iOS for MVC模式
查看>>
iOS屏幕适配
查看>>
iOS 自动布局注意事项
查看>>
Visual Format Language 可视化格式语言
查看>>
Masonry基础语法
查看>>
UIScrollView的滑动原理解析
查看>>
UIScrollView的缩放原理解析
查看>>
UIScrollView的常用属性
查看>>
iOS应用新特性界面
查看>>
ScrollView自动布局技巧
查看>>
iOS双层数据模型转换
查看>>
iOS外卖星级显示
查看>>
开发笔记-商家展示界面
查看>>