在项目的expo中使用MapView时遇到问题。在expo应用程序中,iOS和Android上的一切都可以,但当构建同一应用程序并将其发布到Android apk时,无论是在play store上还是在打开地图时,该应用程序都会崩溃并重新加载。
我正在使用:
- 世博会37.0.0
- react native expo sdk 37.0.1
- react本地映射0.27.1
这是代码:
import { PROVIDER_GOOGLE } from 'expo';
import MapView, { Marker, Callout, CalloutSubview } from 'react-native-maps';
<MapView
ref={'map'}
onPress={() => this._mapPress()}
provider={PROVIDER_GOOGLE}
style={styles.mapView}
initialRegion={{
latitude: mapLat,
longitude: mapLon,
latitudeDelta: 0.0922,
longitudeDelta: 0.0421
}}
>
{markers.map((marker, i) => (
<Marker
key={`marker-${i}`}
coordinate={marker.latlng}
stopPropagation={true}
onPress={e => this._mapMarkerPress(marker)}
>
<Image
resizeMode='cover'
source={
JSON.stringify(this.state.selectedMarker) == JSON.stringify(marker)
? ACTIVE_PIN
: INACTIVE_PIN
}
style={styles.mapMarker}
/>
</Marker>
))}
</MapView>
起初,我认为标记数组或初始lat-long有问题,但删除部分代码后,我将MapView简化为:
<MapView
ref={'map'}
provider={PROVIDER_GOOGLE}
>
</MapView>
仍然不能在apk/live Android上工作,但在ios中,live工作得很好,显示了一个空地图。但在expo应用程序中,无论是ios还是android,无论有没有标记,一切都很好。
有人有这个问题吗?谢谢
发现问题并解决了它。来自谷歌云控制台的api密钥仅适用于web。我也为ios和android做了它,问题解决了。:(
然而,这很奇怪,因为在世博会的发展过程中,这个问题并不存在。。。只为生活而建。
首先添加
"config":{"谷歌地图":{"apiKey":"YOUR_ API"中;}},
在你的app.json上,在下面"android";。
然后你需要在谷歌开发者控制台中检查你的api,并确保
- 您选中了-应用程序限制
- 添加程序包名称(在您完成expo-buil:android之后,转到app.json并复制您的程序包。例如:"com.name.nameofapp&"(
- 添加您的SHA-1证书-为此,您需要运行expo凭据:manager(它看起来像AD:GR:55:SV:54:VS:45:TE:98(
- 在Api限制中,请查看Android版地图SDK
保存即可工作!
尝试添加markerLat
和markerLon
参数并替换此参数:
initialRegion={{
latitude: mapLat,
longitude: mapLon,
latitudeDelta: 0.0922,
longitudeDelta: 0.0421
}}
这个:
initialRegion={{
latitude: mapLat,
longitude: mapLon,
latitudeDelta: 0.0922,
longitudeDelta: 0.0421
},
markerLat: Number(48.736279),
markerLon: Number(19.146191)
}