React Native极光一键登录功能记录

实现手机号一键登录功能

1、开通极光安全认证

登录极光账号,并在工作台中找到极光安全认证功能,按照引导设置集成、申请一键登录


申请时需要填一个RSA公钥

他提供了一个RSA生成工具,根据要求长度选1024bit,格式选PKCS#8,然后点生成密钥对。把生成的公钥填进上面栏里,私钥给后端,后端需要用来解密极光返回的数据。然后保存并申请开通。

2、代码集成

官方文档:https://docs.jiguang.cn/jverification/client/android_guide
ReactNative版github: https://github.com/jpush/jverification-react-native
有些配置我在之前做推送的时候已经配好了,推送开发记录://www.greatytc.com/p/9ef81a5f9f18

添加依赖:
yarn add jverification-react-native
如果项目里没有jcore-react-native,需要安装:
yarn add jcore-react-native

根据github文档补充配置:

在android/app/build.gradle添加配置

dependencies {
      ...
      implementation project(':jverification-react-native') // 添加 jverification 依赖
      implementation project(':jcore-react-native')         // (这个之前已经加了)
  }

在android/setting.gradle添加配置

include ':jverification-react-native'
project(':jverification-react-native').projectDir = new File(rootProject.projectDir, '../node_modules/jverification-react-native/android')

3、编写项目代码

API文档:JVerification React Native API.md
在你的项目里建一个JVerify模块文件,封装代码:

import JVerification from 'jverification-react-native';
import config from '@/config';  //用来拿环境变量,判断是否生产环境
import { Platform } from 'react-native';

const initParams = {
  'time': 5000,
  'appKey': 'keyCode',       //你的极光KEY,仅iOS
  'channel': 'dev',              //仅iOS
  'advertisingId': 'HgAdId',     //仅iOS
  'isProduction': config.ENV == 'production',  //仅iOS
};

class JVerificationModule {
  public init = () => {
    if(config.ENV !== 'production') {
      JVerification.setLoggerEnable(true);  //开发环境设置调试模式
    }

    JVerification.init(initParams, result => {
      //初始化完成后,直接预取手机号,提升授权打开速度
      this.perLogin();
    });
  }

  public perLogin = () => {
    JVerification.preLogin(5000, result => {
      console.log('preLogin:' + JSON.stringify(result));
    })
  }

  private setLoginUI = () => {
    /**
     * 设置授权页面样式: addLoginCustomConfig
     * 这部分样式设置参数很多,可以查看文档研究一下
     * 第二个参数接收的是自定义组件,可以在窗口中加入自定义元素
     * **/

    //IOS弹窗样式:
    const iosDialogConfig = {
      // navHidden:true,    //导航栏是否隐藏
    }
    //安卓弹窗模式
    const androidDialogConfig = {
      privacyNeedClose: true,                      //弹窗是否需要关闭按钮 
      privacyDialogTheme: [300, 400, 0, 0, false], //授权页弹窗样式;宽、高、x、y、是否底部

      /**以下是需要注意的参数,部分与文档有出入**/
      //1、privacyOne、privacyTwo 在源码中提示:过期 2.7.3+不生效,
      //用以下方法代替实现
      privacyNameAndUrlBeanList: [{
        name: "隐私协议",
        url: "url link"
      }, {
        name: "服务协议",
        url: "url link"
      }],
      privacyColor:[-8289919,-1614248],
      privacyText: ['已阅读并同意','并授权APP获得本机号码', '无用', '无用'],  //隐私条款名称外的文字(只有[0][1]用到了 😊)
      unAgreePrivacyHintToast: true,  //隐私条款checkBox未选中时,toast提示
      //其他参数可以去
      // ./node_modules/jverification-react-native/android/src/main/java/cn/jiguang/plugins/verification/common/JConstans.java
      // ./node_modules/jverification-react-native/android/src/main/java/cn/jiguang/plugins/verification/JVerificationModule.java
      //这两个文件对应着查看

      //里面所用到的图片素材,按照文档说明,放置在 android/app/src/main/res/drawable/ 目录下
    }

    const customViewParams = [
      {customViewName: 'customView1', customViewPoint: [20, 200, 150, 30]},
      {customViewName: 'customView2', customViewPoint: [20, 300, 150, 30]},
    ];   //自定义UI组件
    /** 
      * 注意: 这里的customViewName使用的name,需要在执行前注册好
      * 比如customView1可以在app初始化时使用AppRegistry.registerComponent注册
      * import {AppRegistry} from 'react-native';
      * import CustomView1 from './CustomView1';
      * AppRegistry.registerComponent('customView1', () => CustomView1);
    **/

    if(Platform.OS == 'android'){
      JVerification.addLoginCustomConfig(androidDialogConfig, customViewParams);
      } else {
      JVerification.addLoginCustomConfig(iosDialogConfig, []);
    }
  }

  public Login = () => {
    this.setLoginUI()  //登录前设置好样式
    JVerification.addLoginEventListener(this.LoginListener);  //监听活动
    if(Platform.OS == 'ios'){
        JVerification.addUncheckBoxEventListener(result => {
            console.log('UnCheckboxEvent:未选中隐私协议框');
        })
    }
     
    JVerification.login(true)
  }

  private LoginListener = (e) => {
    //监听登录结果
    if(!e) {
      return;
    }
    switch (e.code) {
      case 6000: 
        /**
         * 登录成功 {
            "operator": "CU",
            "content": "code",
            "code": 6000
          } **/
        // TODO: 把拿到的数据给后端。。。
        JVerification.removeListener(this.LoginListener)
        break;
      case 1: 
        //closed
        break;
      case 2: 
        //started
        break;
      case 3: 
        //运营商协议或自定义协议点击事件,根据content判断
        break;
      case 6: 
        //checked
        break;
      case 7: 
        //unchecked
        break;
      default: 
        console.log('LoginListener Error')
    }
  }
  
}

const JVerify = new JVerificationModule();
export default JVerify;

然后只需要在APP启动时调用JVerify.init(),然后在需要登录时调用JVerify.Login()。在监听到登录成功后,处理好后续的登录流程就好了。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,126评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,254评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,445评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,185评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,178评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,970评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,276评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,927评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,400评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,883评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,997评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,646评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,213评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,204评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,423评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,423评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,722评论 2 345

推荐阅读更多精彩内容