iOS-SDK接入流程


  • 本流程默认开发者已经按《ZGMClientSDK文档-iOS》第三步将SDK集成完毕。
  • 更新日期:2018.07.12

一、初始化

1.初始化鉴权

  • 使用ZGMClientManager registerServiceByAppSecret: appId: callback:函数进行SDK注册
//SDK鉴权注册
[ZGMClientManager.shareInstance registerServiceByAppSecret:"申请的AppSecret" appId:"申请的AppID" callback:^(BOOL flag, NSString *errorMsg) {
    
     if( flag ){
         NSLog(@"注册成功,调起登录");
     }else{
         NSLog( @"注册失败 %@",errorMsg);
     }
}];
1
2
3
4
5
6
7
8
9
  • SDK的所有接口都依赖该注册,请在注册成功后走正常逻辑

2.登录

  • 登录前需要经过初始化鉴权
  • 登录使用ZGAccountApi loginWithPhone:callback方法,参数为用户手机号码

注意

登录成功后需要启动SDK服务,使用ZGMClientManager startService方法

登录成功后需要,使用ZGDataApi freshDataWithCallback:刷新最新数据

[ZGAccountApi loginWithPhone:"手机号码" callback:^(BOOL isSuccess, ZGResponseObject *response){

     if (isSuccess == YES){
         [ZGMClientManager.shareInstance startService]; //启动SDK服务
         //ZGDataApi freshDataWithCallback 调用freshData接口获取最新数据
         return ;
      }

      //错误处理
}];
1
2
3
4
5
6
7
8
9
10
  • 用户完成登录后,其部分的基础信息会由SDK负责维护和自行调用
  • 也可以使用ZGMClientManager isLogined 来判断用户是否处于登录状态

3.登出

  • 登出使用ZGAccountApi loginOut:方法
  • 登出成功后需要停止SDK服务,使用ZGMClientManager stopService方法。
[ZGAccountApi loginOut:^(BOOL isSuccess, ZGResponseObject *response) {
	    
	 if (isSuccess == YES){
		[ZGMClientManager.shareInstance stopService]; //停止SDK服务
		//做其他事情
		return;
	 }
	 //错误处理
}];
1
2
3
4
5
6
7
8
9

4.刷新数据

  • 此接口需要在用户登录成功后调用,SDK依赖它做一些数据维护
  • 如果修改了(用户默认房间/常用钥匙/人脸)等信息后,按自己的需求可以调用此接口刷新最新的数据
[ZGDataApi freshDataWithCallback:^(BOOL isSuccess, ZGResponseObject *response){
	    
    if (isSuccess){
        //将数据map为Model,可以使用Demo中的ZGFreshDataResult对象,也可以自定义对象
       //ZGFreshDataResult *freshResult = [ZGFreshDataResult mj_objectWithKeyValues:response.data];
			  
    }
}];
1
2
3
4
5
6
7
8
@interface ZGFreshDataResult : NSObject
@property (nonatomic,strong) NSArray *normal; //默认钥匙
@property (nonatomic,strong) NSArray *all;    //常用钥匙
@property (nonatomic,assign) BOOL set_face;   //是否完成了人脸注册
@end
1
2
3
4
5

二、主要Api

1.申请钥匙

注意

申请钥匙也就是申请一个房间,当用户申请成功后,会获得这个房间对应的几把钥匙,这几把钥匙可能包含了用户自己的门,小区大门,小区后门等等

申请钥匙后需要等待PC端后台进行审核,当审核通过后ZGMClientManagerDelegate managerNeedFresh:会响应,这个时候需要手动调用刷新接口去刷新数据

  • 申请钥匙使用ZGOtherApi commitHouseApplyWithRoomId...接口,具体使用方式请参见Demo
  • 申请的钥匙是有使用期限,过期后可以再申请一次进行续期

2.开门

  • 扫码开门: ZGMClientManager processingScanResults: needNetworkvalidation: result:方法
  • 按键开门: 按下按钮后调用 ZGAccessControlApi openDoorWithGuid: callback:方法,当开门成功后SDK会发送ZGOpenDoorSuccessNotification通知
  • 视频通话开门: 门禁机拨打手机号码后,ZGMClientManagerDelegate managerHangUp:会响应
  • 密码开门: 通过ZGMClientManager openDoorPassword方法获取开门密码,然后在门禁机上输入密码进行开门
  • 访客密码开门: 用户可以分享一个具有有效期的密码给其他人使用,调用ZGDataApi getTempPass方法
  • 人脸识别开门: 注册人脸识别后,可以在门禁机上进行刷脸开门
  • 电话开门: 服务电话拨打过来后,可以按 # 号键进行开门

3.钥匙获取

注意

除了刷新数据接口,以下接口也可以获取到全部钥匙和常用钥匙

  • 获取全部钥匙 : ZGKeyApi getAllKeyWithCallback:
  • 获取常用钥匙 : ZGKeyApi getUsergateNormalWithCallback :
  • 删除钥匙 : ZGKeyApi deleteGateKeyWithRoomId: callBack:
  • 设置常用钥匙 : ZGKeyApi updateKeyWithOld: newId: callBack:

4.获取城市小区楼栋房号列表

注意

以下接口可以得到门禁机所支持的地区

获取小区楼栋房号接口,需要传入依赖的id号,该id号均来自上一级接口,如(获取小区需要传入城市id,该id自"获取城市"接口返回代表城市的region_id)

  • 获取城市 : ZGDataApi cityListWithCallback:
  • 获取小区 : ZGDataApi communityListWithCity: callback:
  • 获取楼栋 : ZGDataApi buildingListWithProject: callback:
  • 获取房号 : ZGDataApi roomListWithBuilding: callback:

5.数据查询

  • SDK提供了一系列Api可以查询用户房间相关信息
  • 其中部分Api(如访客密码,开门记录,修改呼叫转接,免费短信分享等)需要先设置默认房间,设置默认房间调用ZGSettingApi setDefaultRoom: callBack:方法

注意

如果没有设置默认房间调用这些接口时会返回code = -1 的错误码

  • 以默认房间为参照物的Api(如访客密码,开门记录,修改呼叫转接,免费短信分享等)也提供了可查询其他房间(非默认房间)的版本,方法名和默认房间的一样,只多了一个uid的参数,传入房间的uid即可
  • 具体Api请参照Api文件

三、SDK服务

注意

启动服务[ZGMClientManager.shareInstance startService]

停止服务[ZGMClientManager.shareInstance stopService]

该代理具体使用方式请参加Demo

  • 服务启动后会通过ZGMClientManagerDelegate进行回调
@protocol ZGMClientManagerDelegate <NSObject>

/**
 需要重新登录,如token失效,账号被挤掉

 @param manager 客户端管理
 */
-(void)managerNeedLoginAgain:(ZGMClientManager *)manager;


/**
 有视频电话被唤起
 推送和接口的电话都是从这个代理响应
 @param videoManager 视频会话管理
 */
-(void)managerCallUp:(ZGVideoTelephoneManager *)videoManager;


/**
 有视频会话挂断

 @param videoManager 视频会话管理
 */
-(void)managerHangUp:(ZGVideoTelephoneManager *)videoManager;


/**
 需要刷新用户数据
 用户申请钥匙后,会有一个漫长的等待过程,如何审核通过在次代理响应
 @param manager 客户端管理
 */
-(void)managerNeedFresh:(ZGMClientManager *)manager;

@end
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
  • ZGMClientManagerDelegate,该代理方法由ZGMClientManager对象发出,它会在整个APP工作周期持续响应,建议将代理的实现放在单例对象,AppDelegate,Tabbar或单利对象进行维护

四、人脸识别

注意

人脸识别为SDK1.1版本新增模块

需要集成ZGFaceDetection.Framework

1.注册人脸

  • 开发者自行实现拍摄,SDK只需要UIImage即可
  • 获取到拍摄图片后,需要进行人脸数量检测
  • 使用ZGFaceDetection detectionFaceNumber方法

注意

超过2M图片会是UIImageOrientationRight的属性,建议先调用ZGFaceDetection的fixOrientation去修正

  • 检测后的人脸数量为1时,可以调用ZGOtherApi faceRegister: callback:方法进行注册,参数为被检测的UIImage

2.人脸信息获取

  • 是否注册人脸: ZGDataApi freshDataWithCallback: 刷新接口返回的"set_face"字段表示该账户是否已经注册了人脸
  • 获取人脸详细信息: ZGOtherApi getFaceInfo:
  • 删除人脸信息 : ZGOtherApi deleteFace: callback:

五、常用数据

1.通知

  • ZGOpenDoorSuccessNotification 开门成功事件会是以通知的形式发出,该通知所携带的参数为“guid ”,它标识着设备的ID号用于匹配当前开门设备的一致性,具体使用方法请参加Demo
  • ZGGoToLoginNotification 需要重新登录,原因是由于Token失效或者账号被挤掉