我这里是用的https://www.jianshu.com/p/6dec7972267b这位作者的方法,但是由于操作失误刨坑刨了很久。。
1. Unhandled JS Exception: Invariant Violation: Tried to register two views with the same name SignWithApple
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';
<NativeView
style={{width: 49, height:49}}
onClick={(info)=>{
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以上');
}
}}
>
<Image style={{width: 49, height:49}} source={require('../../res/image/apple.png')}/>
</NativeView>
这里再提一下原作者iOS文件的传值方法,在原作者iOS文件里打开CoustomView.m,106行,
self.onClick(@{@"success":userID,@"error":@""});
所以在js页面info.nativeEvent.success
这个值打印出来是iOS传过来的用户信息
onClick={(info)=>{
console.log('userID-----',info.nativeEvent.success)
}}
当然你想要传authorizationCode
,identityToken
,就修改一下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项目的文件夹下
然后把它拖到
注意
这个时候注意,,一定要注意,这里选择
Create groups
,不要选择 Create folder references
,不然找不到文件,就会一直报错,原因可以参考这位作者的这篇文章https://www.jianshu.com/p/7bdf90d9f966然后,清理项目,删掉模拟器上的项目,重新运行模拟器,希望能解决你的问题。