开发者社区 问答 正文

尝试使用React Native广播iBeacon

我正在尝试创建一个简单的应用程序,使用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

我试过调试,但不知道为什么会这样.

展开
收起
游客5akardh5cojhg 2019-12-09 13:24:26 656 分享 版权
阿里云 AI 助理回答

遇到这个问题,看起来是您尝试使用的第三方库react-native-ibeacon-simulator可能与您的React Native环境不兼容,或者存在未解决的bug。考虑到这个库已经有一段时间没有更新,确实可能会在新版本的React Native或iOS系统上出现问题。

这里有几个建议来帮助你解决问题:

  1. 检查依赖和兼容性:首先确认该库是否支持你的React Native版本以及iOS 13。查看其GitHub页面上的README或已有的issue,看是否有其他用户报告了类似的问题,或者是否有针对新版本React Native的解决方案或分支。

  2. 错误边界问题:关于Error boundaries should implement getDerivedStateFromError()的警告,这是React的一个特性,用于处理组件树中捕获错误。虽然这不一定直接导致你的iBeacon问题,但为了良好的实践,你可以考虑为你的组件添加错误边界处理逻辑。参考官方文档了解如何实现。

  3. 寻找替代方案:如果当前库无法满足需求,可以搜索是否有其他活跃维护的库能够实现相同功能。例如,react-native-beacons-manager是一个较为知名的库,尽管它主要关注于监听iBeacon而非广播,但查看其文档或源码也许能给你一些灵感,或者发现它也提供了广播功能。

  4. 原生模块开发:如果找不到合适的库,且项目允许,考虑自己开发一个原生模块来实现iBeacon的广播功能。这需要对iOS(Swift或Objective-C)和React Native的原生模块集成有深入理解。可以参考React Native官方文档开始。

  5. 社区求助:在React Native或相关技术的社区论坛(如Stack Overflow、Reddit的r/reactnative等)提问,提供详细的错误信息和你尝试过的解决步骤,可能会得到开发者社区的帮助。

  6. 更新环境:确保你的React Native环境是最新的,有时候旧版本的工具链会引发各种预料之外的问题。不过,在升级前,请务必阅读变更日志,确保升级不会引入其他不兼容问题。

希望这些建议能帮助你解决问题!

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答