日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

接入 iOS

更新時(shí)間:

本文將介紹如何將定位插件接入到 iOS 客戶端。定位 SDK 是一套簡(jiǎn)單的 LBS (Location-based services) 定位接口,您可以使用這套定位 API 獲取定位結(jié)果。

SDK 支持 基于 mPaaS 框架接入基于已有工程且使用 mPaaS 插件接入 以及 基于已有工程且使用 CocoaPods 接入 三種接入方式。您可以參考 接入方式介紹,根據(jù)實(shí)際業(yè)務(wù)情況選擇合適的接入方式。

前置條件

您已經(jīng)接入工程到 mPaaS。更多信息,請(qǐng)參見以下內(nèi)容:

添加 SDK

  1. 根據(jù)您采用的接入方式,請(qǐng)選擇相應(yīng)的添加方式。

    • 使用 mPaaS Xcode Extension。此方式適用于采用了 基于 mPaaS 框架接入基于已有工程且使用 mPaaS 插件接入 的接入方式。

      1. 點(diǎn)擊 Xcode 菜單項(xiàng) Editor > mPaaS > 編輯工程,打開編輯工程頁面。

      2. 選擇 移動(dòng)定位,保存后點(diǎn)擊 開始編輯,即可完成添加。image.png

    • 使用 cocoapods-mPaaS 插件。此方式適用于采用了 基于已有工程且使用 CocoaPods 接入 的接入方式。

      1. 在 Podfile 文件中,使用 mPaaS_pod "mPaaS_LBS" 添加移動(dòng)定位組件依賴。image.png

      2. 在命令行中執(zhí)行 pod install 即可完成接入。

  2. 打開定位提醒。image.png

使用 SDK

本文將結(jié)合 定位 官方 Demo 介紹如何在 10.1.32 及以上版本的基線中使用定位 SDK。

目前,在 APMobileLBS 模塊中,提供了獲取當(dāng)前位置的經(jīng)緯度信息方法。

說明

定位服務(wù)目前暫不支持逆地理查詢功能,您可調(diào)用高德接口進(jìn)行逆地理查詢。

API 說明

參見以下代碼,了解定位服務(wù)相關(guān)接口,通過注釋獲取接口和相關(guān)參數(shù)說明。

使用 MPLBSConfiguration 配置參數(shù)

/**
 定位服務(wù)的配置
 */
@interface MPLBSConfiguration : NSObject

/** 單次定位期望精度,單位米,建議結(jié)合業(yè)務(wù)場(chǎng)景傳入一個(gè)可接受正數(shù),如 500,即 500m 以內(nèi)的范圍 */
@property (nonatomic, assign) CLLocationAccuracy desiredAccuracy;

/** 單次定位接受的緩存時(shí)間,從當(dāng)前時(shí)間往前推,多長(zhǎng)時(shí)間內(nèi)的緩存是有效的,推薦設(shè)置 30s 以上的緩存時(shí)間 */
@property (nonatomic, assign) APCoreLocationCacheAvaliable cacheTimeInterval;

/** 單次定位或逆地理查詢的超時(shí)時(shí)間,單位秒,默認(rèn)和最小設(shè)置為 2s */
@property (nonatomic, assign) NSTimeInterval timeOut;

/** 逆地理查詢的信息級(jí)別,默認(rèn) APCoreLocationReGeoLevelDistrict */
@property (nonatomic, assign) LBSLocationReGeoLevel reGeoLevel;

/** 逆地理查詢的位置信息,在其中指定經(jīng)緯度坐標(biāo) */
@property (nonatomic, strong) CLLocation *reGeoLocation;

/** 逆地理查詢位置信息是否為高德坐標(biāo)系,默認(rèn) YES(使用 reGeoLocation 參數(shù)時(shí)生效) */
@property (nonatomic, assign) BOOL reGeoCoordinateConverted;

/** 是否打開簽到功能,默認(rèn) NO(按需設(shè)置打開) */
@property (nonatomic, assign) BOOL needCheckIn;

/**
 *  是否需要高精度定位,iOS 14 以下不區(qū)分精度,iOS 14 及以上默認(rèn) NO (低精度),需要業(yè)務(wù)指定是否需要高精度定位。
 */
@property (nonatomic,assign) BOOL highAccuracyRequired;

@end

使用 MPLBSLocationManager 發(fā)起定位請(qǐng)求

/**
 定位結(jié)果的回調(diào) block

 @param success 是否成功
 @param locationInfo 位置信息
 @param error 定位失敗的錯(cuò)誤信息
 */
typedef void(^MPLBSLocationCompletionBlock)(BOOL success,
                                            MPLBSLocationInfo *locationInfo,
                                            NSError *error);

/**
 定位服務(wù)
 */
@interface MPLBSLocationManager : NSObject

/**
 初始化

 @param configuration 參數(shù)配置
 @return 實(shí)例
 */
- (instancetype)initWithConfiguration:(MPLBSConfiguration *)configuration;

/**
 發(fā)起單次定位

 @param needReGeocode 是否需要逆地理信息。由于定位服務(wù)目前暫不支持逆地理查詢功能,此處需傳入 NO。
 @param block 定位結(jié)束的回調(diào) block
 */
- (void)requestLocationNeedReGeocode:(BOOL)needReGeocode
                   completionHandler:(MPLBSLocationCompletionBlock)block;

回調(diào)中 MPLBSLocationInfo 的說明

/**
 逆地理信息
 */
@interface MPLBSReGeocodeInfo : NSObject

@property (nonatomic, strong) NSString* country;        // 國(guó)家
@property (nonatomic, strong) NSString* countryCode;    // 國(guó)家編碼
@property (nonatomic, strong) NSString* provience;      // 省
@property (nonatomic, strong) NSString* city;           // 城市
@property (nonatomic, strong) NSString* district;       // 區(qū)
@property (nonatomic, strong) NSString* street;         // 街道
@property (nonatomic, strong) NSString* streetCode;     // 街道編碼
@property (nonatomic, strong) NSString* cityCode;       // 城市編碼
@property (nonatomic, strong) NSString* adCode;         // 行政區(qū)劃編碼
@property (nonatomic, strong) NSArray* poiList;         // poi 信息列表

@end

/**
 定位結(jié)果的位置信息數(shù)據(jù)結(jié)構(gòu)
 */
@interface MPLBSLocationInfo : NSObject

@property (nonatomic, strong) CLLocation* location;         // 位置信息
@property (nonatomic, strong) MPLBSReGeocodeInfo* rgcInfo;  // 逆地理信息

@end

代碼示例

- (void)getLocation {
    MPLBSConfiguration *configuration = [[MPLBSConfiguration alloc] init];
    configuration.desiredAccuracy = kCLLocationAccuracyBest;

    self.locationManager = [[MPLBSLocationManager alloc] initWithConfiguration:configuration];
    [self.locationManager requestLocationNeedReGeocode:NO completionHandler:^(BOOL success, MPLBSLocationInfo * _Nonnull locationInfo, NSError * _Nonnull error) {
        NSString *message;
        if (success) {
            message = [NSString stringWithFormat:@"定位成功, 經(jīng)度: %.5f, 維度: %.5f, 精確度: %.3f, 是否高精度 : %d", locationInfo.location.coordinate.longitude, locationInfo.location.coordinate.latitude, locationInfo.location.horizontalAccuracy, !locationInfo.location.ap_lbs_is_high_accuracy_close];
        } else {
            message = [NSString stringWithFormat:@"%@", error];
        }
        dispatch_async(dispatch_get_main_queue(), ^{
            AUNoticeDialog *alert = [[AUNoticeDialog alloc] initWithTitle:@"定位結(jié)果" message:message delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
            [alert show];
        });
    }];
}

iOS 14 適配

在 iOS 14 中,精確位置作為一個(gè)權(quán)限選項(xiàng),在申請(qǐng)定位權(quán)限時(shí)供用戶主動(dòng)選擇,并且在定位權(quán)限設(shè)置頁面可供用戶調(diào)整。image.pngimage.png

入?yún)⑦m配

在 MPLBSConfiguration 中,增加了 highAccuracyRequired 設(shè)置,如果入?yún)?highAccuracyRequired = YES,用戶關(guān)閉高精度定位權(quán)限,則回調(diào)錯(cuò)誤。

/**
 定位服務(wù)的配置
 */
@interface MPLBSConfiguration : NSObject

/**
 *  是否需要高精度定位,iOS 14 以下不區(qū)分精度,iOS 14 及以上默認(rèn) NO(低精度),需要業(yè)務(wù)指定是否需要高精度定位。
 */
@property (nonatomic,assign) BOOL highAccuracyRequired;

@end
//如果入?yún)?highAccuracyRequired = YES,且無高精度定位權(quán)限則回調(diào)錯(cuò)誤
Errorcode:APCoreLocationErrorCodeHighAccuracyAuthorization

回調(diào)適配

如果入?yún)?highAccuracyRequired = NO 或者未設(shè)置,則回調(diào)的 CLLocation 對(duì)象里面會(huì)增加字段ap_lbs_is_high_accuracy_close 以標(biāo)識(shí)是否關(guān)閉高精度定位。

// 出參改造
@interface CLLocation (APMobileLBS)
/*
 *  是否關(guān)閉精準(zhǔn)定位,默認(rèn)為 NO
 */
@property(nonatomic,assign)BOOL ap_lbs_is_high_accuracy_close;
@end

代碼示例

- (void)getLocationWithHighAccuracy {
    MPLBSConfiguration *configuration = [[MPLBSConfiguration alloc] init];
    configuration.desiredAccuracy = kCLLocationAccuracyBest;
    configuration.highAccuracyRequired = YES;

    self.locationManager = [[MPLBSLocationManager alloc] initWithConfiguration:configuration];
    [self.locationManager requestLocationNeedReGeocode:NO completionHandler:^(BOOL success, MPLBSLocationInfo * _Nonnull locationInfo, NSError * _Nonnull error) {
        NSString *message;
        if (success) {
            message = [NSString stringWithFormat:@"定位成功, 經(jīng)度: %.5f, 維度: %.5f, 精確度: %.3f, 是否高精度 : %d", locationInfo.location.coordinate.longitude, locationInfo.location.coordinate.latitude, locationInfo.location.horizontalAccuracy, !locationInfo.location.ap_lbs_is_high_accuracy_close];
        } else {
            message = [NSString stringWithFormat:@"%@", error];
        }
        dispatch_async(dispatch_get_main_queue(), ^{
            AUNoticeDialog *alert = [[AUNoticeDialog alloc] initWithTitle:@"定位結(jié)果" message:message delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
            [alert show];
        });
    }];
}