我正在尝试创建一个简单的应用程序,使用Reactinative即广播iBeacon。我发现了一个可能的第三方模块反应-本机-iecon-模拟器但即使是简单的测试也失败了。我知道这已经有一段时间没有更新了,但是我找不到更好的解决方案.
我救了index.ios.js文件为iBeacon.js
import React, { Component } from 'react'
import { Text, View } from 'react-native'
import ibeacon from './ibeacon'
export default class App extends Component {
componentWillMount() {
const uuid = '04bc1d42-98be-4031-a4a9-50c76cb3e1b9'
const identifier = 'com.myapp'
ibeacon.startAdvertisingBeaconWithString(uuid, identifier, 0, 0)
}
render() {
return (<View><Text>iBeacon</Text></View>)
}
}
但是,在终端(以及运行iOS 13的连接的iPhone6S的屏幕上),我得到了以下错误:
Warning: %s: Error boundaries should implement getDerivedStateFromError(). In that method, return a state update to display an error message or fallback UI., RootErrorBoundary
- node_modules/expo/build/environment/muteWarnings.fx.js:27:24 in error
- ... 28 more stack frames from framework internals
TypeError: null is not an object (evaluating 'NativeBeaconBroadcast.startSharedAdvertisingBeaconWithString')
* ibeacon.js:19:26 in startAdvertisingBeaconWithString
* App.js:12:43 in componentWillMount
- node_modules/react-native/Libraries/Renderer/oss/ReactNativeRenderer-dev.js:7430:4 in callComponentWillMount
- node_modules/react-native/Libraries/Renderer/oss/ReactNativeRenderer-dev.js:7576:27 in mountClassInstance
- ... 19 more stack frames from framework internals
我试过调试,但不知道为什么会这样.
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
遇到这个问题,看起来是您尝试使用的第三方库react-native-ibeacon-simulator
可能与您的React Native环境不兼容,或者存在未解决的bug。考虑到这个库已经有一段时间没有更新,确实可能会在新版本的React Native或iOS系统上出现问题。
这里有几个建议来帮助你解决问题:
检查依赖和兼容性:首先确认该库是否支持你的React Native版本以及iOS 13。查看其GitHub页面上的README或已有的issue,看是否有其他用户报告了类似的问题,或者是否有针对新版本React Native的解决方案或分支。
错误边界问题:关于Error boundaries should implement getDerivedStateFromError()
的警告,这是React的一个特性,用于处理组件树中捕获错误。虽然这不一定直接导致你的iBeacon问题,但为了良好的实践,你可以考虑为你的组件添加错误边界处理逻辑。参考官方文档了解如何实现。
寻找替代方案:如果当前库无法满足需求,可以搜索是否有其他活跃维护的库能够实现相同功能。例如,react-native-beacons-manager
是一个较为知名的库,尽管它主要关注于监听iBeacon而非广播,但查看其文档或源码也许能给你一些灵感,或者发现它也提供了广播功能。
原生模块开发:如果找不到合适的库,且项目允许,考虑自己开发一个原生模块来实现iBeacon的广播功能。这需要对iOS(Swift或Objective-C)和React Native的原生模块集成有深入理解。可以参考React Native官方文档开始。
社区求助:在React Native或相关技术的社区论坛(如Stack Overflow、Reddit的r/reactnative等)提问,提供详细的错误信息和你尝试过的解决步骤,可能会得到开发者社区的帮助。
更新环境:确保你的React Native环境是最新的,有时候旧版本的工具链会引发各种预料之外的问题。不过,在升级前,请务必阅读变更日志,确保升级不会引入其他不兼容问题。
希望这些建议能帮助你解决问题!