Skip to content

zhidian2017/WekerIMSDK_iOS

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

使用之前请先运行 ‘pod install’ 命令,然后打开WekerIMSDK.xcworkspace,使用demo

主要功能

  • 网络开门
  • 音视频对讲

网络开门

开⻔流程如下:

  1. 请求服务器判断当前用户是否在授权时间内。
  2. 如果在授权时间之内,跳转到开⻔⻚面;如果超出授权时间,提示用户不在授权时间之内,不会跳到开⻔⻚面。
  3. 在开锁⻚面给⻔口机发送开锁透传消息,并等待⻔口机返回开⻔是否成功的消息。
  4. 根据⻔口机返回的消息提示用户是否开⻔成功。

音视频对讲

对讲基本流程如下:

  1. 应用程序收到⻔口机发出的呼叫请求透传消息(这里只是接收到透传消息,并不是真正的音视频呼叫),弹出音视频对讲⻚面。
  2. 音视频对讲⻚面分为四部分:
    1. 重新拍照,通知⻔口机重新抓拍一个最新的照片并返回。
    2. 挂断,给⻔口机发送挂断透传消息。
    3. 开⻔,跳转到开⻔⻚面,后续流程和网络开⻔一致。
    4. 接听 ,第一次点击接听,给⻔口机发送我要接听的透传消息,⻔口机收到消息后会发出真正的音视频呼叫,此时默认是音频通话;再次点击接听,会跳转到视频通话,跳转之前如果发现处于非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;

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published