iCignalSDK 2.4.5

iCignalSDK 2.4.5

许可证 自定义
已发布最新发布2018年9月

Mj ChoQuintet维护。





英文

韩语

License
CocoaPods
Platform


简介

好吧,我知道没有人会真的阅读这个。但是,作为一个好开发者,我在写这篇文档。
这是一个 SDK(也称为软件开发包),这意味着您可以使用此软件包以更简单的方式构建自己的应用程序。因此,这只是一个为您构建自己的东西的工具。
这个 SDK 将使您在处理物联网设备时更加痛苦。
但是此 SDK 仅与控制内容和规则的服务器完全兼容。SDK 启动时所做的第一件事是要求服务器询问 SDK 如何在物联网设备上响应用户。例如,'SDK 是否应该扫描 iBeacon?' 或 '日志发送的时间间隔是多少?'。所以,没有服务器它不太有用。好吧,几乎什么都不能工作,但只有调试功能。

因此,请访问iCIGNAL并获取一个 API 密钥。

特性

简单易用

拖放,安装完成。没有依赖项或构建设置问题。只要满足要求,您就可以说走就走。您最常使用的的方法不到 10 个。实际上,所有公共方法(包括 getter 集成器和调试实用程序)不到 100 个。
您需要做的只是,设计您的应用程序在获取预定义任务时将如何以及做什么。

结构良好

它比其他设备略大,但结构良好。您可以从哪里获取它?不多。除非在某个地方隐藏了某些严重的错误,我们可以更快、更容易地修复它们。这保证了您将获得长期维护并进行更多实验,以添加更多功能

基于队列的

您是否意识到,如果您从零开始会有什么发生?所有的物联网设备都会向您广播他们的信号,您将最终陷入满是线程相关问题的境地。当然,我们相信您独自一人可以构建一些很棒的东西。但是,我们为您承担了所有混乱的工作。为什么您要从头开始做呢?
来自设备的信号将被收集,任务将被排队等待您执行。您只需告诉 SDK 您的工作已完成,然后 SDK 将为您提供下一个任务

提高电池寿命

所有动作都会消耗能量。作为我们这样的移动应用程序开发人员,我们称之为电池。我们都知道它是宝贵的。
当我们第一次开始这个项目时,电池耗尽并没有在我们的脑海中。但是,想想看,有成千上万的信号和数据处理吗?我们确实需要为实际应用管理它。
我们简化了流程,并尽力不使用任何不必要的资源。SDK 将在可能时随时暂停,而不是全天扫描。

灵活的规则、内容以及配置

无论您设计的应用程序是否良好,您无需重新部署即可更改内容或触发点。更重要的是,您可以通过基于Web的管理器停止监视某些物联网信号或更改 SDK 的收集行为。

易于调试

我们提供多级调试信息,包括控制台、文件和屏幕。 通过调试信息,您可以查看通常无法看到的内容。 我们知道,当像您的信号一样难以看见时,确定问题会更困难。现在,您可以看到您的信号并修正源代码或传感器设置。

一切都可以是信标

目前,我们覆盖了3种不同的信号。当然,这只是开始。实验还在继续。

iBeacon

iBeacon是苹果发明的具有低功耗蓝牙(即蓝牙4.0)广播协议。该协议包括标识符及其近距。换句话说,您可以告知人们何时接近特定地点,如您的产品进行宣传。这对市场营销来说是一个激动人心的新闻,但其潜力更大。

地理围栏

那么我们应该考虑为什么iBeacon成为了上下文投递的关键?因为即使现在,我们也无法确切知道您在哪里。尤其是,当您在建筑物内时。但是,当您不在建筑物内时,我们即使您忘记打开蓝牙,也可以以合理的高度精度跟踪您。
您可以在地理区域内设置虚拟边界。当人们穿过边界时,他们将获得预定义的任务。

WiFi

如果您知道附近的WiFi AP,您可以确定他们的位置。在iOS中,您只能通过私有框架扫描WiFi,这意味着苹果不会允许您将应用程序提交到App Store。但是,您可以查看他们何时实际上连接到WiFi。它没有那么神奇,但它仍然提供了相同的环境。

还有更多...

是的,更多的将到来...

限制

  1. 在几乎所有情况下,您都需要打开您的 位置服务
  2. 该应用程序需要您的项目中的 后台模式位置
  3. iBeacons需要打开蓝牙才能工作。
  4. 启用WiFi可以提高地理围栏的精度。
  5. WiFi连接检测无法唤醒您的应用程序。但间接地,它可以在延迟后唤醒您的应用程序。
  6. 如果用户终止了您的应用程序,SDK仍然可以唤醒您的应用程序,但只有在用户打开您的应用程序后,或者用户进入或重新进入另一个边界后。
  7. 没有Apple M7芯片(或更高版本),电池节电可能会降低。
  8. 在没有运动活动权限的情况下,电池节电可能会降低。

要求

有两种要求需要考虑。一个是您的开发环境,另一个是用户的运行环境。

开发环境

  • Xcode 9或更高版本

运行环境

  • 链接(无问题构建和运行,可能不符合预期)
    • 任何设备。
    • iOS 8或更高版本。

安装

Drag & Drop
只需拖放即可,几乎完成。

如果您的部署版本是8.0,则可以使用动态框架。(拖放 /Dynamic/iCignalSDK.framework 文件)
当您将应用程序提交到App Store时,因为苹果的一个错误,您需要做额外的一步。
在您的应用程序目标的 构建阶段 中创建一个新的 运行脚本阶段。并添加以下代码。

bash "${BUILT_PRODUCTS_DIR}/${FRAMEWORKS_FOLDER_PATH}/iCignalSDK.framework/strip-archs.sh"

链接框架和库

Linking

模块已启用

如果您将项目设置为在 构建设置 中启用 Enable Modules (C 和 Objective-C),则可以使用如 @import UIKit; 的框架。

异常

当然,您也可以像 @import iCignalSDK; 一样使用iCiganlSDK。但是,您需要手动添加两个框架。JavaScriptCore 和/或 sqlite3

必需

我们还没有找到更干净的方法在框架中使用 sqlite3(您知道依赖和事情等)。这很麻烦,但您需要添加 libsqlite3.tbd
别忘了链接应该是 可选的

禁用模块?

您需要手动添加以下框架。

iCignalSDK.framework
Foundation.framework
UIKit.framework
CoreBluetooth.framework
CoreLocation.framework
CoreMotion.framework
MapKit.framework
JavaScriptCore.framework
Security.framework
SystemConfiguration.framework
MobileCoreServices.framework
libsqlite3.dylib
MessageUI.framework
Twitter.framework
QuartzCore.framework
Accelerate.framework

或者,只需使用 Cocoapods。

如果您不知道如何使用 Cocoapods,请访问此处

动态框架(iOS 8及以上)

很简单。

pod 'iCignalSDK'

在您的 Podfile 中添加

pod install

。然后,在您的代码中,您可以使用 #import <iCignalSDK/iCignalSDK.h>@import iCignalSDK; 来导入。

Plist配置

您的应用程序的大多数配置都在 Info.plist 中。SDK 也有一些配置。

后台模式

Background Modes
为了使此 SDK 在后台正确执行,您需要将您的应用程序的 Info.plist 文件中的 UIBackgroundModes 键分配。

<key>UIBackgroundModes</key>
<array>
  <string>fetch</string>
  <string>location</string>
  <string>remote-notification</string>
</array>

其他选项是可选的,但location对于后台执行至关重要。
如果未分配 UIBackgroundModes 键,您的应用程序在后台的执行时间不能超过 180 秒。

自定义架构

Custom scheme
要处理来自 URL 的请求,您需要在应用程序的 Info.plist 文件中指定您的自定义架构。
可以使用 API 密钥来创建架构,例如 icignal-yourAPIkey

<key>CFBundleURLTypes</key>
<array>
  <dict>
    <key>CFBundleTypeRole</key>
    <string>Editor</string>
    <key>CFBundleURLSchemes</key>
    <array>
      <string>icignal-53e18abc0cf29fcb62a82312</string>
    </array>
  </dict>
</array>

iCignal 配置

Plist file
有许多选项和配置可能需要,所有这些都包含在 plist 文件中,因此不需要编码。
所有键都在 ICCommon.h 头文件中定义。

说明
iCignal API 密钥 字符串 iCIGNAL 获得的密钥。如果它错误或为空,则 SDK 不会工作。
iCignal 调试级别 整数 调试级别。(0:关闭,1:错误,2:警告,3:信息,4:调试,5:详尽)在部署之前必须将此设置为 0
iCignal 控制台调试 布尔值 如果 YES,调试日志将显示在 Xcode 控制台中。
iCignal 文件调试 布尔值 如果 YES,调试日志将作为在您的应用程序的 Documents 目录中的文件创建。
iCignal 屏幕调试 布尔值 如果 YES,调试日志可以通过 [iCignalManager showOrHideLogWindow] 方法显示在您的应用程序屏幕上。
iCignal 允许电池使用日志 字符串 如果 YES,将收集电池使用情况。
iCignal 网络URL - 基础URL 字符串 服务器的URL。在部署之前,请检查是否已正确设置此设置
所有其他路径... 字符串 您可以根据需要设置这些路径以进行调试目的或其他用途。
<key>iCignal Configuration</key>
<dict>
  <key>iCignal API Key</key>
  <string>53e18abc0cf29fcb62a82312</string>
  <key>iCignal Debug Level</key>
  <integer>5</integer>
  <key>iCignal Debug on Console</key>
  <true/>
  <key>iCignal Debug on File</key>
  <true/>
  <key>iCignal Debug on Screen</key>
  <true/>
  <key>iCignal Log Enable Battery</key>
  <true/>
  <key>iCignal Network URL - Base URL</key>
  <string>http://devcloud.icignal.com</string>
  <key>iCignal Network URL - Get Beacon Workflow rules</key>
  <string>beacon/mbl/getWFRule.do</string>
  <key>iCignal Network URL - Get Direct Message</key>
  <string>beacon/mbl/getDirectMsg.do</string>
  <key>iCignal Network URL - Get Location Workflow rules</key>
  <string>beacon/mbl/getWFLocationRule.do</string>
  <key>iCignal Network URL - Get Preferences</key>
  <string>beacon/mbl/getPreferences.do</string>
  <key>iCignal Network URL - Get Task Info</key>
  <string>beacon/mbl/getTask.do</string>
  <key>iCignal Network URL - Get WiFi Workflow rules</key>
  <string>beacon/mbl/getWFWifiRule.do</string>
  <key>iCignal Network URL - Update Workflow rule</key>
  <string>beacon/mbl/getUpdateWFRule.do</string>
  <key>iCignal Network URL - Upload Logs</key>
  <string>beacon/mbl/traceLog.do</string>
</dict>

NSLocationUsageDescription (可选)

描述应用程序访问用户位置信息的原因。
当系统提示用户允许访问时,该字符串将作为警报面板的一部分显示。
在 iOS 8 及其以后版本中被忽略。

<key>NSLocationUsageDescription</key>
<string> *DESCRIPTION* </string>

NSLocationAlwaysUsageDescription / NSLocationWhenInUseUsageDescription (iOS 8)

从 iOS 8 开始,使用位置服务的所有应用程序都需要说明它们如何/为什么使用用户的位置信息。这是强制性的,不是可选的
您可以设置两者,也可以选择其中一个。用户可以从您设置的选项中进行选择。这意味着您未设置的选项不会显示。

<key>NSLocationAlwaysUsageDescription</key>
<string> *DESCRIPTION* </string>
<key>NSLocationWhenInUseUsageDescription</key>
<string> *DESCRIPTION* </string>

参考:文档 / 视频(WWDC 2014-706) / 视频(WWDC 2014-715)

NSLocationAlwaysAndWhenInUseUsageDescription (iOS 11)

从 iOS 11 开始,使用位置服务的所有应用程序都必须说明它们如何/为什么使用用户的位置信息。这是强制性的,不是可选的

<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string> *DESCRIPTION* </string>

应用程序传输安全(iOS 9)

从iOS 9开始,苹果阻止了HTTP连接。但是,我们可能需要连接,并且NSAppTransportSecurity将描述您应用的例外情况。
NSAllowsArbitraryLoads设置为false将禁用ATS。这只在您无法决定将要获取哪个URL时才使用。

<key>NSAppTransportSecurity</key>
<dict>
  <key>NSExceptionDomains</key>
  <dict>
    <key>icignal.com</key>
    <dict>
      <key>NSIncludesSubdomains</key>
      <true/>
      <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
      <true/>
      <key>NSTemporaryExceptionRequiresForwardSecrecy</key>
      <false/>
      <key>NSTemporaryExceptionMinimumTLSVersion</key>
      <string>TLSv1.2</string>
    </dict>
  </dict>
</dict>

参考:文档 / 视频(WWDC 2015-711)

NSMotionUsageDescription (iOS 10)

从iOS 10开始,对访问私人数据的限制更加严格,您需要描述为什么需要它。这是强制性的,不是可选项
该属性描述了为什么我们需要运动活动数据。我们需要它来避免当用户未移动时电池耗尽。
如果没有设置,则我们只会使用加速度计。

<key>NSMotionUsageDescription</key>
<string> *DESCRIPTION* </string>

参考:文档 / 视频(WWDC 2016-709)

Swift支持

Swift supporting
在大多数情况下,您不需要任何东西。只需import iCignalSDK,然后它就会正常工作。
但如果它不起作用,您可以尝试使用Bridging Header。最简单的方式是在您的项目中添加一个空白的Objective-C文件。Xcode将询问您是否要配置桥接头。
是的!并在yourProjectName-Bridging-Header.h中添加#import。然后您就可以开始了。

用法

在这里,您可以看到如何使用此SDK。

实现

大多数情况下,您只需要实现少数几个方法。

生命周期方法

应用有生命周期,它们如何启动、暂停或后台运行,以及它们如何终止。您需要让SDK知道何时以及如何做。
SDK可以检测大部分事件,但有一些事件SDK不能。
您只需知道一个类。iCignalManager

+ handlingLaunchingWithOptions

  • 该方法处理SDK的启动。
  • 该方法应在您的应用中的AppDelegateapplication:didFinishLaunchingWithOptions:方法内部调用。
  • launchingOption应由AppDelegate提供,这样才能正确唤醒SDK。
  • 返回值是布尔类型,用于确定SDK是否可以启用。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.

    if ([iCignalManager handlingLaunchingWithOptions:launchOptions]) {
        [iCignalManager requestNotificationAuthorizationWithDelegate:self];
        [iCignalManager requestLocationAuthorization];
        [iCignalManager requestMotionActivityAuthorization];

        [iCignalManager setDeviceUUID];
        [iCignalManager setDelegate:self];
        [iCignalManager start];
    }
    else {
        NSLog(@"iCignal SDK is not available");
    }

    // Do your stuffs here...

    return YES;
}

+ handlingRemoteNotification:fetchCompletionHandler

  • 该方法处理远程通知。
  • 该方法应在您的应用中的AppDelegateapplication:didReceiveRemoteNotification:fetchCompletionHandler:方法内部调用。
  • 您应将userInfocompletionHandler传递给SDK。
  • 返回值是布尔类型,用于确定SDK是否可以处理推送通知。
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
{
    if (![iCignalManager handlingRemoteNotification:userInfo fetchCompletionHandler:completionHandler]) {
        NSLog(@"remote notification received but not for iCignal.");
        // Do your own work here....and call completionHandler with result of your work.

        completionHandler(UIBackgroundFetchResultNoData);
    }
}

+ handlingOpenURL:sourceApplication:annotation

  • 该方法处理打开URL。
  • 该方法应在您的应用中的AppDelegateapplication:openURL:sourceApplication:annotation:方法内部调用。
  • 只需将所有参数传递给SDK。
  • 返回值是布尔类型,用于确定SDK是否可以处理提供的URL。
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
    return [iCignalManager handlingOpenURL:url sourceApplication:sourceApplication annotation:annotation];
}

+ handlingOpenURL:options: (iOS 9或更高版本)

  • 该方法是对已弃用的+ handlingOpenURL:sourceApplication:annotation:方法的替代。
  • + handlingOpenURL:sourceApplication:annotation:方法相同。
- (BOOL)application:(UIApplication *)application openURL:(nonnull NSURL *)url options:(nonnull NSDictionary<NSString *,id> *)options
{
    return [iCignalManager handlingOpenURL:url options:options];
}

+ handlingPerformFetchWithCompletionHandler

  • 该方法处理从服务器获取后台数据。
  • 该方法应在您的应用中的AppDelegateapplication:performFetchWithCompletionHandler:方法内部调用。
  • 可选实现,可以获取规则并提高WiFi检测。
- (void)application:(UIApplication *)application performFetchWithCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
{
    [iCignalManager handlingPerformFetchWithCompletionHandler:^(UIBackgroundFetchResult resultFromICignal) {
        // Do your things. and get a result...
        UIBackgroundFetchResult yourResult = UIBackgroundFetchResultNoData;

        completionHandler(MIN(resultFromICignal, yourResult));
    }];
}

+ setDelegate

  • 您可以从此代理获取事件。
  • 建议位置是在application:didFinishLaunchingWithOptions:方法中。

+ requestLocationAuthorization

  • 此方法将请求使用位置服务的权限。
  • 此方法仅在前次启动时显示警告。
  • 在iOS 8或以上设备上,此方法将询问“始终”(Always)或“使用时”(When in Use)权限,具体取决于您的plist文件中的描述。

+ requestNotificationAuthorizationWithDelegate: + requestNotificationAuthorization

  • 此方法将请求使用推送通知的权限。
  • 此方法仅在前次启动时显示警告。
  • 在iOS 10或以上设备上,此方法将注册(UNAuthorizationOptionBadge | UNAuthorizationOptionSound | UNAuthorizationOptionAlert)类型。此外,此方法需要一个参数delegate,它将传递UNUserNotificationCenterDelegate事件。
  • 在iOS 8或以上设备上,此方法将注册(UIUserNotificationTypeBadge | UIUserNotificationTypeAlert | UIUserNotificationTypeSound)类型。

+ requestMotionActivityAuthorization

  • 此方法可能会请求使用运动活动的权限。
  • 此方法仅在前次启动时显示警告。
  • 如果设备中没有可用的事件数据,则它不会做任何事情。
  • 如果没有使用此方法,则SDK将仅从设备中获取原始数据。(可能会降低电池续航)

+ start

  • 在某些情况下,SDK应启动。
  • 建议位置是在application:didFinishLaunchingWithOptions:方法中。

+ finish

  • 在某些情况下,SDK需要停止。
  • 建议的位置是在applicationWillTerminate:方法中。
- (void)applicationWillTerminate:(UIApplication *)application {
    // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.

    [iCignalManager finish];
}

+ kill

  • 您可能希望SDK完全停止工作。
  • 此方法将停止SDK并使其永远无法再次工作。
  • 只有在实际调用了+ setEnabled:或其他能力切换方法之后,SDK才能再次工作。

全局任务访问器

+ currentTask

  • 此方法返回当前暂停的ICTask对象。
  • 您甚至可以将对象附加到它以供以后使用。(有关详细信息,请参阅-[ICTask setObject:])。

配置方法

配置方法都在iCignalManager类中,作为类方法。

能力切换方法

您可以选择设置Boolean值以配置您想要开启的功能。
有三种设置方式,您可以在服务器上设置默认功能。以下方法中有提示。
只有当服务器和应用程序的配置都开启时,功能才会启用。

+ setEnabled

  • 此方法将启用/禁用所有功能。

+ setBeaconEnabled

  • 此方法将开启/关闭iBeacon功能。

+ setLocationEnabled

  • 此方法将开启/关闭地理围栏功能。

+ setWifiEnabled

  • 此方法将开启/关闭wifi检测功能。

网络配置方法

我们已经在服务器端提供了可更改的属性。**仅用于调试**。

+ setBaseUrl

  • 此方法将允许您设置服务器的基本URL。

+ setNetworkTimeout

  • 此方法将允许您设置网络等待从服务器获取响应的时间长度。(时间单位:秒)

+ setNetworkRetry

  • 此方法将允许您设置SDK为同一请求重试的次数。

+ setNetworkRetryInterval

  • 此方法将允许您设置在每次重试之间等待的时间长度。(时间单位:秒)

用户指定方法

当您知道哪些用户接近哪些位置时,此方法更强大。
您可以通过没有任何配置简单地知道一些人的接近。
但当你简单地为SDK提供一个特定用户的ID时,您可以为内容个性化或进行分析。

- 设备UUID

您需要指定与用户一起的设备,因为您的应用程序可能允许多用户登录。
有时,您可能需要针对设备而不是用户。

+ setDeviceUUID

  • SDK将生成UUID(版本4)字符串并将其作为标识符保留。
  • 参数应该是指定设备的NSString
  • 此方法仅影响当先前设备UUID与新生成的UUID不同时。

+ setDeviceUUID

  • 您可以设置您在应用程序中正在使用的自己的UUID。
  • 设置nil将从设备中删除UUID。

+ removeDeviceUUID

  • 此方法将从应用中撤销设备UUID。
- 成员ID

这全部关乎识别一个感兴趣的人。您甚至可以通过传递nil来让SDK知道登录状态。

+ 设置成员ID

  • 参数应该是可以指定用户的NSString对象。
  • 没有自动生成的方法,因为只有您才知道这些信息。
  • 我们建议您在您的应用的登录和登出方法中均实现此方法。
  • 如果您设置nil,SDK将其识别为登出。
- 推送通知令牌

如果您正在使用远程通知或您想从iCignal使用更多功能,您需要将令牌传递给SDK。
这样做,您只需向特定区域的用户发送通知,或者给他们安排工作流程。

+ 设置推送令牌

  • 参数应该是从您应用的代理中获得的NSData类型。
  • 推荐的位置是application:didRegisterForRemoteNotificationsWithDeviceToken:方法。
  • 要取消订阅,可以传递nil
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{
    [iCignalManager setPushToken:deviceToken];
}

代理方法

所有来自SDK的事件将通过iCignalManagerDelegate协议传递。
这些方法都是可选的

任务代理

这些方法是您应用工作流程的核心。传递的对象是ICTask,您可以使用它来确定如何处理。
方法的制作质量和灵活性由此决定。

- workflowDidReceiveTask

  • 当收到新任务时,将调用此方法。
  • 大部分工作都在此方法中完成。
  • 在您处理完任务并准备好执行下一个任务后,您必须调用completeHandler()函数
  • 如果您不调用completeHandler()函数,则下一个任务不会执行。
  • 详见ICTask类以获取更多详细信息。

- workflowDidCancelTask

  • 当SDK由于某些原因取消任务时,将调用此方法。
  • 在大多数情况下,您将从任务中关闭当前显示的UI。

- workflowDidTimeoutTask

  • 当SDK由于超时而取消任务时,将调用此方法。
  • SDK期望执行下一个任务或完成工作流程。

WebView代理

当您使用来自iCignal服务器的模板时,您应该处理WebView

- webViewShouldOpenURL:withParameters

  • 将会传递URL及其参数。
  • 您需要为URL打开自己的WebView,或者如果您希望,可以使用包含的WebView

- webViewShouldCloseWithParameters

  • 将会传递参数。(参数可能包含目标WebView的ID或没有)
  • 您需要关闭WebView。

数据代理

为了性能提升,建议不要使用这些方法。只有在需要调试时才使用它们

- beaconDataWillBeCollected

  • 每当收集到信标数据时,将调用此方法。
  • 传递的对象是NSDictionary类。
  • 键是信标的标识符。
  • 值是描述信号变化的NSArray中包含的NSDictionary
  • 字典中的键在未来可能会更改。

- locationDataWillBeCollected

  • 每当收集到位置数据时,将调用此方法。
  • 传递的对象是包含NSDictionaryNSArray类。
  • 每个字典都包含位置数据。
  • 字典中的键在未来可能会更改。

- wifiDataWillBeCollected

  • 每当收集到Wi-Fi数据时,将调用此方法。
  • 传递的对象是NSDictionary类。
  • 字典包含Wi-Fi设施数据。
  • 字典中的信号当前仅为-1-999。其中-1表示已连接和-999表示已断开。
  • 字典中的键在未来可能会更改。

状态代理

您可以使用这些方法了解SDK内部的运行情况。
信息越多越好,当你知道如何利用这些信息时。

- authorizationStatusDidChange

  • 每当位置服务授权状态改变时,将会发送状态。
  • 参见 ICLocationAuthorizationStatus 以获取更多详细信息。

- bluetoothDidUpdateStateOn

  • 当蓝牙开启或关闭时,状态将会发送。

- motionActivityDidChange

  • 当运动活动改变时,活动类型将会发送。
  • 参见 ICMotionActivityType 以获取更多详细信息。

- motionActivityRemaining:asActivityType

  • 如果设备在特定时间段内保持相同的活动类型,该方法将被调用。
  • 剩余时间以秒为单位。也请参见 ICMotionActivityType 了解活动类型。

- beaconDidStartUpdating

  • 每当 SDK 开始更新 iBeacon 时,该方法将被调用。

- beaconDidStopUpdating

  • 每当 SDK 停止更新 iBeacon 时,该方法将被调用。

- beaconRangingRegionCountDidChange

  • 每当更新 iBeacon 区域计数改变时,该方法将被调用。
  • 更新中的 iBeacon 区域的计数将会发送。

- beaconDidStartAdvertisingWithError

  • 当 SDK 开始广告 iBeacon 信号时,该方法将被调用。如果存在 NSError,则没有正确启动。

- locationDidSuspendUpdating

  • 当 SDK 暂停位置更新时,该方法将被调用。

- locationDidResumeUpdating

  • 当 SDK 重新开始位置更新时,该方法将被调用。

- locationDidStartUpdating

  • 当 SDK 开始位置更新时,该方法将被调用。

- locationDidStopUpdating

  • 当 SDK 停止位置更新时,该方法将被调用。

- locationStayingDurationDidChange

  • 如果设备在特定时间段内保持在同一区域,该方法将被调用。
  • 剩余时间以秒为单位。

- locationManualUpdatingDidFinish:withError

  • 如果你开始手动位置更新,该方法将被调用。
  • 即使方法因为错误而失败,如果存在缓存的地理位置,则你可以在 NSErroruserInfo 对象中找到这个信息。

- wifiDidStartUpdating

  • 当 SDK 开始更新 wifi 时,该方法将被调用。

- wifiDidStopUpdating

  • 当 SDK 停止更新 wifi 时,该方法将被调用。

- wifiDidConnectToSSID:andBSSID

  • 当设备连接到无线 AP 时,将发送其 SSID 和 BSSID。

- wifiDidDisconnectFromSSID:andBSSID

  • 当设备从无线 AP 断开连接时,将发送其 SSID 和 BSSID。

错误委托

大多数错误都会被推送。即使是网络、位置或其他。
参见 ICError 以获取更多详细信息。

- managerDidFailWithError

  • NSError 对象将被发送。
  • 一些 NSError 不是致命的。
    例如,kICErrorNoWorkflowkICErrorConcurrentCall 可能会发出,但这只是信息而不是错误。

Settings.bundle 配置

你可能希望通过 Settings.bundle 改变一些配置。
有一些 预定义标识符,你可以在 Settings.bundle 中添加。
这些值将覆盖你在代码中设置的任何其他值。
所有标识符将在 SDK 启动时同步。
(在你改变任何值的同时 SDK 正在运行,该值将在下一次启动时应用)
当需要时可以将来添加标识符。
当应用被删除时,所有值将被删除。
如果你想了解更多关于 Settings.bundle 的信息,请访问这里

ICProperties_APIKey

  • 这个标识符用于在您的 plist 中设置 API Key
  • 该标识符的值是 String 类型。

ICProperties_BaseURL

  • 这个标识符用于在您的 plist 中设置 Base URL
  • 该标识符的值是 String 类型。

ICProperties_MemberID

  • 此标识用于在您的应用程序中设置 成员ID
  • 该标识符的值是 String 类型。

ICProperties_UserBeaconFlag

  • 此标识用于在SDK中设置 [iCignalManager setBeaconEnabled:] 方法。
  • 此标识的值是 布尔 类型。

ICProperties_UserGeofenceFlag

  • 此标识用于在SDK中设置 [iCignalManager setLocationEnabled:] 方法。
  • 此标识的值是 布尔 类型。

ICProperties_UserWifiFlag

  • 此标识用于在SDK中设置 [iCignalManager setWifiEnabled:] 方法。
  • 此标识的值是 布尔 类型。

从1.x迁移到2.x

改进

  • SDK的整体结构已更改。 (更模块化,带有控制。可扩展性)
  • 添加了位置(地理围栏)和WiFi功能。
  • 为您提供更多调试信息。
  • 无需检查操作系统版本即可使用基本功能。
  • 提高电池续航。
  • 提高性能(降低CPU使用率)。
  • 改进信标信号和位置的过滤器。
  • 通过后台任务提高稳定性。
  • 统一和真实世界的示例应用程序。

要求:iOS SDK 8+,Xcode 6+

  • Xcode 5+ -> 6+
  • iOS SDK 7.x+ -> 8.x+

框架链接

  • <InfavorBeacon/InfavorBeacon.h> -> <iCignalSDK/iCignalSDK.h>
  • <Twitter/Twitter.h><MessageUI/MessageUI.h> 已添加。用于 ICWebViewController

配置文件更改

  • 所有前缀从 Infavor Beacon 更改为 iCignal
  • Infavor Beacon Debug 已删除。使用 iCignal Debug Level。您可以将 0 设置为 关闭
  • Infavor Beacon Network URL - 优惠券详情页面URL 已删除。
  • iCignal Network URL - 获取WiFi工作流程规则 已添加。
  • Infavor Beacon Network URL - 获取工作流程规则 -> iCignal Network URL - 获取信标工作流程规则
  • UIBackgroundModes 数组中,添加了 fetch

类名更改

  • 大多数类的名称前缀从 QI 更改为 IC
  • 所有块均已删除。请使用代表模式或通知。
  • QIBeaconManager(或 BeaconManager) -> iCignalManager
  • QITask -> ICTask

方法名称更改

类方法

  • +[QIBeaconManager getVersion] -> +[iCignalManager sdkVersion]
  • +[QIBeaconManager setPushDeviceToken:] -> +[iCignalManager setPushToken:]
  • +[QIBeaconManager setMemberId:] -> +[iCignalManager setMemberID:]
  • +[QIBeaconManager setBeaconDetectModeDynamic:] -> +[iCignalManager setPausesBeaconAutomatically:]
  • +[QIBeaconManager handlingRemoteNotification:fetchCompletionHandler:] -> +[iCignalManager handlingRemoteNotification:fetchCompletionHandler:]
    • 您需要在块中明确处理任务的方式。

实例方法

  • -[QITask type] -> [ICTask taskType]
  • -[QITask parsedUrl] -> [ICTask taskURL]
  • -[QITask content] -> [ICTask taskContent]
  • -[QITask resumeTaskWithResponse:] -> -[ICTask completeHandler()]
  • 等等

常量和枚举类型已更改

  • ICTaskReadyNotification -> iCignalManagerWorkflowDidReceiveTaskNotification
  • ICTaskTimeoutNotification -> iCignalManagerWorkflowDidReceiveTaskNotification
  • ICTaskCancelNotification -> iCignalManagerWorkflowDidReceiveTaskNotification
  • QIAuthorizationStatus -> ICLocationAuthorizationStatus
  • QIBluetoothState -> +[iCignalManager isBluetoothPoweredOn]
  • 等等

用户界面组件

  • 所有类都已更改并替换。

问题

已知问题

  • 当调试视图中打印的内容太多时,可能会冻结。
  • 在AppStore审核时,发生 Metadata Rejected。在此之前,请在 Note 中放置信息。
    解决方案:当原因是 0.4.0 BEFORE YOU SUBMIT: INFO NEEDED 时,您需要提供所需的信息。

所需信息

我们开始审核您的应用程序,但不能继续,因为我们需要 >关于您的应用程序的更多信息。在您方便的时候,请 >审视以下问题,并提供尽可能详细的信息。

  • 此应用程序是否检测 startMonitoringForRegion:、startRangingBeaconsInRegion: 或两者之间的一个?
  • 当应用检测到信标存在时,用户体验是什么?
  • 该应用中哪些功能使用了后台位置功能?
  • 如果该应用使用了为iBeacons的第三方SDK,请提供它们的文档链接,以证明后台位置对其功能是必需的。

请在此消息的“解决方案中心”中回复所需信息。

The additional informations you may request are below.

- Does this app detect startMonitoringForRegion:, startRangingBeaconsInRegion:, or both?
  > We use both methods.

- What is the user experience when the app detects the presence of a beacon?
  > If the beacon is registered on the server with a specific workflow, app will execute the workflow (predefined types of tasks).

- What features in this app use background location?
  > When the user come around the geometric boundary, it will start updating location for more fine accuracy. And then, execute workflow as above.

- If this app uses 3rd party SDKs for iBeacons, please provide links to their documentation showing that background location is required for it to function.
  > Not only iBeacon, but also Location features are included in SDK. http://www.quintet.co.kr/product/icignal or http://cocoadocs.org/docsets/iCignalSDK
  • 您可能需要在应用的描述中放置此通知。
"Continued use of GPS running in the background can dramatically decrease battery life."

汇报

如果存在问题,请在此进行汇报。

示例应用

下载iCIGNAL示例应用
或者,pod try iCignalSDK