MapillarySDK 0.8

MapillarySDK 0.8

Anders Mårtensson 维护。



 
依赖库
AFNetworking~> 3.1
BOSImageResizeOperation~> 0.1
SDVersion~> 4.0
AWSCore~> 2.6
AWSS3~> 2.6
PodAsset~> 0.22
SAMKeychain~> 1.5
NSHash~> 1.2
 

mapillary-sdk-ios

此仓库是 Mapillary iOS SDK 的家园。

CocoaPods 安装

CocoaPods 是 Objective-C 和 Swift 的依赖项管理器,它自动化并简化了在项目中使用如 MapillarySDK 等第三方库的过程。您可以使用以下命令安装它

$ gem install cocoapods

Podfile

要使用 CocoaPods 将 MapillarySDK 集成到您的 Xcode 项目中,在 Podfile 中指定它

platform :ios, '11.0'

target 'TargetName' do
	pod 'MapillarySDK'
end

然后,运行以下命令

$ pod install

配置

在与Mapillary注册您的应用程序

要使用SDK,您需要注册您的应用程序并获取Mapillary客户端ID。

  1. 如果您还没有,请创建Mapillary账户
  2. 开发者页面创建应用程序。
回调URL

填写表格时,请确保回调URL与以下类似

com.mycompany.myapp.mapillary

权限范围

请确保检查您的应用程序需要访问的权限。如果不确定,请检查所有权限。稍后在应用程序中授权时,您需要提供相同的权限范围。

客户端ID

注册您的应用程序后,复制您的客户端ID,稍后初始化SDK需要它。

编辑应用程序plist

MapillaryClientIdMapillaryCallbackUrl添加到您的plist文件中。以下是plist文件部分示例的内容。

<plist version="1.0">
<dict>
	...
	<key>MapillaryClientId</key>
	<string>YOUR_CLIENT_ID</string>
	...
	<key> MapillaryCallbackUrl</key>
	<string>YOUR_CALLBACK_URL</string>
	...
</dict>
</plist>

将其添加到应用程序代理

为了使后台上传正常工作,您需要添加以下内容:

Swift
func application(_ application: UIApplication, handleEventsForBackgroundURLSession identifier: String, completionHandler: @escaping () -> Void) {
        
	MAPApplicationDelegate.application(application, handleEventsForBackgroundURLSession: identifier, completionHandler: completionHandler)
}
Objective-C
- (void)application:(UIApplication *)application handleEventsForBackgroundURLSession:(NSString *)identifier completionHandler:(void (^)(void))completionHandler
{    
    [MAPApplicationDelegate application:application handleEventsForBackgroundURLSession:identifier completionHandler:completionHandler];
}

使用说明

以下是一份快速入门指南,帮助您开始。请查阅完整的文档以获取详细信息。

登录

您需要指定应用需要访问的权限(以位掩码形式)。与注册应用时使用的权限相同。

Swift
MAPLoginManager.signIn(from: self, scope: MAPScopeMask.all, result: { (success) in
            
    if success
    {
        // Sign in was sucessful
    }
    else
    {
        // Sign in failed
    }
            
}) {
            
    // The user cancelled the sign in process
            
}
Objective-C
[MAPLoginManager signInFromViewController:self scope:MAPScopeMaskAll result:^(BOOL success) {            
    
    if (success)
    {
        // Sign in was sucessful
    }
    else
    {
        // Sign in failed
    }        
            
} cancelled:^{
            
    // The user cancelled the sign in process
            
}];

登出

Swift
MAPLoginManager.signOut()
Objective-C
[MAPLoginManager signOut];

创建新序列

Swift
let device = MAPDevice.thisDevice() as! MAPDevice
let sequence = MAPSequence.init(device: device)
Objective-C
MAPDevice* device = [MAPDevice thisDevice];
MAPSequence* sequence = [[MAPSequence alloc] initWithDevice:device];    

将图像添加到新序列

只需向序列添加图像数据,请使用以下方法:

Swift
sequence.addImage(with: imageData, date: nil, location: nil)
Objective-C
[sequence addImageWithData:imageData date:nil location:nil];

向新的序列中添加地点

仅向序列添加地点,请使用此方法

Swift
let location = MAPLocation.init()
location.location = lastLocation // From CLLocationManager
sequence.addLocation(location)
Objective-C
MAPLocation* location = [[MAPLocation alloc] init];
location.location = lastLocation; // From CLLocationManager
[sequence addLocation:location];

列出序列

Swift
MAPFileManager.getSequencesAsync(true) { (sequences) in

    // Do something
    
}
Objective-C
[MAPFileManager getSequencesAsync:true done:^(NSArray *sequences) {
        
    // Do something
                    
}];

上传序列

上传是一个两步的过程;图像处理和实际上传。在图像可以安排上传之前,它需要先被处理。这意味着必须将必要的信息写入图像的EXIF中,如GPS位置、您的用户键、方向等。

图像处理不能在后台执行。一旦所有图像都处理完毕,您可以将应用置于后台,上传将一直进行,直到所有图像都上传完毕。

为了测试上传,使用两个属性testUploaddeleteAfterUpload(仅在testUpload设置为YES时使用)来配置上传器

Swift
let uploadManager = MAPUploadManager.shared()
uploadManager.delegate = self
uploadManager.testUpload = true // Upload to our test server instead
uploadManager.deleteAfterUpload = false // Keep the images after upload
uploadManager.processAndUploadSequences(sequencesToUpload)
Objective-C
MAPUploadManager* uploadManager = [MAPUploadManager sharedManager];
uploadManager.delegate = self;
uploadManager.testUpload = YES; // Upload to our test server instead
uploadManager.deleteAfterUpload = NO; // Keep the images after upload
[uploadManager processAndUploadSequences:sequencesToUpload];

当你的应用程序准备好发布时,只需省略这两行

Swift
let uploadManager = MAPUploadManager.shared()
uploadManager.delegate = self
uploadManager.processAndUploadSequences(sequencesToUpload)
Objective-C
MAPUploadManager* uploadManager = [MAPUploadManager sharedManager];
uploadManager.delegate = self;
[uploadManager processAndUploadSequences:sequencesToUpload];

跟踪图片处理和上传进度

要跟踪图片处理和/或上传的进度,并能够更新用户界面,使用MAPUploadManagerDelegate

Swift

func imageProcessed(_ uploadManager: MAPUploadManager!, image: MAPImage!, status: MAPUploadManagerStatus!)
{
	// Image was processed
}
    
func processingFinished(_ uploadManager: MAPUploadManager!, status: MAPUploadManagerStatus!)
{
    // Image processing finished
}

func processingStopped(_ uploadManager: MAPUploadManager!, status: MAPUploadManagerStatus!)
{
    // Image processing was stopped
}

func imageUploaded(_ uploadManager: MAPUploadManager!, image: MAPImage!, status: MAPUploadManagerStatus!)
{
   // Image was uploaded sucessfully
}

func imageFailed(_ uploadManager: MAPUploadManager!, image: MAPImage!, status: MAPUploadManagerStatus!, error: Error!) 
{
	// Image failed to uploaded  
}
    
func uploadedData(_ uploadManager: MAPUploadManager!, bytesSent: Int64, status: MAPUploadManagerStatus!) 
{
	// Uploaded bytesSent bytes
}

func uploadFinished(_ uploadManager: MAPUploadManager!, status: MAPUploadManagerStatus!)
{
	// Upload finished
}

func uploadStopped(_ uploadManager: MAPUploadManager!, status: MAPUploadManagerStatus!) 
{
	// Upload stopped    
}

Objective-C
- (void)imageProcessed:(MAPUploadManager*)uploadManager image:(MAPImage*)image status:(MAPUploadManagerStatus*)status
{
    // Image was processed
}

- (void)processingFinished:(MAPUploadManager*)uploadManager status:(MAPUploadManagerStatus*)status
{
    // Image processing finished
}

- (void)processingStopped:(MAPUploadManager*)uploadManager status:(MAPUploadManagerStatus*)status
{
    // Image processing was stopped
}

- (void)imageUploaded:(MAPUploadManager*)uploadManager image:(MAPImage*)image status:(MAPUploadManagerStatus*)status
{
    // Image was uploaded sucessfully
}

- (void)imageFailed:(MAPUploadManager*)uploadManager image:(MAPImage*)image status:(MAPUploadManagerStatus*)status error:(NSError*)error
{
    // Image failed to uploaded
}

- (void)uploadedData:(MAPUploadManager*)uploadManager bytesSent:(int64_t)bytesSent status:(MAPUploadManagerStatus*)status
{
	// Uploaded bytesSent bytes
}

- (void)uploadFinished:(MAPUploadManager*)uploadManager status:(MAPUploadManagerStatus*)status
{
	// Upload finished
}

- (void)uploadStopped:(MAPUploadManager*)uploadManager status:(MAPUploadManagerStatus*)status
{
	// Upload stopped
}

文档

最新生成的文档可以在这里找到 这里

示例应用

有一个名为 MapillarySDKExample 的示例应用,演示了SDK中的大多数功能。

维护者

@millenbop, [email protected]

贡献

在此处提供反馈并报告SDK的bug 这里

许可协议

版权(C)所有 Mapillary 2018