博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
孙叫兽带你了解腾讯位置服务的认证与接入,多种行业方案参考!
阅读量:2046 次
发布时间:2019-04-28

本文共 11627 字,大约阅读时间需要 38 分钟。

前言:腾讯位置服务为各类应用厂商和开发者提供领先的LBS服务和解决方案;有针对Web应用的JavaScript API, 适合手机端Native APP的各种SDK, WebService接口,适合小程序的插件和各类地图API等。

目录


 

接入指南 

接入步骤:(快速通道:)

作为开发者应该如何选择对应的API?

地图组件(H5)

手机组件H5,完整应用,不需要开发者进行开发,——》

位置展示组件,可以在地图上展示一个或多个位置点。数据来源支持三种方式:通过URL传递数据、地图检索数据和自有定制数据。 可以展示每个位置点的名称、地址等详细信息,也可查看该位置点的街景信息或发起到该位置的路线规划。

例如:

调用地址:

https://apis.map.qq.com/tools/poimarker?type=0&marker=coord:39.96554,116.26719;title:成都;addr:北京市海淀区复兴路32号院|coord:39.87803,116.19025;title:成都园;addr:北京市丰台区射击场路15号北京园博园|coord:39.88129,116.27062;title:老成都;addr:北京市丰台区岳各庄梅市口路西府景园六号楼底商|coord:39.9982,116.19015;title:北京园博园成都园;addr:北京市丰台区园博园内&key=yourkey&referer=myapp

地图javaScript API

用于浏览器端地图显示与应用,兼容手机端及PC端——》

JavaScript API V2可用于在网站中加入交互性强的街景、地图,能很好地支持PC及手机设备,身材小巧,动画效果顺滑流畅,动感十足,提供地图操作、标注、地点搜索、出行规划、地址解析、街景等接口,功能丰富,并免费开放各种附加工具库。JavaScript API V2是免费服务,任何提供免费访问的网站都可以调用。

可视化组件是JSAPI的附加库,在加载JavaScript API服务请求中通过libraries参数指明引入

接口均定义在qq.maps.visualization全局变量中,需在地图初始化完成之后使用

var map = new qq.maps.Map(container, mapOpts);var dots = new qq.maps.visualization.Dots({    map: map});dots.setData(data);

例如:我们要显示以北京的天安门为中心的 603x300 地图:

孙叫兽测试天安门地图

效果:

加载地图API:

方式一:页面直接引入。

方式二:异步加载 JavaScript API

异步加载地图

效果:

有如下功能:

叠加覆盖物 强大的附加库 定义自己的地图
提供点标注、折线、圆、多边形、信息窗
口等覆盖物,用户可以定义个性化地图。
提供了鼠标绘制工具箱、几何运算、坐标
转换、文本输入提示等附加库。
支持用户可以自定义地图类型,使用自己
的数据或图片,自定义切图、取图规则。

 

定位SDK  ( |   )

腾讯地图定位SDK是一套基于Android 4.1及以上版本设备的应用程序接口。通过该接口,您可以轻松使用腾讯地图定位服务,构建LBS应用程序。

定位SDK包括GPS定位与网络定位,实现了经纬度坐标偏转与当前位置的POI名称、地址或者行政区划的查询。采用了移动缓存策略,节省流量与电量。

定位SDK是提供给具有一定Android编程经验和了解面向对象概念的开发者使用。

本android示例采用后台定位方式:

当用户进程出于后台时,有时也会有需求使用定位服务,但应用处于后台时Android系统会对定位做诸多限制。因此我们通过设置前台Service的方式来提高进程级别,使定位服务由后台转向前台。

 1.manifest增加Service声明

 

2.在启动定位之前,调用enableForegroundLocation

mLocationManager.enableForegroundLocation(LOC_NOTIFICATIONID, buildNotification());mLocationManager.requestLocationUpdates(request, this, getMainLooper());

构建Notification(其中enableForegroundLocation的参数分别是一个整形的NotificationID,一个是Notification的实例。)

private Notification buildNotification() {    Notification.Builder builder = null;    Notification notification = null;    if (android.os.Build.VERSION.SDK_INT >= 26) {        //Android O上对Notification进行了修改,如果设置的targetSDKVersion>=26建议使用此种方式创建通知栏        if (notificationManager == null) {            notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);        }        String channelId = getPackageName();        if (!isCreateChannel) {NotificationChannel notificationChannel = new NotificationChannel(channelId,                    NOTIFICATION_CHANNEL_NAME, NotificationManager.IMPORTANCE_DEFAULT);            notificationChannel.enableLights(true);//是否在桌面icon右上角展示小圆点            notificationChannel.setLightColor(Color.BLUE); //小圆点颜色            notificationChannel.setShowBadge(true); //是否在久按桌面图标时显示此渠道的通知            notificationManager.createNotificationChannel(notificationChannel);            isCreateChannel = true;        }        builder = new Notification.Builder(getApplicationContext(), channelId);    } else {        builder = new Notification.Builder(getApplicationContext());    }    builder.setSmallIcon(R.drawable.ic_launcher)            .setContentTitle("LocationDemo")            .setContentText("正在后台运行")            .setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher))            .setWhen(System.currentTimeMillis());    if (android.os.Build.VERSION.SDK_INT >= 16) {        notification = builder.build();    } else {        notification = builder.getNotification();    }    return notification;}

3.在停止定位之后,调用disableForegroundLocation停止前台服务

LocationManager.removeUpdates(this);mLocationManager.disableForegroundLocation(true);

权限配置(请在manifest文件下配置如下权限:)

说明随着Android版本的升级,权限使用方面也有变动,具体可参考实用文档中针对Android各个版本的适配文档。

定位服务是一个重度依赖用户授权的功能,因此在App设计时必须充分考虑获取用户权限的方式,合理引导用户授予权限。

 

腾讯 iOS 定位 SDK 提供了不依赖于地图定位的定位功能,开发者可以无地图显示的场景中便捷地为应用程序添加定位功能。 iOS定位SDK提供了单次定位、连续定位、逆地理信息等功能。兼容iOS7.0 及以上版本。

定位权限申请

(1) 需要在https://lbs.qq.com/dev/console/key/add上面申请一个apiKey,对应在TencentLBSLocationManager的apiKey属性上设置才可以使用。

(2) 需要在info.plist中追加 NSLocationWhenInUseUsageDescription 或NSLocationAlwaysUsageDescription 字段,以申请定位权限。

  (3) allowsBackgroundLocationUpdates表示是否允许后台定位。默认为 NO。只在iOS 9.0 及以后起作用。设置为 YES 的时候必须保证 Background Modes 中的 Location updates 处于选中状态,否则会抛出异常。注意,如果不设置为YES,不需要申请该权限,否则会审核不通过!

引入定位包: 将库文件 TencentLBS.framework 拷贝到您的APP的工程目录下,在Xcode的Target中选择 “Build Phases”->“Link Binary With Libraries”->“Add”->“Add Other…”-> 选择 TencentLBS.framework 目录并添加。

引入系统库文件:仿照上面的操作 ("Add"的时候直接在列表中查找选择 )添加系统库libz.1.2.5.tbd 在 Build Setting - Linking - Other Linker Flags 里 添加 -lstdc++.6.0.9, -lsqlite3(注意:在 Xcode9 以上,不再需要这两个库) 。

- (void)configLocationManager{    self.locationManager = [[TencentLBSLocationManager alloc] init];     [self.locationManager setDelegate:self];     [self.locationManager setApiKey:@"对应于申请的apiKey "];     [self.locationManager setPausesLocationUpdatesAutomatically:NO];     // 需要后台定位的话,可以设置此属性为YES。    [self.locationManager setAllowsBackgroundLocationUpdates:YES];     // 如果需要POI信息的话,根据所需要的级别来设定,定位结果将会根据设定的POI级别来返回,如:    [self.locationManager setRequestLevel:TencentLBSRequestLevelName];     // 申请的定位权限,得和在info.list申请的权限对应才有效    CLAuthorizationStatus authorizationStatus = [CLLocationManager authorizationStatus];    if (authorizationStatus == kCLAuthorizationStatusNotDetermined) {        [self.locationManager requestWhenInUseAuthorization];    }} // 单次定位- (void)startSingleLocation {    [self.locationManager requestLocationWithCompletionBlock:        ^(TencentLBSLocation *location, NSError *error) {            NSLog(@"%@, %@, %@", location.location, location.name, location.address);        }];} // 连续定位- (void)startSerialLocation {    //开始定位    [self.locationManager startUpdatingLocation];} - (void)stopSerialLocation {    //停止定位    [self.locationManager stopUpdatingLocation];} - (void)tencentLBSLocationManager:(TencentLBSLocationManager *)manager                 didFailWithError:(NSError *)error {    CLAuthorizationStatus authorizationStatus = [CLLocationManager authorizationStatus];    if (authorizationStatus == kCLAuthorizationStatusDenied ||        authorizationStatus == kCLAuthorizationStatusRestricted) {        [self.displayLabel setText:@"定位权限没开启!"];         UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"提示"                                                                       message:@"定位权限未开启,是否开启?"                                                                preferredStyle:UIAlertControllerStyleAlert];        [alert addAction:[UIAlertAction actionWithTitle:@"是"                                                  style:UIAlertActionStyleDefault                                                handler:^(UIAlertAction * _Nonnull action) {            if( [[UIApplication sharedApplication]canOpenURL:                [NSURL URLWithString:UIApplicationOpenSettingsURLString]] ) {                [[UIApplication sharedApplication] openURL:                    [NSURL URLWithString:UIApplicationOpenSettingsURLString]];            }        }]];         [alert addAction:[UIAlertAction actionWithTitle:@"否"                                                  style:UIAlertActionStyleDefault                                                handler:^(UIAlertAction * _Nonnull action) {        }]];         [self presentViewController:alert animated:true completion:nil];     } else {        [self.displayLabel setText:[NSString stringWithFormat:@"%@", error]];    }}  - (void)tencentLBSLocationManager:(TencentLBSLocationManager *)manager                didUpdateLocation:(TencentLBSLocation *)location {    //定位结果    NSLog(@"location:%@", location.location);}

报错状态提示:

typedef NS_ENUM(NSUInteger, TencentLBSLocationError) {    TencentLBSLocationErrorUnknown = 0,                 //!< 错误码,表示目前位置未知,但是会一直尝试获取    TencentLBSLocationErrorDenied = 1,                  //!< 错误码,表示定位权限被禁止    TencentLBSLocationErrorNetwork = 2,                 //!< 错误码,表示网络错误    TencentLBSLocationErrorHeadingFailure = 3,          //!< 错误码,表示朝向无法确认    TencentLBSLocationErrorOther = 4,                   //!< 错误码,未知错误};

地图SDK( |  )

用于手机端APP嵌入地图与应用。

安卓3D适用于对地图强依赖场景,如导航、打车、代驾等。也可用于可穿戴设备。2D适用于辅助位置展示场景,如选择发送位置、地址展示、轨迹展示等,建议对包大小敏感的开发者选择用。

AndroidStudio配置

第1步: 获取Key

[点我获取Key>>](/mobile/androidMapSDK/developerGuide/getKey)

第2步:创建AndroidStudio项目

在AndroidStudio中创建一个空的Android项目。

第3步:在项目中集成SDK

在 AndroidStudio 项目中集成腾讯地图 SDK 主要有两种方式: 
1. 手动将腾讯地图 sdk 的 jar 包和 so 库导入到工程 
2. 通过 Gradle 配置 maven 或 jcenter 仓库集成 SDK 

我们更推荐用户使用第二种方式,即,通过 maven 导入腾讯地图 SDK,下面我们详细介绍下两种方式。 

通过拷贝 jar 包、so 库添加 SDK

  1. 首先,请您在获取腾讯地图 SDK for Andorid 及其 demo。

  2. 解压下载的压缩包并拷贝文件 

    以4.3.4版本的地图功能为例,解压后,得到一个 libs文件夹,该文件夹中包含tencent-mapsdk-release-4.3.4.b8edc92f.jar文件和一个jniLibs文件夹(文件中包含所有的so库文件) 

  3. 将 libs 目录下的"*.jar"文件拷贝到 AndroidStudio 项目对应的 app/libs/ 文件夹下。 

右键该jar包,选择add as library,弹出如下窗口: 
 

点击OK即可,变成下图所示就是导入成功: 

 

  1. 将 jniLibs 目录下的所有文件按照原目录格式,拷贝到AndroidStudio项目对应的 app/src/main/jniLibs/ 目录下。

腾讯地图Android SDK还提供了地图组件库TencentMapUtils,目前地图组件包含了点聚合组件、小车平滑移动组件。

IOS自动部署如下:

用户使用腾讯地图 iOS SDK 支持项目开发时,可以通过 Cocoapods 自动部署将 SDK 添加到工程当中。自动部署目前仅支持 腾讯地图 iOS SDK 4.2.6.2 及以上版本

获取CocoaPods

CocoaPods 是一种支持 Swift 和 Objective-C 项目的第三方库资源管理器,用户可通过 Cocoapods 获取腾讯地图 iOS SDK。

如果您已安装了CocoaPods,请直接跳到第二步:通过CocoaPods安装SDK。

1. 配置 ruby 的软件源

建议通过ruby安装CocoaPods。由于默认的 ruby 的软件源 “” 被墙阻拦导致 CocoaPods 安装失败,因此需要更新一下 ruby 的源。依次执行如下命令:

# 添加 TUNA 源并移除默认源gem sources --add http://mirrors.tencent.com/rubygems/ --remove https://rubygems.org/   #(查看当前ruby的源是否成功更换)gem sources -l

完成上述命令后,显示如下文字则表示更新成功

*** CURRENT SOURCES *** http://mirrors.tencent.com/rubygems/

 

2. 升级 gem

将 gem 的版本更新到最新确保 Cocoapods 安装成功

sudo gem update --system

 

3. 安装 Cocoapods

请使用以下命令安装 Cocoapods:

sudo gem install -n /usr/local/bin cocoapods pod setup

注:Cocoapods 安装过程可能会耗时较长,也有可能受网络的状况导致失败,如果安装失败请再次尝试

通过 CocoaPods 安装 SDK

1. 创建 Podfile

在当前 工程文件 (.xcodeproj) 所在文件夹下创建一个名为 Podfile 的文件。Podfile 内容如下:

platform :ios, "8.0" 		# 手机系统版本target "QMapKitDemo" do	        # 工程的名字pod 'Tencent-MapSDK'		# 地图SDKend   #当有多个target时,不同的target也需要各自设置#target "QMapKitDemo1" do		# 工程的名字#	pod 'Tencent-MapSDK'		# 地图SDK#end   #target "QMapKitDemo2" do		# 工程的名字#	pod 'Tencent-MapSDK'		# 地图SDK#end

 

2. 安装SDK

#用于保证本地地图相关 SDK 为最新版 pod repo update    #安装 SDKpod install

命令执行成功后,会生成 .xcworkspace 文件,打开.xcworkspace 文件以启动工程(注意:此时不能同时开启.xcodeproj文件,示例:

 

 

3. 升级 SDK

若已通过自动部署安装了腾讯地图 iOS SDK,想要更新到最新版本,可在 Podfile 文件所在目录下执行以下指令:

pod repo update # 用于保证本地地图相关SDK为最新版 pod update

 

4. 安装指定版本 SDK

自动部署目前仅支持地图 iOS SDK 4.2.6.2及以上版本,使用指定版本 SDK,需修改 Podfile 文件,示例:

platform :ios, "8.0" 				# 手机系统版本target "QMapKitDemo" do			        # 工程的名字pod 'Tencent-MapSDK', '~> 4.2.6.2'  	        # 在此修改或添加 3D SDK 版本号end

然后执行命令:

#用于保证本地地图相关 SDK 为最新版 pod repo update # 安装 SDKpod install

WebService API:

 腾讯地图WebService API 是基于HTTPS/HTTP协议的数据接口,开发者可以使用任何客户端、服务器和开发语言,按照腾讯地图WebService API规范,按需构建HTTPS请求,并获取结果数据(目前支持JSON/JSONP方式返回)。

注意:这个有调用 配额限制说明(其他产品均无调用限制):

腾讯位置服务API Key,在调用时用于唯一标识开发者身份,API KEY是各产品通用的,也就是说同一个Key可以用在地图SDK,也可以用在JavascriptAPI,也可以用在WebServiceAPI以及其它各产品中,可针对不同产品可独立启用(开关)。

假设您的某个Key只会调用地图SDK,可在Key配置界面,将其它产品关闭,以降低安全风险。

 

在Key设置中,勾中WebService复选框,即为启用产品,该Key才可调用WebServiceAPI服务 未启用时请求服务,会返回:

{ "status": 199, "message": "此key未开启webservice功能" }

示例:

https://apis.map.qq.com/ws/place/v1/search?keyword=酒店&boundary=nearby(39.908491,116.374328,1000)&key=OB4BZ-D4W3U-B7VVO-4PJWW-6TKDJ-WPB77

多种安全策略配置请参考:说明

地主认证通道:

如果你是某个地点的经营者,所有者等,可以自行申请认证,审核通过即可在地图上展示申请地点,

各类企事业单位、个体工商户,对自己的经营场所、实体店铺希望腾讯地图进行收录的,均可申请商户标注。提交商户标注后,您所填写的信息会被所有用户看到,因此请确认您提交的位置信息符合国家相关法律(例如军事设施,保密地点等信息根据国家相关法律不能提交)。已有商户标注存在有误的,可以提交地点纠错修改。

常见问题

腾讯位置服务控制台

行业解决方案

腾讯位置服务技术教程

腾讯位置特色产品实例

 

好啦,本期腾讯位置服务内容就分享到这里,我们下期见!

需要腾讯位置服务可以从下方通道快速进入,填写邀请码获得更多技术支持!

腾讯位置服务注册地址:                    

邀请码:3Z2RFL3  

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

转载地址:http://kwmof.baihongyu.com/

你可能感兴趣的文章
(PAT 1019) General Palindromic Number (进制转换)
查看>>
(PAT 1073) Scientific Notation (字符串模拟题)
查看>>
(PAT 1080) Graduate Admission (排序)
查看>>
Tree UVA - 548 (DFS+建立二叉树)
查看>>
Play on Words UVA - 10129 (欧拉路径)
查看>>
mininet+floodlight搭建sdn环境并创建简答topo
查看>>
(计蒜客) 取石子游戏 (gcd算法灵活运用)
查看>>
Prime Path POJ - 3126 (BFS,素数距离)
查看>>
Wireless Network POJ - 2236 (并查集)
查看>>
【javascript】手写bind函数
查看>>
Kube-state-metrics的collectors配置
查看>>
使用Vmware装虚拟机Ubuntu
查看>>
【java】异常处理及捕获的理解
查看>>
【Java】继承知识点总结
查看>>
【Linux】什么是链接文件及其分类
查看>>
【UML】《Theach yourself uml in 24hours》——hour2&hour3
查看>>
【linux】nohup和&的作用
查看>>
【UML】《Theach yourself uml in 24hours》——hour4
查看>>
僵尸进程产生原因等问题记录
查看>>
【python基础知识】python 2 与python 3 的差异
查看>>