美文网首页
reactnative阿里面签集成

reactnative阿里面签集成

作者: 米开朗骑騾 | 来源:发表于2019-03-28 11:12 被阅读0次

阿里文档
问题所在:

[RPSDK start:verifyToken rpCompleted:^(AUDIT auditState) {
     NSLog(@"verifyResult = %ld",(unsigned long)auditState);
     if(auditState == AUDIT_PASS) { //认证通过。
     }
     else if(auditState == AUDIT_FAIL) { //认证不通过。
     }
     else if(auditState == AUDIT_IN_AUDIT) { //认证中,通常不会出现,只有在认证审核系统内部出现超时、未在限定时间内返回认证结果时出现。此时提示用户系统处理中,稍后查看认证结果即可。
     }
     else if(auditState == AUDIT_NOT) { //未认证,用户取消。
     }
     else if(auditState == AUDIT_EXCEPTION) { //系统异常。
     }
 }withVC:self.navigationController];

self.navigationController如何拿到?

解决:
新建NSObject类
.h

#import <Foundation/Foundation.h>
#import <React/RCTBridgeModule.h>

@interface ClientModule : NSObject<RCTBridgeModule>

@end

.m

#import "ClientModule.h"
#import <RPSDK/RPSDK.h>

@implementation ClientModule

RCT_EXPORT_MODULE();

RCT_EXPORT_METHOD(startRZ:(NSString *)verifyToken resolver:(RCTResponseSenderBlock)callback){
  
  dispatch_async(dispatch_get_main_queue(), ^{
    UIViewController *vc = [UIApplication sharedApplication].keyWindow.rootViewController;
    
    [RPSDK start:verifyToken rpCompleted:^(AUDIT auditState) {
      NSLog(@"verifyResult = %ld",(unsigned long)auditState);
      if(auditState == AUDIT_PASS) { //认证通过。
        
        callback(@[@"AUDIT_PASS",@"认证通过"]);
      }
      else if(auditState == AUDIT_FAIL) { //认证不通过。
        callback(@[@"AUDIT_FAIL",@"认证不通过"]);
      }
      else if(auditState == AUDIT_IN_AUDIT) { //认证中,通常不会出现,只有在认证审核系统内部出现超时、未在限定时间内返回认证结果时出现。此时提示用户系统处理中,稍后查看认证结果即可。
        callback(@[@"AUDIT_IN_AUDIT",@"认证中"]);
      }
      else if(auditState == AUDIT_NOT) { //未认证,用户取消。
        callback(@[@"AUDIT_NOT",@"未认证"]);
      }
      else if(auditState == AUDIT_EXCEPTION) { //系统异常。
        callback(@[@"AUDIT_EXCEPTION",@"系统异常"]);
      }
    }withVC:(UINavigationController *)vc];
  });
}

@end

通过UIViewController *vc = [UIApplication sharedApplication].keyWindow.rootViewController;拿到跟视图在进行强转,当然更安全的做法是在根视图添加导航并且在此处进行controller类型判断。

调用:

const AliRZ = NativeModules.ClientModule :

AliRZ.startRZ(data, (result) => {
        if(result == 'AUDIT_PASS'){
          Toast.info('认证通过')
        }else if(result == 'AUDIT_FAIL'){
          Toast.info('认证通过')
        }else if(result == 'AUDIT_IN_AUDIT'){
          Toast.info('系统处理中,稍后查看认证结果')
        }else if(result == 'AUDIT_NOT'){
          Toast.info('未认证,用户取消')
        }else if(result == 'AUDIT_EXCEPTION') {
          Toast.info('系统异常')
        }else{
          Toast.info('未知错误')
        }
      })

注意点:
ios回调返回数据使用:

resolver:(RCTResponseSenderBlock)callback

callback(@[@"AUDIT_EXCEPTION",@"系统异常"]);

相关文章

网友评论

      本文标题:reactnative阿里面签集成

      本文链接:https://www.haomeiwen.com/subject/onafbqtx.html