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。
- 如果您还没有,请创建Mapillary账户。
- 在开发者页面创建应用程序。
回调URL
填写表格时,请确保回调URL与以下类似
com.mycompany.myapp.mapillary
权限范围
请确保检查您的应用程序需要访问的权限。如果不确定,请检查所有权限。稍后在应用程序中授权时,您需要提供相同的权限范围。
客户端ID
注册您的应用程序后,复制您的客户端ID,稍后初始化SDK需要它。
编辑应用程序plist
将MapillaryClientId
和MapillaryCallbackUrl
添加到您的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位置、您的用户键、方向等。
图像处理不能在后台执行。一旦所有图像都处理完毕,您可以将应用置于后台,上传将一直进行,直到所有图像都上传完毕。
为了测试上传,使用两个属性testUpload
和deleteAfterUpload
(仅在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