GeotriggerSDK 1.2.1

GeotriggerSDK 1.2.1

许可证 商业版
发布时间上次发布2015年10月

Aaron Parecki维护。



  • Esri波特兰研发中心

适用于iOS的Geotrigger SDK

概览

适用于iOS的Geotrigger SDK是一套工具,可以帮助您的应用与Geotrigger服务进行通信,并提供准确的位置数据,而无需使用比绝对必要更多的设备电量。

适用于iOS的Geotrigger SDK的核心是AGSGTGeotriggerManager,它是iOS原生位置服务的一个包装器,提供了一系列跟踪配置文件,以支持各种用例,同时尽可能地保留电池寿命。《AGSGTGeotriggerManager》还负责将设备位置上传到Geotrigger API。

除了管理器之外,还有AGSGTApiClient,可以用于使用《postPath:parameters:success:failure:方法调用服务器的任何API方法

以下是如何使用Geotrigger SDK来启动(新或现有)应用程序的步骤。您还可能发现示例项目有所帮助,其中已经完成了此处概述的步骤。

添加Geotrigger SDK

先决条件

  1. 为了在iOS 8中启用位置服务,您需要输入一条关于您的应用程序如何使用位置信息的消息,并将其置于《Info.plist》文件中的《NSLocationAlwaysUsageDescription》。当操作系统第一次提示用户请求使用他们的位置权限时,此消息将显示给用户。有关详细信息,请参阅有关主题的《Apple Documentation》的Apple Documentation
  2. 为了在您的应用程序不在前台时接收位置更新并将它们发送到服务器,您需要启用以下“后台模式”,可以在Project Settings窗口中选择应用程序目标时在“Capabilities”标签中找到:
    • 位置更新
    • 后台获取

添加适用于iOS的Geotrigger SDK到您的项目有两种方式——手动或使用CocoaPods

设置GeotriggerManager

在您开始跟踪设备位置或与Geotrigger API通信之前,您需要通过调用一个setupWithClientId:...方法来设置全局实例AGSGTGeotriggerManager。建议您在您的UIApplicationDelegateapplication:didFinishLaunchingWithOptions:中执行此操作,以便经理可以尽快就绪。

这些方法所需的最小必要参数包括

  • clientId:您的ArcGIS Online应用程序的ClientID
  • isProduction:一个布尔值,表示应用程序是否是使用生产或沙盒配置文件构建的。这个值用于告诉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:)。但是,请勿在此方法中调用AGSGTGeotriggerManagerhandlePushNotification:...方法,否则您的应用程序将向用户显示两次通知!

如果您希望手动设置推送通知,请在调用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中可用。