在 App 开发中我们经常需要在用户登录模块接入 SNS 登录组件,这样会大大提高用户的注册体验。特别当一个不是刚性需求 App 推广的时候,这样会很大的降低用户体验的成本,没有人愿意忍受输入邮箱、手机号码去注册一个账号的流程。

本文主要分享了在 React Native 中接入微博、微信、QQ 登录的流程,以及此前登录组件中修复的一个已知 bug 的修复。

我的源博客地址:http://blog.parryqiu.com/2016/01/27/react_native_sns_weibo_wechat_qq_login/

使用的登录组件

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

项目接入

项目前期具体接入的过程在项目页面已经做了详细的说明,如果在接入过程中遇到什么问题欢迎留言讨论。

这里主要针对接入过程中可能需要注意的几个点作一些说明。

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

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

    平台对应的地址分别为:新浪微博微信QQ

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

项目中两个地方需要设置key,分别为 Info.plistAppDelegate.m 中。

需要注意的是,在 Info.plist 中,key 的前面是有前缀的,按照示例程序中的添加修改即可,一定要注意。

新浪微博需要特别注意,授权回调页的 URL 需要和登录组件中的 URL 完全一致,因为 App 不涉及到回调后的页面,所以只要保证两个 URL 一致并能访问即可。

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

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

React Native 中的使用

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

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 的时候报错,错误如下:

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

主要的出错代码在文件 SocietyLoginManager.m 中的约 112 行处。

所以对返回的数据增加对应的日期格式化函数,并调用即可。

主要的处理函数,相关的调用去查看源代码即可。

//处理 返回数据中的 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 的格式要求。 ********结束********

这样,这个 React Native 下的 SNS 登录通用组件就可以完美地使用了。

使用中有任何问题欢迎留言交流、讨论。

React Native 接入微博、微信、QQ 登录功能的更多相关文章

  1. h5 网页版的微博微信QQ登录

    一:微博 1,先说微博吧,首先你的去http://open.weibo.com/wiki/先注册账号,通过验证审核.然后的创建网页应用.微博审核不通过的原因就是域名和网站地址,一定要按实际写的.一定要 ...

  2. Unity接入ShareSDK实现QQ登录和QQ分享、微信分享

    原文链接:Unity接入ShareSDK实现QQ登录和QQ分享.微信分享 由于微信登录需要企业审核,我这里就不说明了,有需要的可以去官网看一下文档,和QQ登录比多了一个打包的步骤. 第一步:到官网申请 ...

  3. QQ登录功能之如何获取用于本地测试的APPID

    本文主要说明一下开发者如何在QQ互联创建测试应用,从而分配给我们一套APP ID和APP KEY,在我们平时学习的时候使用. 一.QQ互联注册开发者 要想使用QQ登陆的功能,首先你必须是腾讯开发者.腾 ...

  4. 网站集成QQ登录功能

    最近在做一个项目时,客户要求网站能够集成QQ登录的功能,以前没做过这方面的开发,于是去QQ的开放平台官网研究了一下相关资料,经过自己的艰苦探索,终于实现了集成QQ登录的功能,现在把相关的开发经验总结一 ...

  5. 网站集成QQ登录功能(转)

    最近在做一个项目时,客户要求网站能够集成QQ登录的功能,以前没做过这方面的开发,于是去QQ的开放平台官网研究了一下相关资料,经过自己的艰苦探索,终于实现了集成QQ登录的功能,现在把相关的开发经验总结一 ...

  6. DRF框架QQ登录功能

    用户模块---QQ登录 流程图 QQ登录文档:http://wiki.connect.qq.com/%E5%87%86%E5%A4%87%E5%B7%A5%E4%BD%9C_oauth2-0 流程简述 ...

  7. [RN] React Native代码转换成微信小程序代码的转换引擎工具

    React Native代码转换成微信小程序代码的转换引擎工具 https://github.com/areslabs/alita

  8. java集成网站微信,微博,qq登录

    微信 WechatConfig.java package com.meeno.chemical.common.sdk.wechat.config; import org.springframework ...

  9. laravel5实现微信第三方登录功能

    背景 最近手头一个项目需要实现用户在网站的第三方登录(微信和微博),后端框架laravel5.4. 实现过程以微信网页版第三方登录,其他于此类似,在此不做重复. 准备工作 网站应用微信登录是基于OAu ...

随机推荐

  1. 天津政府应急系统之GIS一张图(arcgis api for flex)讲解(一)GIS一张图的系统开发环境以及flexviewer框架

    系统的GIS功能实现是基于arcgis api for flex,首先附上系统的主界面图,接下来的是对主界面的模块功能详细讲解: 一.GIS环境软件安装 (1)arcgis desktop的安装,要是 ...

  2. Android开发3:Intent、Bundle的使用和ListView的应用 、RelativeLayout(相对布局)简述(简单通讯录的实现)

    前言 啦啦啦~博主又来骚扰大家啦~大家是不是感觉上次的Android开发博文有点长呢~主要是因为博主也是小白,在做实验的过程中查询了很多很多概念,努力去理解每一个知识点,才完成了最终的实验.还有就是随 ...

  3. eclipse — Failed to load the JNI shared library”……\jvm.dll问题原因以及解决方案

    首先上一张出现问题的图片: 出现这个问题一般是你的jdk和eclipse不是同一位的,比如你的jdk是32位的但是eclipse下载的是64位的就会导致这种问题. 解决方案:把两者都换为32或者64位 ...

  4. IOS开发基础知识--碎片26

    1:UICollectionView如果在数据不够一屏时上下滚动 当数据不多,collectionView.contentSize小于collectionView.frame.size的时候,UICo ...

  5. PHP(第一天)

    <?php // $name='lisi'; // $age =18; //$bol =true; //$bol =false; // echo ($bol); //echo ('name is ...

  6. iPhone被盗后怎么?这篇文章只办针对iOS7后的系统

    中午准备去吃饭的时候,今天看到Tungbaby的手机被盗后怎么做?http://www.jianshu.com/p/f13f49cd9b90 碰巧我的手机也被盗了.就来分享下我的经验吧.由于我当时是在 ...

  7. mysqldump:Couldn't execute 'show create table `tablename`': Table tablename' doesn't exist (1146)

    遇到了一个错误mysqldump: Couldn't execute 'show create table `CONCURRENCY_ERRORS`': Table INVOICE_OLD.CONCU ...

  8. PHP的错误机制总结

    PHP的错误机制也是非常复杂的,做了几年php,也没有仔细总结过,现在就补上这一课. 特别说明:文章的PHP版本使用5.5.32 PHP的错误级别 首先需要了解php有哪些错误.截至到php5.5,一 ...

  9. Hadoop日常维护系列——Hadoop添加删除节点

    添加节点 1.修改host    和普通的datanode一样.添加namenode的ip 2.修改namenode的配置文件conf/slaves    添加新增节点的ip或host 3.在新节点的 ...

  10. Linux svn的搭建与使用

    Linunx svn的搭建与使........纯手打的.. 一.安装前的准备 1.1 配置yum 库 1)加载光盘 2)进入/etc/yum.repo.d目录 3)复制"rhel-debug ...