文章标题:《蓝牙接入iOS SDK集成指南》 文档更新:2015-05-14 API接口文档:文档下载


第一步:将 SDK 导入到你的工程中

  • 登录机智云官方网站下载并解压最新版本的SDK。如果您还尚未下载,请 点击这里下载

  • 将解压后的 GizDataAccess.framework 拖动并复制到项目的 Frameworks 目录即可

第二步:引入头文件和注册 SDK 的 AppID

  • 登录机智云官方网站查看产品信息获得 AppID 。如果尚未注册,请点击这里注册
  • 初始化 SDK

打开 *AppDelegate.m(*代表你的工程名字) 导入文件头

#import <GizDataAccess/GizDataAccess.h>

在 - (BOOL)application:didFinishLaunchingWithOptions:方法中调用 startWithAppID 方法来初始化 SDK,指定APPID.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    //Init SDK
    [GizDataAccess startWithAppID:@“APP_ID”];

    // ……

    return YES;
}

第三步:用户登录

  • 注册用户登录的委托

代码示例

    GizDataAccessLogin* gdaLogin = [[GizDataAccessLogin alloc] initWithDelegate:YOUR_LOGIN_DELEGATE];
  • 实现用户登录的委托方法

代码示例

- (void)gizDataAccessDidLogin:(GizDataAccessLogin *)login uid:(NSString *)uid token:(NSString *)token result:(GizDataAccessErrorCode)result message:(NSString *)message {
    if(result == kGizDataAccessErrorNone) {
        // 登录成功
        // ……
    }
}
  • 匿名登录

    匿名登录时,不需要传入任何用户信息,SDK会生成默认的用户名。登录结果通过用户登录的委托返回。

代码示例:

    [gdaLogin loginAnonymous];
  • 实名登录

    需要传入注册时的用户账号和密码,用户账号可以是用户名、手机号或邮箱,以及密码。登录结果通过用户登录的委托返回。

代码示例:

    [gdaLogin login:@“YOUR_USERNAME” password:@“YOUR_PASSWORD”];
  • 第三方账号登录

    支持百度、腾讯、新浪账号登录。需要传入登录需要用到的uid和token,以及账号类型。登录结果通过用户登录的委托返回。

代码示例:

    [gdaLogin loginWithThirdAccountType:THIRD_ACCOUNT_TYPE uid:@“UID” token:@“TOKEN”];

第四步:数据接入

  • 注册数据接入的委托

代码示例

    GizDataAccessSource* gdaSource = [[GizDataAccessSource alloc] initWithDelegate:YOUR_DATAACCESS_DELEGATE];

数据上传

  • 实现数据上传的委托方法

代码示例:

- (void)gizDataAccessDidSaveData:(GizDataAccessSource *)source result:(GizDataAccessErrorCode)result message:(NSString *)message {
    if(result == kGizDataAccessErrorNone) {
        // 数据上传成功
        // ……
    }
}
  • 数据上传

    支持批量数据上传。最后一个参数data为数组类型,可以指定每一组数据的产生时间和内容,格式为标准的JSON。上传结果,通过数据上传的委托返回。

data示例: @{@"ts": [timestamp], @"attrs": @{ [dynamic_keys]: [dynamic_values], ... } }

代码示例:

    [gdaSource saveData:@“YOUR_LOGIN_TOKEN” productKey:@“YOUR_BLE_PRODUCT_KEY” deviceSN:@“YOUR_BLE_DEVICE_SN” data:@“YOUR_DATA”];

获取数据

  • 实现获取数据的委托方法

    获取到的数据内容,按以下键值对方式提供:

    @"attrs" : { [dynamic_keys] : [dynamic_values], ... },

    @"uid" : [uid],

    @"sn" : [sn],

    @"ts" : [ts],

    @"product_key" : [product_key]

代码示例:

- (void)gizDataAccessDidLoadData:(GizDataAccessSource *)source data:(NSArray *)data result:(GizDataAccessErrorCode)result errorMessage:(NSString *)message {
    if(result == kGizDataAccessErrorNone) {
        // 获取数据成功
        for(NSDictionary *dict in data) {
            NSString* sn = [dict valueForKey:@"device_sn"];
            NSString* productkey = [dict valueForKey:@"product_key"];
            NSString* uid = [dict valueForKey:@"uid"];
            NSNumber *nTS = [dict valueForKey:@"ts"];
            NSDictionary* attributes = [dict valueForKey:@"attrs"];

            NSLog(@"sn:%@ productkey:%@ uid:%@ nTS:%@ attributes:%@", sn, productkey, uid, nTS, attributes);
        }
    }
}
  • 获取数据

    获取数据时,需指定起止时间段。如果limit值为0将只返回20条数据,若skip值为负数,则获取失败。数据获取结果,通过获取数据的委托返回。获取到的数据,按照时间排序,最新的数据排在最前面。

代码示例:

    [gdaSource loadData:@“YOUR_LOGIN_TOKEN” productKey:@“YOUR_BLE_PRODUCT_KEY” deviceSN:@“YOUR_BLE_DEVICE_SN” startTime:START_DATA_TIME endTime:END_DATA_TIME limit:20 skip:0];

第四步:用户账号注册、信息修改和匿名转换

用户注册

  • 注册用户账号注册的委托

代码示例:

    GizDataAccessLogin* gdaRegister = [[[GizDataAccessLogin alloc] initWithDelegate:YOUR_USERREGISTER_DELEGATE];
  • 实现用户账号注册的委托方法

代码示例

- (void)gizDataAccess:(GizDataAccessLogin *)login didRegisterUser:(NSString *)uid token:(NSString *)token result:(GizDataAccessErrorCode)result message:(NSString *)message {
    if(result == kGizDataAccessErrorNone) {
        // 用户注册成功
        // ……
    }
}
  • 用户账号注册

    通过accountType参数指定账号注册方式:用户名注册、手机号注册、邮箱注册。只有手机号注册时,需要传入验证码,验证码可以通过获取手机验证码的接口获取。其他注册方式,验证码传nil。注册结果通过用户账号注册的委托返回。

代码示例:

    [gdaRegister registerUser:@“YOUR_USERNAME” password:@“YOUR_PASSWORD” code:@“YOUR_PHONE_VERIFYCODE” accountType:YOUR_THIRD_ACCOUNT_TYPE];

修改密码

  • 注册密码修改的委托

代码示例:

    GizDataAccessLogin* gdaResetPassword = [[[GizDataAccessLogin alloc] initWithDelegate:YOUR_PASSWORD_RESET_DELEGATE];
  • 实现密码修改的委托方法

代码示例:

- (void)gizDataAccess:(GizDataAccessLogin *)login didChangeUserPassword:(GizDataAccessErrorCode)result message:(NSString *)message {
    if(result == kGizDataAccessErrorNone) {
        // 密码重置成功
        // ……
    }
}
  • 重置密码

    可以通过手机号和邮箱重置密码。accountType指定是手机号重置还是邮箱重置,只有手机号重置时,需要传入验证码,验证码可以通过获取手机验证码的接口获取。邮箱重置时,手机验证码传nil。重置结果通过密码修改的委托返回。

代码示例:

    [gdaResetPassword resetPassword:@“YOUR_USERNAME” code:@“YOUR_PHONE_VERIFYCODE” newPassword:@“YOUR_NEW_PASSWORD” accountType:YOUR_THIRD_ACCOUNT_TYPE];
  • 修改密码

    用户实名登录后可以修改密码,修改结果通过密码修改的委托返回。

代码示例:

    [gdaLogin changeUserPassword:@“YOUR_LOGIN_TOKEN” oldPassword:@“YOUR_OLD_PASSWORD” newPassword:@“YOUR_NEW_PASSWORD”];

修改用户信息

  • 注册修改用户信息的委托

代码示例:

    GizDataAccessLogin* gdaChangeUserInfo = [[[GizDataAccessLogin alloc] initWithDelegate:YOUR_CHANGE_USER_INFO_DELEGATE];
  • 实现修改用户信息的委托方法

代码示例:

- (void)gizDataAccess:(GizDataAccessLogin *)login changeUserPassword:(GizDataAccessErrorCode)result message:(NSString *)message {
    if(result == kGizDataAccessErrorNone) {
        // 密码重置成功
        // ……
    }
}
  • 修改用户信息

    用户实名登录后可以修改手机号或邮箱,accountType指定是要修改手机号还是邮箱。只有修改手机号时,需要传入验证码,验证码可以通过获取手机验证码的接口获取。修改邮箱时,验证码传nil。修改结果通过用户信息修改的委托返回。

代码示例:

    [gdaLogin changeUserInfo:@“YOUR_TOKEN” username:@“YOUR_USERNAME” code:@“YOUR_PHONE_VERIFYCODE” accountType:THIRD_ACCOUNT_TYPE];

匿名转换

  • 注册匿名转换的委托

代码示例:

    GizDataAccessLogin* gdaLogin = [[[GizDataAccessLogin alloc] initWithDelegate:YOUR_ANONYMOUS_TRANS_DELEGATE];
  • 实现匿名转换的委托方法

代码示例:

- (void)gizDataAccess:(GizDataAccessLogin *)login didTransAnonymousUser:(GizDataAccessErrorCode)result message:(NSString *)message {
    if(result == kGizDataAccessErrorNone) {
        // 匿名转换成功
        // ……
    }
}
  • 匿名转换

    匿名登录后,可以转换成普通用户、手机号用户或邮箱用户,您可以通过accountType参数指定要转换的用户类型。转成手机号用户时,需要传入验证码,验证码可以通过获取手机验证码的接口获取。其他用户类型,验证码传nil。转换结果通过匿名转换的委托返回。

代码示例:

    [gdaLogin transAnonymousUser:@“YOUR_TOKEN” username:@“YOUR_USERNAME” password:@“YOUR_NEW_PASSWORD” code:@“YOUR_PHONE_VERIFYCODE” accountType:THIRD_ACCOUNT_TYPE];

获取手机验证码

  • 注册手机验证码的委托

    GizDataAccessLogin* gdaVerifyCode = [[[GizDataAccessLogin alloc] initWithDelegate:YOUR_VERIFYCODE_DELEGATE];
    
  • 实现手机验证码的委托方法

代码示例:

- (void)gizDataAccess:(GizDataAccessLogin *)login didRequestSendVerifyCode:(GizDataAccessErrorCode)result message:(NSString *)message {
    if(result == kGizDataAccessErrorNone) {
        // 获取到了手机验证码
        // ……
    }
}
  • 获取手机验证码

    在用户注册、信息修改、匿名用户转换等过程中,手机验证码可以通过此方法获取。验证码通过手机验证码的委托返回。

代码示例:

    [gdaLogin requestSendVerifyCode: @“PHONE_VERIFYCODE”];

用户账号类型

codemessage
0 normal user
1 phone user
2 email user

第三方账号类型

codemessage
0 sina account
1 baidu account
2 qq account

错误码

codemessage
0success
8001 connection_failed
8002 connection_timeout
8003 invalid parameters
9002 product_key invalid
9003 appid invalid
9004 token invalid
9005 user not exists
9006 token expired
9008 server error
9009 code expired
9010 code invalid
9015 form invalid
9018 phone unavailable
9019 username unavailable
9020 username or password error
9999 reserved