使用之前请先运行 ‘pod install’ 命令,然后打开WekerIMSDK.xcworkspace,使用demo
- 网络开门
- 音视频对讲
开⻔流程如下:
- 请求服务器判断当前用户是否在授权时间内。
- 如果在授权时间之内,跳转到开⻔⻚面;如果超出授权时间,提示用户不在授权时间之内,不会跳到开⻔⻚面。
- 在开锁⻚面给⻔口机发送开锁透传消息,并等待⻔口机返回开⻔是否成功的消息。
- 根据⻔口机返回的消息提示用户是否开⻔成功。
对讲基本流程如下:
- 应用程序收到⻔口机发出的呼叫请求透传消息(这里只是接收到透传消息,并不是真正的音视频呼叫),弹出音视频对讲⻚面。
- 音视频对讲⻚面分为四部分:
- 重新拍照,通知⻔口机重新抓拍一个最新的照片并返回。
- 挂断,给⻔口机发送挂断透传消息。
- 开⻔,跳转到开⻔⻚面,后续流程和网络开⻔一致。
- 接听 ,第一次点击接听,给⻔口机发送我要接听的透传消息,⻔口机收到消息后会发出真正的音视频呼叫,此时默认是音频通话;再次点击接听,会跳转到视频通话,跳转之前如果发现处于非WiFi状态下会提示用户当前处于非WiFi状态,视频通话会消耗大量流量,是否继续,如果继续,跳转到视频通话,不继续则保持音频通话。
-
在Podfile文件中添加
pod 'WekerIMSDK'
,并运行pod install
,该步骤可能比较费时,请耐心等待,完成之后,即可在项目中使用Weker云对讲SDK -
在项目Target的Capabilities选项卡中,打开“Push Notifications”开关,以集成推送功能(如果已打开,请忽略此操作)
-
在项目Target的Capabilities选项卡中,打开“Background Modes”开关,勾选其中的“Audio,Airplay,and Picture in Picture”、“Voice over IP”、“Background fetch”、“Remote notifications”选项,完成正常的对讲服务配置(如果已勾选,请忽略此操作)
-
在项目Target的Info选项卡中,需添加“Privacy - Microphone Usage Description”属性,因为对讲用到了麦克风,并添加一句描述,否则会报错(如果已添加,请忽略此操作)
-
在项目Target的Build Settings选项卡中, 找到Other Linker Flags,添加“-ObjC”选项,(如果已添加,则忽略此操作)
-
该SDK仅支持真机调试
-
注意:在向AppStore提交审核之前,需要先移除
Hyphenate
SDK中包含的i386 x86_64两个平台,才能正常提交审核在路径下执行以下命令来删除i386 x86_64两个平台
lipo Hyphenate.framework/Hyphenate -thin armv7 -output Hyphenate_armv7 lipo Hyphenate.framework/Hyphenate -thin arm64 -output Hyphenate_arm64 lipo -create Hyphenate_armv7 Hyphenate_arm64 -output Hyphenate mv Hyphenate Hyphenate.framework/
-
编译工程,如果编译通过,恭喜你,集成 SDK 成功,可以进行下一步了,若报错,请联系我们进行协助
-
https://github.com/zhidian2017/WekerIMSDK_iOS
该网址是SDK的Demo地址,可以作为参考 -
把
AppDelegate.m
文件中引入SDK头文件<WekerIM/WekerIM.h>
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // 创建SDK单例[WClient sharedManager];(必须实现) // 为了保证消息的及时性,需要提供推送证书和与之对应的证书名称,包括开发证书与发布证书,如下例子中的推送开发证书:CloudDev、推送发布证书:CloudDis。 // 如果暂时不想配置推送功能,也可以不传这两个证书名称参数,但是该方法必须被调用才能实现后续功能。 [[WClient sharedManager] initializeSDKWithDevApnsCertName:@"CloudDev" disApnsCertName:@"CloudDis"]; // 注册本地推送之后,可以对推送消息做更好的自定义。并且即使不集成推送功能,在App未被杀掉进程时,也可收到推送。 [self registerNotification:application]; return YES; } /** 注册推送 */ -(void)registerNotification:(UIApplication *)application { //iOS8.0之后注册离线推送 [application registerForRemoteNotifications]; UIUserNotificationType notificationTypes = UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert; UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:notificationTypes categories:nil]; [application registerUserNotificationSettings:settings]; //注册本地推送 if ([[UIDevice currentDevice].systemVersion doubleValue] >= 8.0) { UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound categories:nil]; [application registerUserNotificationSettings:settings]; } } /** 远程通知注册成功委托 */ - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { // 向Apple Push Service 注册DeviceToken,如果不需要离线推送功能,则忽略此操作。 [[WClient sharedManager] bindDeviceToken:deviceToken]; }
-
APP进入后台
- (void)applicationDidEnterBackground:(UIApplication *)application {
[[WClient sharedManager] applicationDidEnterBackground:application];
}
- APP将要从后台返回
- (void)applicationWillEnterForeground:(UIApplication *)application {
[[WClient sharedManager] applicationWillEnterForeground:application];
}
- 在用户登录之后,登录到云对讲平台,调用
- (void)loginWithUserName:(NSString *)username password:(NSString *)password completion:(void (^)(NSString *aUsername, BOOL aError))completion
,如下:
// 登录成功之后,调用
[[WClient sharedManager] loginWithUserName:@"你的用户名" password:@"你的密码" completion:^(NSString *aUsername, BOOL aError) {
if (!aError) {
NSLog(@"登录到云对讲后台成功");
} else {
NSLog(@"登录到云对讲后台失败");
}
}];
-
用户正常退出,调用
- (BOOL)logout
方法,会退出云对讲后台,不再接收音视频消息。 -
用户由于多设备登录被挤掉,需要在合适的地方遵守协议
WClientDelegate
,并调用- (void)userAccountDidLoginFromOtherDevice
方法做出适当的处理。 -
用户登录到云对讲平台之后,即可收到来自门口机的呼叫,在这个版本的SDK中,来电呼叫功能被完整封装在SDK中,开发者无须额外工作。在来电页面上,用户可以选择接听、挂断、重拍照片与直接开门功能,在接听之后,用户也可以自行在音视频对讲功能中切换。
-
主动开门功能,在
WClient.h
文件中,- (void)openDoorWithEntrance:(Entrance *)entrance completed:(void (^)(BOOL isSucceed))completed
,在此方法中,开发者需传入Entrance
属性,参数如下:@interface Estate : NSObject @property (nonatomic, copy) NSString *communityName; @property (nonatomic, assign) int communityId; @end
该属性可在
WClient.h
查看,通过获取用户所在小区门口机列表的方法获取。在回调block中,开发者可以根据开门是否成功做出不同的处理。
-
获取用户所在小区分区信息列表
- (void)communityPartitionListWithCompleted:(void (^)(id result))completed
,得到的数据可用Estate
属性解析,如下,当然,你也可以取出想要的数据并个性化展示:
[[WClient sharedManager] communityPartitionListWithCompleted:^(id result) {
estates = [Estate mj_objectArrayWithKeyValuesArray:result];
}];
- 根据小区Id
communityId
获取用户所在小区下门口机列表- (void)entranceListWithCommunityId:(NSUInteger)communityId completed:(void (^)(id result))completed
,得到的数据可用Entrance
属性解析,如下,当然,你也可以取出想要的数据并个性化展示:
[[WClient sharedManager] entranceListWithCommunityId:communityId completed:^(id result) {
entrances = [Entrance mj_objectArrayWithKeyValuesArray:result];
}];
-
根据分区Id
partitionId
获取用户所在分区下门口机列表- (void)entranceListWithPartitionId:(NSUInteger)partitionId completed:(void (^)(id result))completed
,得到的数据可用Entrance
属性解析,如下,当然,你也可以取出想要的数据并个性化展示:[[WClient sharedManager] entranceListWithPartitionId:partitionId completed:^(id result) { entrances = [Entrance mj_objectArrayWithKeyValuesArray:result]; }];
-
获取某台门口机访客密码,未生效无法获取
- (void)getEntrancePasswordWithEntrance:(Entrance *)entrance completed:(void (^)(NSString *password))completed
,得到生效的密码或者未生效的提示字符串:[[WClient sharedManager] getEntrancePasswordWithEntrance:entrance completed:^(NSString *password) { self.passwordLabel.text = password; }];
-
门口机通知设置
// 通过设置该属性options,其下包括一键免打扰、开关静音、开关振动功能
[WClient sharedManager].options
/**
是否开启一键免打扰 默认NO
*/
@property (nonatomic,assign)BOOL isAvoidDisturb;
/**
是否开启静音模式 默认NO
*/
@property (nonatomic,assign)BOOL isMute;
/**
是否开启来电振动 默认NO
*/
@property (nonatomic,assign)BOOL isVibration;