聊天

Betalk聊天模块可以让你获得丰富的信息服务,一对一,群组,或基于主题的对话。

首先确保你已经在BeTalk中注册了你的应用, 下载BeTalk iOS SDK安装包,并解压zip文件,你将看到文件夹:BeTalkConversationSDK.sdk

1. 安装设置

1.1 SDK添加到项目文件

解压下载的文件并添加Betalk SDK到Xcode项目拖动BetalkSDK文件夹(default location is ~/Documents/BetalkSDK) 到你的项目导航。

betalkisosdk1

1.2 添加依赖库和框架

Betalk SDK还需要将以下库和框架添加到项目中,并与应用程序目标关联。

  • libc++.dylib
  • libstdc++.6.dylib
  • libxml2.2.dylib
  • libz.dylib
  • Accelerate.framework
  • AddressBook.framework
  • AddressBookUI.framework
  • AssetsLibrary.framework
  • AudioToolbox.framework
  • AVFoundation.framework
  • CFNetwork.framework
  • CoreBluetooth.framework
  • CoreFoundation.framework
  • CoreGraphics.framework
  • CoreImage.framework
  • CoreLocation.framework
  • CoreMedia.framework
  • CoreTelephony.framework
  • CoreText.framework
  • CoreVideo.framework
  • EventKit.framework
  • Foundation.framework
  • ImageIO.framework
  • MapKit.framework
  • MediaPlayer.framework
  • MessageUI.framework
  • MobileCoreServices.framework
  • OpenGLES.framework
  • QuartzCore.framework
  • Security.framework
  • StoreKit.framework
  • SystemConfiguration.framework
  • UIKit.framework

1.3 相关依赖库与框架

betalkiosskd2

1.4 设置后台模式

选择“Audio and AirPlay”下的“Background Modes”选项,当用户最下化应用程序时,会议在后台模式中运行。

betalkiossdk3

可以验证info.plist确认后台模式被设定为”Audio and AirPlay”。

1.5 构建 & 验证

构建应用程序,并验证确保无误,如果没有错误,就可以开始集成了。

1.6 BeTalk初始化SDK

访问Betalk API导入头文件“Betalk.h”

#import "Betalk.h"

初始化BeTalk SDK(在此之前,需要通过设置您的客户端ID和客户端秘钥,然后调用一些方法)。

+ (id<BTClient>)clientWithApplicationClientID:(NSString*)clientID
  applicationClientSecret:(NSString*)clientSecret
  serverType:(BTServerType)serverType;

示例代码:

// 填写APP客户端ID和客户端密钥(从应用程序接收)
NSString *APP_CLIENT_ID = @"Your client id";
NSString *APP_CLIENT_SECRET = @"Your client secret";

// 建立Betalk SDK
// 指向您的应用程序到生产环境时,将服务器类型设置生产服务器
[Betalk clientWithApplicationClientID:APP_CLIENT_ID applicationClientSecret:APP_CLIENT_SECRET serverType: sandboxServer ];

2. 认证

2.1 初始化用户

用户需要在作出任何调用操作前,初始化Betalk。根据认证类型,选择不同的初始化类型。

- (void)intializeUserAccount:(BTUserIdentity*)userIdentity
                       orgID:(NSString*)orgID
                   firstName:(NSString*)firstName
                    lastName:(NSString*)lastName
                      avatar:(UIImage*)avatar
 devicePushNotificationToken:(NSData*)deviceToken
                     success:(void(^)())success
                     failure:(void(^)(NSError *error))failure;

参数:

名称 描述
userIdentity 唯一的用户标识符
orgid 可选:在Betalk org ID(仅适用于使用单独的机构,为每个客户创造用户的合作伙伴)
firstName 可选:用户的名字
lastName 可选:用户的姓
avatar 可选:用户的个人资料图片
deviceToken 可选通知:令牌
success 回调接口通知成功执行API后调用应用程序
failure 回调接口通知调用应用程序错误失败详细信息

示例代码(使用唯一的用户身份认证):

// Initialize user using unique user identity
BTUserIdentity *useridentity = [[BTUserIdentity alloc] init];
useridentity.userIdentityType = kUserIdentityTypeIdentityUniqueID;
useridentity.userIdentity = @"user unique identity";

[[Betalk sharedClient]
initializeUserAccount: useridentity
    orgID: nil
firstName: @"John"
 lastName: @"Doe"
   avatar: nil
devicePushNotificationToken: nil
  success: ^{
    NSLog(@"Setup user account successfully");
} failure: ^(NSError *error) {
    NSLog(@"Setup user account failed, %@", [NSString stringWithFormat:@"error code [%d] description: [%@] info [%@]", [error code], [error localizedDescription], [[error userInfo] description]]);
}];

2.2 更新用户配置文件

API调用更新用户配置文件

- (void)updateUserProfile:(NSString*)firstName
lastName:(NSString*)lastName
avatar:(UIImage*)avatar
success:(void(^)())success
failure:(void(^)(NSError *error))failure;

参数:

名称 描述
firstName 用户的名字
lastName 用户的姓
avatar 用户资料图片
success 回调接口通知成功执行API后调用应用程序
failure 回调接口通知调用应用程序错误失败详细信息

示例代码:

//Update user profile
[[Betalk sharedClient] updateUserProfile:@"John"
            lastName:@"Doe"
              avatar:nil
             success:^{
                NSLog(@"User profile updated successfully");
           } failure:^(NSError *error) {
                NSLog(@"Update user profile failed, %@", [NSString stringWithFormat:@"error code [%d] description: [%@] info [%@]", [error code], [error localizedDescription], [[error userInfo] description]]);
}];

- (void)unlinkAccount:(void(^)(BOOL success))completion;

2.3 断开用户账号

API调用断开连接

- (void)unlinkAccount:(void(^)(BOOL success))completion;

3. 创建聊天

创建一个新的聊天/讨论组将Betalk的通信和协作扩展到你的应用程序中。

- (void)createChat:(NSString*)topic
     inviteMembersUniqueID:(NSArray *)uniqueIDArray
                   success:(void(^)(NSString *binderID,UIViewController*chatViewController))success
                   failure:(void(^)(NSError *error))failure;

参数:

名称 描述
topic 指定的聊天/讨论组的话题。如果设置为nil,题目会自动根据聊天/讨论组的成员创建。
success 回调接口通知调用应用程序的成功创建和启动聊天和binderID。
failure 回调接口通知调用应用程序的错误失败详细信息。

示例代码:

//Create Chat/Binder
[[Betalk sharedClient]
               createChat:@""  
    inviteMembersUniqueID:nil
                  success:^(NSString *binderID, UIViewController *chatViewController) {
                    NSLog(@"start chat success, id = %@", binderID);
                } failure:^(NSError *error) {
                    NSLog(@"start chat failed");
}];

4. 打开聊天

打开一个现有的聊天将Betalk的通信和协作扩展到你的应用程序。这个请求将返回一个现有的聊天视图控制器。

- (void)getChatViewController:(NSString*)binderID
                  success:(void(^)(UIViewController*chatViewController))success
                   failure:(void(^)(NSError*error))failure;

示例代码:

[[Betalk sharedClient] 
    getChatViewController:chatGroup.binderID 
    success:^(UIViewController *chatViewController) {
        //case 1: push the chat view controller to navigation controller
        if (chatViewController)
        {
            ...
        }
    } failure:^(NSError *error) {
        NSLog(@"start chat failed");
}];

5. 邀请成员

邀请成员加入单人聊天或讨论组

- (void)inviteChatMembers:(NSArray*)uniqueIDArray
                 binderID:(NSString *)binderID
                  success:(void(^)())success
                  failure:(void(^)(NSError *error))failure;

参数:

名称 描述
BinderID 聊天binderID
uniqueidarray 被邀请的聊天用户身份的数组
success 回调接口通知调用应用程序在成功邀请聊天
failure 回调接口通知调用应用程序错误详细信息

示例代码:

[[Betalk sharedClient] 
    inviteChatMembers:[NSArray arrayWithObjects:@"unique ID of user to be invited", nil]
    binderID: @"your binder ID"
    success:^ {
        //Invite Member Success        
    } failure:^(NSError *error) {
        NSLog(@"Invite members failed, %@", [NSString stringWithFormat:@"error code [%d] description: [%@] info [%@]", [error code], [error localizedDescription], [[error userInfo] description]]);
}];

6. 委托方式

该BTClientChatDelegate协议规定,BetalkSDK对象的委托可以实现的方法。该协议声明由您的应用程序实现以处理会话回调方法。

6.1  presentInviteChatMembersViewController

发送给委托时,用户需要邀请成员聊天。您将要处理在实现邀请会员流程。

- (void)presentInviteChatMembersViewController:(UIViewController*)presentingViewController binderID:(NSString*)binderID;

6.2 presentInviteMeetAttendeesViewController

用户需要邀请人到会议。需要处理邀请您的实现流程。

- (void)presentInviteMeetAttendeesViewController:(UIViewController*)presentingViewController meetID:(NSString *)meetID;

6.3  presentChatMemberProfileViewController

- (void)presentChatMemberProfileViewController:(UIViewController*)presentingViewController uniqueID:(NSString *)uniqueID;

6.4 presentAddFilesViewController

点击在聊天中添加文件选项(“+”“图标)的委托。如果您需要为用户提供一组不同的加载文件选项在实现此方法。

- (void)presentAddFilesViewController:(UIViewController*)presentingViewController;

6.5 presentMoreFilesViewController

用户点击下聊天添加文件选项“…”选项。如果您需要提供更多的选择,实现此方法。

- (void)presentMoreFilesViewController:(UIViewController*)presentingViewController;

6.6 popChatViewController

在聊天视图控制器用户点击后退按钮如果将isDeleted=NO/YES保留或删除。如果不实现此方法,chatViewController将忽略用户按下后退按钮。

- (void)popChatViewController:(UIViewController*)chatViewController isDeleted:(BOOL)isDeleted;

6.7 onChatSessionUpdated

更新聊天会话

- (void)onChatSessionUpdated:(BTChatSession*)chatSession;

6.8 onChatSessionCreated

创建新聊天会话

- (void)onChatSessionCreated:(BTChatSession*)chatSession;

6.9 onChatSessionDeleted

删除聊天会话

- (void)onChatSessionDeleted:(BTChatSession*)chatSession;

6.10 onChatRemoteNotification

有更新事件或聊天通知

- (void)onChatRemoteNotification:(NSString *)binderID;

6.11  shareLink

当用户点击共享菜单或按钮。 实现此方法来提供自定义的选项。

- (void)shareLink:(NSString)shareLink downloadLink:(NSString)downloadLink;

6.12 supportMeetTelephony

当用户加入语音会议。实现此方法支持拨入(默认值是YES),用户将能够加入音频与VoIP和拨入。

- (BOOL)supportMeetTelephony;

7. 推送通知

配置推送通知,首先需要从苹果iOS导出生产证书许可证。在BeTalk应用程序配置中,上传证书和私钥文件。如果您的证书密码保护,确保在上传证书时提供相同的密码。

7.1 更新设备令牌

名称 描述
deviceToken 设备的令牌用于推送通知。

使用此方法更新在Betalk云设备Token。

- (void)updateRemoteNotificationsWithDeviceToken:(NSData*)deviceToken;

示例代码:

//Update device token
- (void)application:(UIApplication*)application
        didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken
        {
            [[Betalk sharedClient] updateRemoteNotificationsWithDeviceToken:deviceToken];
        }

7.2  接受和处理推送通知

处理来自苹果推送通知服务收到推送通知。

- (BOOL) receiveRemoteNotificationWithUserInfo:(NSDictionary*)userInfo;

示例代码:

//Receive Push Notification
- (void)application:(UIApplication *)app didReceiveRemoteNotification:(NSDictionary *) userInfo {
    [[Betalk sharedClient] receiveRemoteNotificationWithUserInfo:userInfo];
}
- (BOOL)receiveRemoteNotificationWithUserInfo:(NSDictionary*)userInfo 
fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))completionHandler;
//Receive Push Notification
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo 
    fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))completionHandler {
[[Betalk sharedClient] 
receiveRemoteNotificationWithUserInfo:userInfo fetchCompletionHandler:completionHandler];
}

你可以在UIApplicationDelegate这个类中,调用这个API,来设置app角标(- (void) applicationDidEnterBackground:(UIApplication *)application),我们将在这个api中设置app角标数量(第三方伙伴角标数量+BeTalk的角标数量)

- (void)setBadgeNumberDidEnterBackground:(NSInteger)thirdPartyBadgeNumber;

示例代码:

- (void)startMeet:(NSString*)topic
            withDelegate:(id<BTClientMeetDelegate>)delegate
    inviteAttendeesBlock:(void(^)(NSString*meetID))inviteAttendeesBlock
                 success:(void(^)(NSString *meetID))success
                 failure:(void(^)(NSError *error))failure;