React Native Expo应用Google Map在模拟器正常安卓真机不显示无报错
- 检查Google Cloud控制台的API密钥配置:
确认你启用了Google Maps Android SDK服务,同时API密钥的安卓应用限制中,同时添加了调试版和发布版对应的包名、SHA-1指纹。两个版本的SHA-1签名不同,缺少任意一个都会导致真机上地图加载被拦截,且不会抛出显性错误。 - 补全安卓权限声明:
仅运行时请求定位权限不够,需要在app.json的android配置项中添加权限声明:"android": { "permissions": ["ACCESS_FINE_LOCATION", "ACCESS_COARSE_LOCATION"], // 其余原有配置保留 } - 排查MapView样式问题:
确认MapView组件有明确的宽高赋值,优先给组件添加style={{flex: 1}},同时保证其父容器也设置了flex: 1。部分安卓机型对百分比布局的解析逻辑和模拟器不同,容器高度计算为0时会出现地图不显示的问题。 - 避免定位API混用冲突:
你当前的代码同时使用了Expo原生定位API和web定位polyfill,二者冲突可能导致位置信息获取异常,地图区域mapRegion未正确赋值导致无内容展示。修改定位逻辑,直接使用Expo Location的接口即可:const { status } = await Location.requestForegroundPermissionsAsync(); if (status === 'granted') { const position = await Location.getCurrentPositionAsync({enableHighAccuracy: true}); this.setState({ userLat: position.coords.latitude, userLong: position.coords.longitude, userLatLoaded:true, mapRegion: { latitude: position.coords.latitude, longitude: position.coords.longitude, latitudeDelta: 0.1, longitudeDelta: 0.1, }, }); this.fetchData(); } else { throw new Error('Location permission not granted'); } - 重新构建自定义开发客户端:
如果你使用的是expo-dev-client,修改app.json中的原生配置后必须重新构建自定义客户端,旧的客户端不会加载新的API密钥配置,导致配置不生效。
内容的提问来源于stack exchange,提问作者Muditha
相关产品推荐
相关产品推荐

