react native 苹果一键登录犯过的错

我这里是用的https://www.jianshu.com/p/6dec7972267b这位作者的方法,但是由于操作失误刨坑刨了很久。。

1. Unhandled JS Exception: Invariant Violation: Tried to register two views with the same name SignWithApple

Simulator Screen Shot - iPhone 11 - 2022-03-23 at 15.14.24.png

1.这种情况有一种可能是把 作者的要求导入文件 https://github.com/JonsonHI/SignWithApple 重复导入没有删除干净导致的,这时候需要到iOS文件下将重复的文件删除掉。
2.还有就是引用文件方法需要改写
作者在原文中直接在使用的页面引入

var NativeView = requireNativeComponent('SignWithApple');

我们可以重新创建一个文件夹 SignApple 在这个文件夹下创建index.js文件,然后在文件中复制代码

import { requireNativeComponent } from 'react-native';
export default requireNativeComponent('SignWithApple');

然后再到使用页面用import NativeView from '../../custom/SignApple';引用

import NativeView from '../../custom/SignApple';
 {
                    var version =Platform.Version;
                    var version_last = version.substring(0,2);
                    if(version_last>=13){
                                      //info.nativeEvent.success是UserID 见iOS CoustomView.m 文件
                                      if(info.nativeEvent.success){
                                          //this.appleLogin(info.nativeEvent);
                                      }else if(info.nativeEvent.error){
                                          this.toastMsg('获取苹果账号失败');
                                      }
                                  }else{
                                      alert('请将您的iOS系统升级到13.0以上');
                                  }
                              }}
                          >
         

这里再提一下原作者iOS文件的传值方法,在原作者iOS文件里打开CoustomView.m,106行,

 self.onClick(@{@"success":userID,@"error":@""});

所以在js页面info.nativeEvent.success这个值打印出来是iOS传过来的用户信息

onClick={(info)=>{
        console.log('userID-----',info.nativeEvent.success)
}}

当然你想要传authorizationCodeidentityToken,就修改一下iOS文件

self.onClick(@{@"authorizationCode":authorizationCode,@"identityToken":identityToken,@"error":@""});

然后在js页面打印

onClick={(info)=>{
        console.log('authorizationCode-----',info.nativeEvent.authorizationCode)
        console.log('identityToken-----',info.nativeEvent.identityToken)
}}
2. Invariant Violation: requireNativeComponent: "SignWithApple" was not found in the UIManager.

这个问题,网上查了很久,大多说是到ios文件下执行pod install,但是在我这里并没有用。
后来找到原因是因为我导入ios文件的方式不对,虽然我是iOS出身,但是好久没有搞iOS,忘差不多了。
说一下正确导入方法:
1.首先把文件放到ios项目的文件夹下

截屏2022-03-23 15.25.40.png

然后把它拖到
截屏2022-03-23 15.31.07.png

注意这个时候注意,,一定要注意,
截屏2022-03-23 15.34.15.png

这里选择Create groups,不要选择 Create folder references,不然找不到文件,就会一直报错,原因可以参考这位作者的这篇文章https://www.jianshu.com/p/7bdf90d9f966
然后,清理项目,删掉模拟器上的项目,重新运行模拟器,希望能解决你的问题。

你可能感兴趣的:(react native 苹果一键登录犯过的错)