美文网首页ReactNative
react-native-amap-geolocation安装与

react-native-amap-geolocation安装与

作者: tivjoe | 来源:发表于2019-05-15 22:33 被阅读274次

    react-native-amap-geolocation这款插件接入了高德地图定位模块。支持 Android + iOS,提供尽可能完善的原生接口, 同时提供符合 Web 标准的 Geolocation API。

    ios下的安装

    依次在命令下执行以下2条命令

        yarn add react-native-amap-geolocation
        react-native link react-native-amap-geolocation
    

    如果出现了link的相关报错的话,就需要手动link一下

    1. 用xcode打开该项目
    2. 点击项目的根目录右键 add File to "项目名"
    3. 选择并添加 node_modules/react-native-amap-geolocation/lib/ios/AMapGeolocation.xcodeproj (或从文件浏览器里将该文件拖拽到 Libraries)
    4. Build Phases ➜ Link Binary With Libraries 中选择并添加 libAMapGeolocation.a

    下载和安装高德IOS SDK

    1. 下载基础SDK(含IDFA)
    2. 下载定位SDK
    3. 将下载的AMapFoundationKit.frameworkAMapLocationKit.framework 以及 项目自带的ExternalAccessory.framework 添加到 Build Phases ➜ Link Binary With Libraries。

    配置权限

    高德地图官方文档权限参考

    ios8-10权限 NSLocationWhenInUseUsageDescription和NSLocationAlwaysUsageDescription

    ios11以上权限 NSLocationAlwaysAndWhenInUseUsageDescriptionNSLocationWhenInUseUsageDescription

    ios8-ios11+权限NSLocationWhenInUseUsageDescriptionNSLocationAlwaysUsageDescriptionNSLocationAlwaysAndWhenInUseUsageDescription

    苹果官方权限参考

    ios11以上权限 NSLocationWhenInUseUsageDescriptionNSLocationAlwaysAndWhenInUseUsageDescription

    ios11以下权限 NSLocationAlwaysUsageDescription

    权限这个地方得注意。参考了高德和苹果的文档你会发现,他们说发恰恰相反,如果你按照高德和苹果3个权限全给的话或者高德的ios11+的,那你会弹不出权限提示。所以大家请采用以下的权限配置
    1. 打开info.plistt
    2. 添加NSLocationWhenInUseUsageDescription(表示应用在前台的时候可以搜到更新的位置信息)和NSLocationAlwaysUsageDescription(申请Always权限,以便应用在前台和后台都可以获取到更新的位置数据)
    3. App Transport Security Setting展开后的Allow Arbitrary Loads 为YES
    这个权限很神奇,只添加NSLocationWhenInUseUsageDescription也可以,前台后台都可以获取到位置,但是3个权限全部添加的话,会出现弹出不了权限提示框的问题。所以大家添加NSLocationWhenInUseUsageDescription或者添加NSLocationWhenInUseUsageDescription和NSLocationAlwaysUsageDescription就可以了。
    如果要支持后台持续定位,还需要配置以下
    1. 打开xcode,点击项目
    2. 选择Capabilities,把Background Modes打开为ON,然后打勾Loaction updates

    使用

    创建一个position.js,把操作封装起来

    import { init, Geolocation,setAllowsBackgroundLocationUpdates} from "react-native-amap-geolocation";
    //初始化sdk
    export async function geolocationInit() {
        //设置高德key
        await init({
            ios: "你的key",
        });
        
        
        //开启后台定位,必须要Background Modes打开为ON,勾选Loaction updates,不然会报错!
        //必须在开始定位之前或者在定位stop的时候设置
        setAllowsBackgroundLocationUpdates(true);
        
    }
    
    //只获得一次当前地理位置
    export function getCurrentPosition(){
        Geolocation.getCurrentPosition(position=>console.log(position));
    }
    
    //注册一个监听,它会每隔一段时间返回当前地理位置
    export function watchPosition(){
        if(!this.watchId){
            this.watchId=Geolocation.watchPosition(position=>console.log(position)));
        }
    }
    
    ...按照自己的需要封装
    
    

    创建一个index.js 来使用定位,需要注意一点,高德sdk默认返回逆地理编码信息为false,如果要返回的话在AMapGeolocation.xcodeproj添加_manager.locatingWithReGeocode=YES

    import React, { Component } from 'react';
    import { SafeAreaView, View } from 'react-native';
    import {setInterval} from "react-native-amap-geolocation";
    import {getCurrentPosition,watchPosition,getCurrentPosition} from "./position"
    
    
    export default class Main extends Component {
    
       componentDidMount() {
    
            //初始化定位组件
            geolocationInit();
    
            //启动监听
            watchPosition();
    
            //获取一次定位,getCurrentPosition会暂停掉监听
            //getCurrentPosition()
    
            //设置每隔15S获取一次定位
            setInterval(15000);
        }
    
        render() {
            return (
                <SafeAreaView>
                    <View>
                    ...ui+操作
                    </View>
                </SafeAreaView>
            );
        }
    }
    
    
    官方文档安装指南
    官方API文档
    官方例子(不了解如何使用,推荐参考)

    这里要提醒一下,持续定位第一次获取的时候会返回多条定位信息,注意监听不要多次创建还有像设置间隔获取,或者指定多少距离才更新位置的话,一定要创建监听之后再设置,否则会每次更新位置时返回信息的返回多条信息。在模拟器上开启监听持续定位,不会按照预想的每隔一段时间返回一次地理位置,但是真机会隔一段时间返回一次,一切正常。

    本文基于react-native 0.59.8和react-native-amap-geolocation 1.0.1写的,只写了ios下如何使用和安装,等我配置安卓的时候会更新本文(转载请注明出处,欢迎大家评论留言交流,指出不足)

    相关文章

      网友评论

        本文标题:react-native-amap-geolocation安装与

        本文链接:https://www.haomeiwen.com/subject/eflvaqtx.html