React-native-maps 仅空白页 google 徽标

React-native-maps Blank page Only google logo

我已经尝试为 react-native 安装 google 地图一个星期了,但仍然没有成功。我已经搜索并尝试了 react-native-maps github 问题中的解决方案,但我仍然得到一个空白页面。

我的工作:

react-native init myapp
npm install
yarn add react-native-maps
react-native link react-native-maps

在 Google 控制台 APIs -> 创建新项目 -> 启用 Google 地图 Android API, Google 地图 JavaScript API 和地点 API -> 创建凭据

在AndroidManifest.xml

    <application>
....
       <meta-data
          android:name="com.google.android.geo.API_KEY"
          android:value="XXX"/>
    </application>

package.json

    {
    "name": "maps",
    "version": "0.0.1",
    "private": true,
    "scripts": {
        "start": "node node_modules/react-native/local-cli/cli.js start",
        "test": "jest"
    },
    "dependencies": {
        "react": "16.0.0",
        "react-native": "0.50.4",
        "react-native-maps": "^0.18.3"
    },
    "devDependencies": {
        "babel-jest": "21.2.0",
        "babel-preset-react-native": "4.0.0",
        "jest": "21.2.1",
        "react-test-renderer": "16.0.0"
    },
    "jest": {
        "preset": "react-native"
    }
}

App.js

import React, { Component } from 'react';
import {
  StyleSheet,
  Text,
  View
} from 'react-native';
import MapView from 'react-native-maps'

export default class App extends Component {
  render() {
    return (
      <View style={styles.container}>
      <MapView
        style={styles.map}
        region={{
          latitude: 37.78825,
          longitude: -122.4324,
          latitudeDelta: 0.015,
          longitudeDelta: 0.0121,
        }}
      >
      </MapView>  
      </View>
    );
  }
}

const styles = StyleSheet.create({
  container: {
    ...StyleSheet.absoluteFillObject,
    alignItems: 'center',
  },
  map: {
    ...StyleSheet.absoluteFillObject,
  },
});

编辑: 因为有人问我堆栈跟踪:Sample 1

您能否提供一些堆栈跟踪信息,以便我们更好地了解您的问题?你的问题描述听起来你的 phone 没有连接到互联网,这就是地图没有呈现的原因。

无论如何,根据我过去的经验,这里有一些获得 react-native-maps 运行 的提示。

  • 首先,始终根据官方文档 here 配置您的 Android 应用程序。
  • 确保通过控制台生成 Google 地图 API 密钥。
  • 检查您的 react-native-maps 是否与您的 react-native 版本兼容。
  • 检查您的 android 构建工具版本。
  • 如果您使用的是来自 Genymotion(旧版本)的 android 模拟器,请确保您包含 Google Play 服务,否则地图将无法工作。
  • 有效的互联网连接。确保您的 phone 或模拟器已连接以便加载地图(iOS 在没有互联网访问的情况下也很好)。
  • 始终将 latlong 对象注入 initialRegion 属性,以便地图知道要关注的位置。

我一直在努力处理 Android 和 iOS 平台上的 React Native 地图。

在 Android 上有 Google API 版本。 我尝试使用 Google API 27 没有用,但是 API 26 没问题。

我在以下位置找到的提示:https://github.com/react-community/react-native-maps/issues/1877#issuecomment-353261669

在 iOS 上是软件包版本: 当我使用 CRNA 创建应用程序时,安装了 react-native@0.52.0 这与 react-native-maps@0.20.1 不兼容 所以我将 react-native 更改为版本 0.53.0 并解决了构建时应用程序崩溃的问题并出现错误: 条目“:CFBundleIdentifier”不存在。

给拥有空白地图视图和Google徽标的朋友的建议。我花了一整天的时间来解决这个问题。最后我意识到,地图实际上是有效的,但在第一个 运行 时 完全缩放 。 我以为它是空白页,但实际上它是空白区域:) 仅供参考

我遇到了同样的问题 issue.Finally,我在将 minsdkVersion 设置为 18(之前是 19)后得到了它。这对我有用。

确保在 Google 控制台中启用 API 键以与 Maps SDK for Android 一起使用,如果要 iOS 启用 Maps SDK for iOS

为我工作。可能对你也有用。

1) 移除容器样式和视图。使用下面的代码

 mapStyle: {
    height: 400,
    top: 0,
    left: 0,
    right: 0,
    bottom: 0,
  },

2) mapView 代码替换为

<MapView
      provider={PROVIDER_GOOGLE} // remove if not using Google Maps
      style={mapStyle}
      zoomEnabled={true}
      region={{
        latitude: 22.258,
        longitude: 71.19,
        latitudeDelta: 0.0922,
        longitudeDelta: 0.0421,
      }}
    >
      <Marker
        coordinate={{ latitude: 22.258, longitude: 71.19 }}
        title={"title"}
        description={"test"}
      icon={image}
      />
    </MapView>

在大多数情况下,它与两个问题有关:

  1. API 密钥不正确
  2. 对应的API在Google开发者控制台中没有启用

我按照 this article 创建了 API 密钥并启用了 API。它突然起作用了。以前它像你说的那样只显示 Google 徽标。

我花了几天时间才弄明白这一点。就我而言(Expo 项目),它缺少 SHA-1 证书指纹,来自 Play 控制台的指纹。我那里只有世博会的一个。

TL;DR

根据deploying to play store part of the documentation, I had to add another SHA-1 certificate fingerprint. Not only the one from expo fetch:android:hashes command output, but also the one from Google Play Console -> 你的应用 -> 版本管理 -> 应用签名。

所以现在我有两条记录:GCP Credentials -> 我的 Maps SDK for Android API key -> 限制使用您的 Android 应用程序 部分,两者都带有我的应用程序包名称。

我花了一整天的时间尝试 google 中提供的解决方案,但遗留 meta-data 似乎对我不起作用,所以我在 AndroidManifest.xml 中更改了下面的行

<meta-data
 android:name="com.google.android.geo.API_KEY"
 android:value="Your Google maps API Key Here"/>

<meta-data
    android:name="com.google.android.maps.v2.API_KEY"
    android:value="Your Google maps API Key Here"/>

地图终于出现了。

当然 Maps SDK for Android 必须在 Google Api Console 中启用。以下是为初学者启用 Maps SDK for Android 的步骤:

  1. 转到Google Api Console

  2. 在屏幕的 top-left 上,就在 Google Apis 徽标的右侧,您会看到您的项目名称,select 右侧的项目名称和然后,在项目名称下方,您会看到一个蓝色文本 + ENABLE APIS AND SERVICES。点击它。

  3. 在打开的网页中,向下滚动找到 Maps SDK for Android。单击以启用它。

我一直在尝试所有可能的解决方案,在我的例子中,应用程序在 Expo 中,问题出在 API KEY 的配置上。

解决方案

在 API Play Console 的 API 关键配置中,包括两个约束:

一个包含使用expo fetch: android: hashes

生成的指纹

另一个包含使用keytool -list -v -keystore "% USERPROFILE% \. Android \ debug.keystore "-alias androiddebugkey -storepass android -keypass android

生成的指纹

重要的是两个限制具有相同的包名

经过一周的搜索和环顾四周,我通过从 android 项目目录

生成 SHA1 指纹解决了这个问题
keytool -list -v -keystore /Users/username/ProjecFolder/android/app/debug.keystore  -alias androiddebugkey -storepass android -keypass android

而不是

keytool -list -v -keystore ~/.android/debug.keystore  -alias androiddebugkey -storepass android -keypass android

我遇到了同样的问题。但是我在任何地方都找不到正确的解决方案。

我在弹出 expo 表单后遇到了这个问题

我的问题与地图键有关。我在 android 工作室的日志中清楚地发现了这一点。然后我从 Google 的凭据管理中删除所有限制。 (将应用程序限制设置为 none)

如果此时可以看到地图,则完成 50%。

在我的例子中,问题出在“包名和 SHA-1 签名证书” 我有 运行 个默认值,即

"keytool -list -v -keystore "%USERPROFILE%.android\debug.keystore" -alias androiddebugkey -storepass android -keypass android" =10=]

我为其他项目得到的结果(我认为) 然后我转到项目目录 (project root\android\app) 中的应用程序文件夹,在那里我看到了“debug.keystore”文件。然后我运行这个

keytool -list -v -keystore "debug.keystore" -alias androiddebugkey -storepass android -keypass android

我得到了不同的结果。我申请了限制,对我有用。

我认为这可能对某些人有所帮助。

转到您的

  1. Google 控制台开发者帐户
  2. Select你各自的项目

Android

  1. 为 Android
  2. 启用 Maps SDK

iOS

  1. 为 iOS
  2. 启用 Maps SDK