适用于iOS的Geotrigger SDK是一套工具,可以帮助您的应用与Geotrigger服务进行通信,并提供准确的位置数据,而无需使用比绝对必要更多的设备电量。
适用于iOS的Geotrigger SDK的核心是AGSGTGeotriggerManager
,它是iOS原生位置服务的一个包装器,提供了一系列跟踪配置文件,以支持各种用例,同时尽可能地保留电池寿命。《AGSGTGeotriggerManager》还负责将设备位置上传到Geotrigger API。
除了管理器之外,还有AGSGTApiClient
,可以用于使用《postPath:parameters:success:failure:方法调用服务器的任何API方法。
以下是如何使用Geotrigger SDK来启动(新或现有)应用程序的步骤。您还可能发现示例项目有所帮助,其中已经完成了此处概述的步骤。
添加适用于iOS的Geotrigger SDK到您的项目有两种方式——手动或使用CocoaPods。
在您开始跟踪设备位置或与Geotrigger API通信之前,您需要通过调用一个setupWithClientId:...
方法来设置全局实例AGSGTGeotriggerManager
。建议您在您的UIApplicationDelegate
的application:didFinishLaunchingWithOptions:
中执行此操作,以便经理可以尽快就绪。
这些方法所需的最小必要参数包括
clientId
:您的ArcGIS Online应用程序的ClientIDisProduction
:一个布尔值,表示应用程序是否是使用生产或沙盒配置文件构建的。这个值用于告诉Geotrigger服务器将推送通知发送到哪里。completion
:一个块,将在AGSGTGeotriggerManager
初始化完成后执行。如果设置成功完成,则error
参数为nil
,否则为遇到的其他错误。其他可选参数包括
tags
:传递此参数将导致AGSGTGeotriggerManager
在准备就绪后将指定的标签自动添加到设备上。trackingProfile
:传递此参数将导致AGSGTGeotriggerManager
在准备就绪后自动开启位置更新,使用此配置文件。以下是启动管理器的一种常见方式。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
...
[AGSGTGeotriggerManager setupWithClientId:kClientId isProduction:NO tags:@[@"test"] completion:^(NSError *error) {
if (error != nil) {
NSLog(@"Geotrigger Service setup encountered error: %@", error);
} else {
NSLog(@"Geotrigger Service ready to go!");
// Turn on location tracking in adaptive mode
[AGSGTGeotriggerManager sharedManager].trackingProfile = kAGSGGTTrackingProfileAdaptive;
}
}];
...
}
默认情况下,当您调用一个setupWithClientId:...
方法时,AGSGTGeotriggerManager
将自己设置为自动接收和处理推送通知的主要UIApplicationDelegate
,并将所有UIApplicationDelegate
方法转发到您的UIApplicationDelegate
。这会将它设置为,如果应用程序在接收到通知时位于前台,则会在一个带有关闭按钮和“查看”按钮的UIAlertView
中显示通知文本。如果有效载荷中有URL,则“查看”按钮才会显示。如果您希望用户打开应用程序以响应推送通知后直接跳转到URL,则需要在您的application:didFinishLaunchingWithOptions:
中添加以下内容:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
...
// If we were launched from a push notification, send the payload to the Geotrigger Manager
if (launchOptions[UIApplicationLaunchOptionsRemoteNotificationKey] != nil) {
[AGSGTGeotriggerManager handlePushNotification:launchOptions[UIApplicationLaunchOptionsRemoteNotificationKey] showAlert:NO];
}
...
}
如果您需要实现自定义推送通知处理,可以使用常规的UIApplicationDelegate
方法(application:didReceiveRemoteNotification:
)。但是,请勿在此方法中调用AGSGTGeotriggerManager
的handlePushNotification:...
方法,否则您的应用程序将向用户显示两次通知!
如果您希望手动设置推送通知,请在调用setupWithClientId:...
之前添加以下内容:
[AGSGTGeotriggerManager sharedManager].autoSetupEnabled = NO;
在注册远程通知之后(无论是通过自己调用UIApplication
方法还是通过AGSGTGeotriggerManager
),您需要将苹果发送到您的UIApplicationDelegate
的设备Token发送到Geotrigger Manager,以便我们可以在服务器上将其附加到设备。
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{
[[AGSGTGeotriggerManager sharedManager] registerAPNSDeviceToken:deviceToken completion:nil];
}
- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error
{
NSLog(@"Failed to register for remote notifications: %@", error);
}
包含与Geotrigger API交互、使用Geotrigger API以及配置推送通知等各种主题的指南可作为Geotrigger文档的一部分获取。有关其他平台和API本身的信息也可用。
本仓库中的SDK的参考文档也在此repo中可用。