React Native 可能未处理的承诺拒绝(ID:0):类型错误:null不是对象

cx6n0qe3  于 2023-03-09  发布在  React
关注(0)|答案(2)|浏览(165)

我收到以下错误..
WARN可能未处理的承诺拒绝(ID:0):类型错误:null不是对象(计算"this.Auth0Module.hasValidCredentialManagerInstance")
更新-奇怪的是,当模拟器在Android Studio中运行时没有错误。但是当模拟器从VSCode运行时,错误出现。
到目前为止,这是我的代码... env变量工作正常,在Auth0端,我相信我已经设置了必要的应用程序URI。
我理解这个错误本质上是说,我们找不到您正在查找的Auth0Module对象属性的任何值?
我不知道如何解决这个错误或从哪里开始。欢迎所有的建议。

import {AUTH0_DOMAIN, CLIENT_ID} from '@env';
import { StatusBar } from 'expo-status-bar';
import React from 'react';
import { Button, StyleSheet, Text, View } from 'react-native';
import {useAuth0, Auth0Provider} from 'react-native-auth0';

export default function App() {
  return (
    <Auth0Provider domain={`${AUTH0_DOMAIN}`} clientId={`${CLIENT_ID}`}>
      <View style={styles.container}>
        <Text style={styles.title}>Open up App.js to start working on your app!</Text>
        <StatusBar style="auto" />
        <LoginButton />
      </View>
    </Auth0Provider>
  );
};

const LoginButton = () => {
  const {authorize} = useAuth0();

  const onPress = async () => {
    try {
      await authorize();
    }
    catch(error) {
      console.log('this is an error: ',error);
    }
  }

  return <Button onPress={onPress} title="Log In"></Button>
}

console.log(AUTH0_DOMAIN);

const styles = StyleSheet.create({
  container: {
    flex: 1,
    backgroundColor: '#4f5',
    alignItems: 'center',
    justifyContent: 'center',
    borderStyle: 'solid',
    borderColor: 'black',
    borderWidth: 5,
    
  },
  title : {
    fontSize: 30,
  }
});

下面是app.json

{
  "expo": {
    "name": "myPackage",
    "slug": "myPackage",
    "version": "1.0.0",
    "orientation": "portrait",
    "icon": "./assets/icon.png",
    "userInterfaceStyle": "light",
    "splash": {
      "image": "./assets/splash.png",
      "resizeMode": "contain",
      "backgroundColor": "#ffffff"
    },
    "assetBundlePatterns": [
      "**/*"
    ],
    "ios": {
      "supportsTablet": true
    },
    "android": {
      "adaptiveIcon": {
        "foregroundImage": "./assets/adaptive-icon.png",
        "backgroundColor": "#ffffff"
      },
      "package": "com.myPackage"
    },
    "web": {
      "favicon": "./assets/favicon.png"
    },
    "plugins": [
      [
        "react-native-auth0",
        {
          "domain": "myDomain"
        }
      ]
    ]
  }
}

下面是一张包含更多信息的图片:

rqqzpn5f

rqqzpn5f1#

始终从库的源代码开始,例如,您的错误发生在以下位置:https://github.com/auth0/react-native-auth0/blob/89a7c9dc5f2ddd0d315b1249c88266cb8002ee01/src/credentials-manager/index.js#L134,并且它引用了本地的A0Auth0对象。
如果您使用的是android,则可以在Android Studio中放置一个断点,并检查原生实现https://github.com/auth0/react-native-auth0/blob/89a7c9dc5f2ddd0d315b1249c88266cb8002ee01/android/src/main/java/com/auth0/react/A0Auth0Module.java(特别是SecureCredentialsManager)中发生的情况
您可能忘记从www.example.com配置特定于平台的https://github.com/auth0/react-native-auth0#configure-the-sdk

wrrgggsh

wrrgggsh2#

本质上- react-native-auth 0是本机代码,与expo go不兼容
我发布这个答案是因为要运行原生代码你需要一个开发版本,而expo正引导人们使用eas来创建这些。然而eas的等待时间可能超过一个小时,而且你有有限数量的版本可以存储在他们的服务器上。也就是说,prebuild命令将允许你减少等待时间,只需要几个额外的步骤。
More information on Prebuild
如果您运行npx create-react-native-app,您可能需要配置与使用npx create-expo-app构建时不同的本地代码。这两个脚本生成的gradle文件与我所知道的略有不同。我的解决方案最终使用了npx create-expo-app命令。
在更新app.json上的代码(参见原始帖子)以包括插件部分之后,我做了以下工作
1.我运行了npx expo prebuild --platform android
1.我从./android/app/build/output/apk/debug复制了apk到dropbox/谷歌驱动器等
1.我下载并安装了APK到物理设备上
1.已使用expo-go扫描条形码
渲染和工作正常。

相关问题