12/12/2024 11:37:56
位置模块
一、概述
位置模块( Location Based Service, LBS ), 主要为业务提供相关玩家位置的功能。如,玩家可以获取当前位置,获取附近好友,清除位置设定,查询当前 IP 所处国家。使用 LBS 功能尽量避免短时间内频繁调用。
说明:位置模块“获取 IP 对应位置信息”接口,支持国内和海外且无需登录。剩余接口,均仅支持国内 QQ、Wechat 登录。
二、接入向导
推荐接入 MSDK LBS 位置服务流程:
- 注册 MSDK LBS 回调
- 调用 MSDK LBS 功能
接入 MSDK LBS 位置服务需要:
- 已经按初始化模块说明完成 MSDK 初始化
- 调用 MSDK LBS 接口需要先登录
2.1 配置说明
1)Android 配置
Android 平台 MSDK LBS 定位依赖 support-v4 库,记得检查游戏的工程是否引入 support-v4 及 support-v4 的依赖。 MSDK 使用 support-v4-26.1.0 依赖版本:
- support-compat-26.1.0
- support-core-ui-26.1.0
- support-core-utils-26.1.0
- support-fragment-26.1.0
- support-media-compat-26.1.0
- support-v4-26.1.0
【可选项】配置 MSDK 环境,字段
MSDK_LBS_GPS_TIMEOUT
,表示设置 GPS 定位超时时间(无配置,默认 4s)。Android 还需要配置权限和权限申请窗口注册( AndroidManifest.xml 文件中),如下:
//权限声明
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<application>
......
// 动态权限申请窗口注册
<activity android:name="com.tencent.gcloud.msdk.lbs.PermissionActivity"/>
</application>
2)iOS 配置
iOS 平台依赖系统库文件:CoreLocation.framework
iOS 配置申请定位权限时对用户的提示说明,Xcode 工程配置文件 info.pilst添加
<key>NSLocationWhenInUseUsageDescription</key>
<string>CurrentNeedLocation</string>
CurrentNeedLocation
,申请定位权限时对用户的提示说明
[warning] LBS 注意项
使用 LBS 功能必须添加该配置项,否则有被拒风险,且可能导致 LBS 功能使用异常
2.2 注册回调
1)功能描述
为了接收 MSDK LBS 模块的回调,游戏需要首先注册回调函数。
2)接口声明
// 获取位置信息回调
public static event OnMSDKRetEventHandler<MSDKLBSLocationRet> LBSLocationRetEvent;
// 获取附近的人列表回调
public static event OnMSDKRetEventHandler<MSDKLBSRelationRet> LBSRelationRetEvent;
// 获取 IP 信息列表
public static event OnMSDKRetEventHandler<MSDKLBSIPInfoRet> LBSIPInfoRetEvent;
// 清除位置信息回调
public static event OnMSDKRetEventHandler<MSDKBaseRet> LBSRetEvent;
class MSDKLBSObserver
{
public:
//新增一个虚析构函数 不然 UnrealEngine 报错
virtual ~MSDKLBSObserver(){};
// 获取位置信息回调
virtual void OnLBSLocationRetNotify(const MSDKLBSLocationRet &locationRet) {};
// 获取附近的人回调
virtual void OnLBSRelationRetNotify(const MSDKLBSRelationRet &relationRet) {};
// 获取 IP 信息回调
virtual void OnLBSIPInfoRetNotify(const MSDKLBSIPInfoRet &ipInfoRet) {};
// 基础回调:清除位置信息回调
virtual void OnLBSBaseRetNotify(const MSDKBaseRet &baseRet) {};
};
3)示例代码
MSDKLBS.LBSRetEvent += mLBSCallBack.OnLBSClearLocationEvent;
MSDKLBS.LBSLocationRetEvent += mLBSCallBack.OnLBSGetLocationEvent;
MSDKLBS.LBSIPInfoRetEvent += mLBSCallBack.OnLBSGetIpInfoEvent;
MSDKLBS.LBSRelationRetEvent += mLBSCallBack.OnLBSGetNearByEvent;
public void OnLBSGetLocationEvent(MSDKLBSLocationRet baseRet)
{
string methodTag = "MSDKLBSLocationRet";
// SampleInstance.showRetDialog (methodTag, webViewRet);
mCurrentTestMgr.ShowLogInNewLine(methodTag + Tools.Instance.GetRetString(baseRet));
}
public void OnLBSGetNearByEvent(MSDKLBSRelationRet lbsRelationRet)
{
string methodTag = "MSDKLBSRelationRet";
// SampleInstance.showRetDialog (methodTag, webViewRet);
mCurrentTestMgr.ShowLogInNewLine(methodTag + Tools.Instance.GetRetString(lbsRelationRet));
}
public void OnLBSClearLocationEvent(MSDKBaseRet baseRet)
{
string methodTag = "ClearLocationInfo";
// SampleInstance.showRetDialog (methodTag, webViewRet);
mCurrentTestMgr.ShowLogInNewLine(methodTag + Tools.Instance.GetRetString(baseRet));
}
public void OnLBSGetIpInfoEvent(MSDKLBSIPInfoRet lbsIpInfoRet)
{
string methodTag = "MSDKLBSIPInfoRet";
// SampleInstance.showRetDialog (methodTag, webViewRet);
mCurrentTestMgr.ShowLogInNewLine(methodTag + Tools.Instance.GetRetString(lbsIpInfoRet));
}
MSDKLBS::SetLBSObserver(new MSDKLBSCallBacks());
#if PLATFORM_IOS || PLATFORM_ANDROID
using namespace GCloud::MSDK;
class CLIENTUETEST_API MSDKLBSCallBacks : public MSDKBaseCallBacks, public MSDKLBSObserver
{
public:
MSDKLBSCallBacks();
virtual ~MSDKLBSCallBacks();
// 获取位置信息回调
virtual void OnLBSLocationRetNotify(const MSDKLBSLocationRet &locationRet);
// 获取附近的人回调
virtual void OnLBSRelationRetNotify(const MSDKLBSRelationRet &relationRet);
// 获取 IP 信息回调
virtual void OnLBSIPInfoRetNotify(const MSDKLBSIPInfoRet &ipInfoRet);
// 基础回调:清除位置信息回调
virtual void OnLBSBaseRetNotify(const MSDKBaseRet &baseRet);
};
#else
class CLIENTUETEST_API MSDKLBSCallBacks : public MSDKBaseCallBacks
{
public:
MSDKLBSCallBacks();
~MSDKLBSCallBacks();
};
#endif
4)数据结构
- 获取位置回调结构:
MSDKLBSLocationRet
详解
继承自MSDKBaseRet
,包含的数据字段
成员变量名称 | 类型 | 说明 |
---|---|---|
longitude | double | 经度 |
latitude | double | 纬度 |
- 获取附近玩家回调结构:
MSDKLBSRelationRet
详解
继承自MSDKBaseRet
,包含的数据字段
成员变量名称 | 类型 | 说明 |
---|---|---|
isLost | string | 后台是否对数据降级处理,特殊渠道有,一般无须关心 |
personList | List |
附近玩家列表,最多可获取70-80人 |
其中,玩家列表字段: MSDKPersonInfo
继承自 MSDKPersonInfo
- 获取 IP 对应位置信息回调结构:
MSDKLBSIPInfoRet
详解
继承自MSDKBaseRet
,包含的数据字段
成员变量名称 | 类型 | 说明 |
---|---|---|
country | string | IP 对应的 ISO_3166-1标准中的国家或地区中文名称 |
countryCode | int | 国家或地区编码 |
province | string | 省级名称,限制中国大陆区域使用 |
provinceCode | int | 预留字段,省级编码,限制中国大陆区域使用 |
city | string | 市级名称,限制中国大陆区域使用 |
cityCode | int | 预留字段,市级编码,限制中国大陆区域使用 |
timestamp | long | 时间戳 |
isByHeader | bool | 查询方式,是通过查询缓存或请求头中获取,一般无须关心 |
- 清除位置信息回调结构:
MSDKBaseRet
2.3 获取位置
1)功能描述
调用该接口,可通过基站定位、WIFI 定位、GPS 定位(任何一种定位成功即可)得到玩家的位置信息,返回玩家当前的经纬度。建议 Android 工程中加上 ACCESS_WIFI_STATE 非敏感权限。
2)接口调用
// MSDK LBS 获取位置接口
void GetLocation();
// MSDK LBS 获取位置接口
void GetLocation();
3)回调接口
// MSDK LBS 获取位置回调
public void OnLBSGetLocationEvent(MSDKLBSLocationRet baseRet);
// 获取位置信息回调
void OnLBSLocationRetNotify(const MSDKLBSLocationRet &locationRet);
public void GetLocation()
{
MSDKLBS.GetLocation ();
}
void TestModuleMSDKLBS::GetLocation()
{
UE_LOG(LogTemp, Warning, TEXT("GetLocation"));
#if PLATFORM_IOS || PLATFORM_ANDROID
MSDKBaseTestManager::Instance()->ShowLogInNewLine("GetLocation");
MSDKLBS::GetLocation();
#else
UE_LOG(LogTemp, Warning, TEXT("no support GetLocation"));
#endif
}
2.4 获取附近玩家
1)功能描述
可获取到玩家附近位置的其他已定位玩家列表。
2)接口调用
// MSDK LBS 获取附近玩家接口
void GetNearby();
// MSDK LBS 获取附近玩家接口
void GetNearby();
// MSDK LBS 获取附近玩家回调
public void OnLBSGetNearByEvent(MSDKLBSRelationRet lbsRelationRet);
// 获取附近的人回调
void OnLBSRelationRetNotify(const MSDKLBSRelationRet &relationRet);
public void GetNearby()
{
MSDKLBS.GetNearby ();
}
void TestModuleMSDKLBS::GetNearby()
{
UE_LOG(LogTemp, Warning, TEXT("GetNearby"));
#if PLATFORM_IOS || PLATFORM_ANDROID
MSDKBaseTestManager::Instance()->ShowLogInNewLine("GetNearby");
MSDKLBS::GetNearby();
#else
UE_LOG(LogTemp, Warning, TEXT("no support GetNearby"));
#endif
}
2.5 清除位置信息
1)功能描述
在获取位置和获取附近好友功能中,都会设置玩家的信息到后台。调用该接口可清除后台对该玩家的位置设置,使得该玩家不会出现在别的玩家的附近玩家列表中。
2)接口调用
// MSDK LBS 清除位置接口
void ClearLocation();
// MSDK LBS 清除位置接口
void ClearLocation();
// MSDK LBS 清除位置回调
public void OnLBSClearLocationEvent(MSDKBaseRet baseRet);
void OnLBSBaseRetNotify(const MSDKBaseRet &baseRet);
public void ClearLocationInfo()
{
MSDKLBS.ClearLocation ();
}
void TestModuleMSDKLBS::ClearLocation()
{
UE_LOG(LogTemp, Warning, TEXT("ClearLocation"));
#if PLATFORM_IOS || PLATFORM_ANDROID
MSDKBaseTestManager::Instance()->ShowLogInNewLine("ClearLocation");
MSDKLBS::ClearLocation();
#else
UE_LOG(LogTemp, Warning, TEXT("no support ClearLocation"));
#endif
}
2.6 获取 IP 对应位置信息
1)功能描述
当前设备网络的 IP 地址对应位置信息。当前可以提供国家、省、市信息,其中省、市从 MSDKV5.28 版本开始支持,建议海外区域仅使用国家。
2)接口调用
// MSDK LBS 获取 IP 对应位置信息接口
void GetIPInfo();
// MSDK LBS 获取 IP 对应位置信息接口
void GetIPInfo();
// MSDK LBS 获取 IP 对应位置信息回调
public void OnLBSGetIpInfoEvent(MSDKLBSIPInfoRet lbsIpInfoRet);
// 获取 IP 信息回调
void OnLBSIPInfoRetNotify(const MSDKLBSIPInfoRet &ipInfoRet);
获取 IP 对应位置信息回调结构:MSDKLBSIPInfoRet
详解
继承自 MSDKBaseRet
,包含的数据字段
成员变量名称 | 类型 | 说明 |
---|---|---|
country | string | IP 对应的 ISO_3166-1标准中的国家或地区中文名称 |
countryCode | int | 国家或地区编码 |
province | string | 省级名称,限制中国大陆区域使用 |
provinceCode | int | 预留字段,省级编码,限制中国大陆区域使用 |
city | string | 市级名称,限制中国大陆区域使用 |
cityCode | int | 预留字段,市级编码,限制中国大陆区域使用 |
timestamp | long | 时间戳 |
isByHeader | bool | 查询方式,是通过查询缓存或请求头中获取,一般无须关心 |
4)示例代码
public void GetIPInfo()
{
MSDKLBS.GetIPInfo ();
}
void TestModuleMSDKLBS::GetIPInfo()
{
UE_LOG(LogTemp, Warning, TEXT("GetIPInfo"));
#if PLATFORM_IOS || PLATFORM_ANDROID
MSDKBaseTestManager::Instance()->ShowLogInNewLine("GetIPInfo");
MSDKLBS::GetIPInfo();
#else
UE_LOG(LogTemp, Warning, TEXT("no support GetIPInfo"));
#endif
}
All rights reserved.