React Native 接入微博、微信、QQ 登录功能

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

使用的登录组件

这里使用的组件是 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 的设置

项目中两个地https://oindk07nf.qnssl.comate.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 登录通用组件就可以完美地使用了。
使用中有任何问题欢迎留言交流、讨论。

EOF

转载须以超链接形式标明文章原始出处和作者信息

自动将博客园文章导出到 Markdown 文件

此文主要分享了如何将自己博客园的文章自动导出到 Markdown 文档进行存储,以便在本地进行归档管理,程序中也对文章的分类、tag、代码块以及文章中的图片进行了保存处理,以便上传到自己的图床。
基于 C# 语言开发,测试调用为 C# Console 程序。

多说评论系统API调用和本地身份说明(JWT)

多说评论系统 是一个非常好用的第三方评论插件,聚合了大多数的 SNS 平台账号登录和分享功能,UI 也很不错。
作为网站快速接入评论系统,多说是一个比较好的选择,其也提供了一些实用的 API 去满足定制化需求。
多说 API 支持将本地的用户基本信息同步到多说服务器,实现了本地用户系统和多说用户验证机制的一致。
大概的过程:在用户注册或者修改个人信息的时候将用户信息同步至多说服务器,并在用户登录后在本地 cookie 写入 JWT 值,多说可以进行判断而实现用户无需再登录多说系统就可以进行评论。

.NET 性能调优之二:使用 Visual Studio 进行代码度量

在这篇文章里,暂且抛开代码、数据库和网络的优化,从软件代码度量的角度来看看其对 .NET 性能调优的作用。
当软件项目异常庞大的时候,通过简单的 CodeReview 进行软件复杂度估量和可靠性评测已经变得不太现实,还好有软件来完成这些事情。降低软件的复杂度也会对性能调优带来很大的帮助。

.NET 性能调优之一:ANTS Performance Profiler 的使用

在使用 .NET 进行快速地上手与开发出应用程序后,接下来面临的问题可能就是程序性能调优方面的问题,而性能调优有时候会涉及方方面面的问题,如程序宿主系统、数据库、网络环境等等,而当程序异常庞大复杂的时候,性能调优将变得更加无从下手。本系列文章主要会介绍一些 .NET 性能调优的工具、Web 性能优化的规则(如 YSlow )及方法等等内容。

MVC3 缓存之二:页面缓存中的局部动态

在之前的文章中我们讨论了MVC中使用页面缓存的一些方法,而其中由于页面缓存的粒度太粗,不能对页面进行局部的缓存,或者说,如果我们想在页面缓存的同时对局部进行动态输出该怎么办?下面我们看下这类问题的处理。

Top