# 未读消息数回调
当客服人员回复了用户的消息后,用户可以收到未读消息的提醒,即使当前并没有展示 AIHelp 的页面。
你可以通过每五分钟一次的轮询作业或者第三方推送实现这个功能。
# 主动拉取 v4.6.0
# API
# fetchUnreadMessageCount
调用此方法可以主动拉取当前用户的未读消息数量。
void unreadMessageNumCallBack(int msgCount) {
// write your code here
}
[AIHelpSupportSDK fetchUnreadMessageCount:unreadMessageNumCallBack];
你可以在任意时间调用该 API 查询当前用户的未读消息数量,但请注意:
- 该方法内部有 5 分钟的频率限制:
在限制期内的重复调用,会返回上一次的查询结果;在开发阶段,可以通过日志查看距离下一次有效调用的时间。
- 该方法会在以下情况返回 0,以通知调用者当前用户没有未读消息:
- 轮询功能开关未开启时;
- 用户没有进行中客诉时;
- 用户处于 AIHelp 页面内;
- 用户打开客服会话窗口时;
# 参数释义
# onUnreadMessageCountCallback
- 类型:
(void(*)(int unreadCount))
- 详情:必传参数。 未读消息数量的回调。
# 轮询方案
注意
此功能默认为关闭状态,如有需要,请联系 AIHelp 运营人员开启此功能。
# API
# startUnreadMessageCountPolling
调用此方法可以启动未读消息数量的轮询作业。
void unreadMessageNumCallBack(int msgCount) {
// write your code here
}
[AIHelpSupportSDK startUnreadMessageCountPolling:unreadMessageNumCallBack];
方法内部每 5 分钟主动拉取一次当前用户的未读消息数量。
我们会在以下情况返回 0,以通知调用者当前用户没有未读消息:
- 轮询功能开关未开启时;
- 用户没有进行中客诉时;
- 用户处于 AIHelp 页面内;
- 用户打开客服会话窗口时;
# 参数释义
# onUnreadMessageCountCallback
- 类型:
(void(*)(int unreadCount))
- 详情:必传参数。 未读消息数量的回调。
# 推送方案
下面以 APNs 平台为例,说明如何利用第三方推送平台实现应用内未读消息的回调。
1、注册 APNs:
#import <UserNotifications/UserNotifications.h>
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
if (@available(iOS 10.0, *)) {
[[UNUserNotificationCenter currentNotificationCenter] requestAuthorizationWithOptions:UNAuthorizationOptionBadge | UNAuthorizationOptionSound | UNAuthorizationOptionAlert completionHandler:^(BOOL granted, NSError * _Nullable error) {
if (granted) {
// The user has allowed push permissions
}
}];
} else {
UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound categories:nil];
[[UIApplication sharedApplication] registerUserNotificationSettings:settings];
}
}
2、在代码中调用推送相关的方法,将用户的推送标识以及推送平台告知 AIHelp:
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 13) {
if (![deviceToken isKindOfClass:[NSData class]]) {
return;
}
const unsigned *tokenBytes = (const unsigned *)[deviceToken bytes];
NSString *strToken = [NSString stringWithFormat:@"%08x%08x%08x%08x%08x%08x%08x%08x",
ntohl(tokenBytes[0]), ntohl(tokenBytes[1]), ntohl(tokenBytes[2]),
ntohl(tokenBytes[3]), ntohl(tokenBytes[4]), ntohl(tokenBytes[5]),
ntohl(tokenBytes[6]), ntohl(tokenBytes[7])];
token = strToken;
} else {
token = [NSString stringWithFormat:@"%@", deviceToken];
token = [token stringByReplacingOccurrencesOfString:@"<" withString:@""];
token = [token stringByReplacingOccurrencesOfString:@">" withString:@""];
token = [token stringByReplacingOccurrencesOfString:@" " withString:@""];
}
AIHelpUserConfigBuilder *userConfigBuider = [[AIHelpUserConfigBuilder alloc] init];
userConfigBuider.userId = @"userId";
[AIHelpSupportSDK updateUserInfo:userConfigBuider.build];
[AIHelpSupportSDK setPushToken:token pushPlatform:AIHelpTokenPlatformAPNS];
}
3、在回调中解析 AIHelp 的推送:
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
NSDictionary *data = userInfo[@"data"];
if (data && [data[@"elva"] isEqualToString:@"yes"]) {
// alert your users that he/she has received a new message
}
}
4、AIHelp 推送数据格式如下:
{
"to":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
"notification":{
"body":"This is your new message content",
"title":"customer service sends you a message.",
"sound":"Enabled",
"priority":"high",
"uid":"..."
},
"data":{
"body":"This is your new message content",
"title":"customer service sends you a message.",
"uid":"...",
"elva":"yes",
"entry_tag":"..."
}
}