這篇文章主要說的是 Unity 釋出ios 接高德定位 擷取定位資訊
教程盡量說詳細點
稍後配上工程目錄
1.登入高德開放平台 主要參照高德文檔來 第一步 點選擷取key 然後按照裡面的教程來很詳細,我就不多說了
2.第二步 點選手動部署 注意是手動部署哦 雖然有人說自動部署更好 但是我xcode是個小白一不注意就失敗了。是以我選擇了手動部署,然後下載下傳我裱起來兩個庫檔案。
3.然後就是打開Unity 建立一個Unity和ios 溝通的腳本 然後釋出打包Xcode檔案
//定位資訊
[DllImport("__Internal")]
private static extern void initStart();//初始定位
[DllImport("__Internal")]
private static extern void LocalIos();//擷取定位
string m_szAmapLocal = "0|0";
//button 開始定位 UNIty建立一個按鈕 然後點選按鈕響應這個方法
public void StartAmap()
{
initStart();
LocalIos();
Debug.Log("Unity 開始定位");
}
//button 擷取定位 Unity 建立一個按鈕 點選響應這個方法
public void LocateAction()
{
Debug.Log("Unity開始蘋果擷取定位");
LocalIos();
}
//儲存地理位置
public string AmapLocal()
{
return m_szAmapLocal;
}
//接受從IOS傳來的地理位置
void LocateIOSGPS(string s)
{
m_szAmapLocal = s;
Debug.Log("[MsgFrom ios]" + s);
}
然後 按照 手動部署 然後 需要引入的系統庫檔案 需要申請的權限 ATS設定 高德官方文檔很清楚 建議哈 還是按照文檔來
4.打包出來的xcode檔案找到 點選.xcodeproj打開項目 将第二步下載下傳的庫檔案拖到xcode裡
然後建立一個AmapUnity.h檔案
<Foundation/Foundation.h>
@interface AmapUnity : NSObject
@end
然後建立一個橋梁檔案 用來溝通c#和ob語言的 AmapUnity .m檔案
#import "AmapUnity.h"
#import "AmapGaoDe.h"
@implementation AmapUnity
//Unity to ios dayin
AmapGaoDe *iapAmap =nil;
void initStart()
{
NSLog(@"Msg ==========ios 開始定位");
iapAmap = [[AmapGaoDe alloc] init];
[iapAmap startActive];
}
void LocalIos()
{
NSLog(@"Msg ===========擷取 定位");
[iapAmap locateAction];
}
@end
然後 可能.m檔案會報錯 AmapGaoDe找不到 我們接下來來接高德的SDK了 參照高德官方文檔
這塊按照你們的項目需求 參照官方文檔 我的隻是調用了項目需要的一部分
建立了一個AmapGaoDe.h檔案 用來溝通之前的.m檔案
#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
#import <AMapLocationKit/AMapLocationKit.h>
@interface AmapGaoDe : UIViewController
@property (nonatomic, strong) AMapLocationManager *locationManager;
- (void)startActive;
- (void)locateAction;
@end
然後 建立.m檔案 高德的sdk 這個檔案裡 按照你們項目需求來 比如:我的項目需求就是擷取經緯度 然後内容如下
#import "AmapGaoDe.h"
#import <AMapFoundationKit/AMapFoundationKit.h>
#import <AMapLocationKit/AMapLocationKit.h>
@interface AmapGaoDe () <AMapLocationManagerDelegate>
@property (nonatomic, copy) AMapLocatingCompletionBlock completionBlock;
@end
@implementation AmapGaoDe
- (void)startActive
{
//初始化AMapLocationManager對象,設定代理
[AMapServices sharedServices][email protected]"您的key";
self.locationManager = [[AMapLocationManager alloc] init];
[self.locationManager setDelegate:self];
// 帶逆地理資訊的一次定位(傳回坐标和位址資訊 高精度)
[self.locationManager setDesiredAccuracy:kCLLocationAccuracyBest];
// 定位逾時時間,最低2s,此處設定為10s
[self.locationManager setLocationTimeout:10];
// 逆地理請求逾時時間,最低2s,此處設定為10s
[self.locationManager setReGeocodeTimeout:10];
}
- (void)locateAction
{
//帶逆地理的單次定位
//帶逆地理(傳回坐标和位址資訊)。将下面代碼中的 YES 改成 NO ,則不會傳回位址資訊。
[self.locationManager requestLocationWithReGeocode:YES completionBlock:^(CLLocation *location, AMapLocationReGeocode *regeocode, NSError *error) {
if (error)
{
NSLog(@"locError:{%ld - %@};", (long)error.code, error.localizedDescription);
NSString *[email protected]"1|1";
UnitySendMessage("Main", "LocateIOSGPS",[err UTF8String]);
if (error.code == AMapLocationErrorLocateFailed)
{
return;
}
}
//定位資訊 經緯度
NSString *lat;
lat = [NSString stringWithFormat:@"%f|%f",location.coordinate.longitude,location.coordinate.latitude];
UnitySendMessage("Main", "LocateIOSGPS",[lat UTF8String]);
//逆地理資訊
if (regeocode)
{
NSLog(@"reGeocode:%@", regeocode);
}
}];
}
@end
我采用的設定是: 高精度 單次定位 擷取的值是經緯度
我們一共是建立了2個.h檔案 2個.m檔案 一共四個檔案 放到Unity 項目的plugins/IOS檔案 下次Unity打包Xcode直接就包含這4個檔案