处理推送通知(Webhook API)
处理推送通知(Webhook API)
你可以使用Webhook API的支持SDK来使用推送通知。
Zend亚博esk支持SDK可以设置为在代理发布对其请求的公开评论时通知最终用户。
开始之前
在开始之前,了解以下信息是有用的:
- 你可以使用Webhook API或Urban Airship来发送推送通知。
- 如果你已经有推送通知服务,我们建议你使用Webhook API选项。另一方面,如果你没有自己的推送通知服务,或者你不愿意开发一个,你应该使用Urban Airship。
- 您将只收到通过支持SDK创建的请求的通知。
- Zendesk Support中应用程序的配置必须包含所选选项的推亚博送通知详细信息。
- 如果您使用相同的JWT标识注册多个设备,这些设备都将添加到此标识的活动设备列表中,以便您可以向多个设备发送推送通知。
- 如果您从一个集成切换到另一个集成,或者更改标识,请重新注册设备。否则,推送通知将无法正常发送。
使用Webhook API进行推送通知
亚博Zendesk Support在需要发送通知时通知您设置的端点。之后,你的服务必须处理为终端用户的设备发送推送通知。
你必须设置推送通知服务,然后在应用端注册终端用户对接收推送通知的兴趣。
当Zend亚博esk Support向最终用户发送通知时,它会发送一个帖子
请求到应用程序配置中设置的URI。
对于一个完整的webhook集成,你需要做三件事:
帐户配置
在Zendes亚博k Support管理界面中,选择推送通知组合框中的“Webhook”选项定制“Mobile SDK”页签。
系统将提示您提供Webhook URI。
服务器集成
Webhook API
如上所述,Zendesk Support亚博向您的服务的URI发送HTTP POST请求。有效载荷是这样的:
POST & lt; your_push_notification_callback_uri>
内容类型:application / json
接受:application / json
{
“设备”:[
{
“标识符”:“oiuytrdsdfghjk”,
“类型”:“苹果”
},
{
“标识符”:“iuytfrdcvbnmkl”,
“类型”:“android”
}
],
"通知":{
"body": "Agent回答某事某事",
“标题”:“代理人回答”,
“ticket_id”:“5”
}
}
请求体是一个JSON对象,包含以下参数:
名字 | 类型 | 评论 |
---|---|---|
设备 | 数组 | 设备清单 |
通知 | 对象 | 通知的详细信息 |
设备
解析设备
数组来获取需要接收推送通知的设备。
名字 | 类型 | 评论 |
---|---|---|
标识符 | 字符串 | 通过支持SDK注册的设备标识符/令牌 |
类型 | 字符串 | 设备类型。取值范围:“ios”或“android” |
通知
使用通知
对象来传递消息的标题或正文,或者您也可以自定义它。如果你想让客户端应用处理深度链接,传递ticket_id
值。
名字 | 类型 | 评论 |
---|---|---|
标题 | 字符串 | 通知的短消息 |
身体 | 字符串 | 通知的长消息 |
ticket_id | 字符串 | 已更新票证的标识符。把这个传下去亚博zendesk_sdk_request_id 如果你想在应用程序中进行票证深度链接 |
请注意作为最佳实践,提供一个不可猜测的回调URL,并确保您可以轻松更改它。
设备删除
苹果推送通知服务(APNS)会让你知道用户是否注销了推送通知。你得让我们知道。
您可以使用推送通知设备批量注销API删除删除应用程序或不再注册的客户的设备。
应用程序集成
你需要在应用代码中处理以下四种场景:
您还必须启用后台取回和远程通知在背景模式在你的项目配置中设置你的应用程序的功能。
设备注册
首先,您需要请求用户的许可,按照iOS文档.
斯威夫特
if #available (iOS 8.0, *) {
let settings = UIUserNotificationSettings(types: [.]Alert, .badge, .sound],
类别:nil)
application.registerUserNotificationSettings(设置)
application.registerForRemoteNotifications ()
} else {
application.registerForRemoteNotifications(匹配:[。Alert, .badge, .sound])
}
objective - c
//在application中注册远程通知:didFinishLaunchingWithOptions:
如果([UIApplication instancesRespondToSelector:@ selector(registerForRemoteNotifications)]){
UIUserNotificationType类型=UIUserNotificationTypeAlert|UIUserNotificationTypeBadge|UIUserNotificationTypeSound;
UIUserNotificationSettings*设置=[UIUserNotificationSettings settingsForTypes:类型分类:零];
[应用registerUserNotificationSettings:设置];
[应用registerForRemoteNotifications];
}其他的如果([UIApplication instancesRespondToSelector:@ selector(registerForRemoteNotificationTypes:)]){
UIRemoteNotificationType类型=UIRemoteNotificationTypeAlert|UIRemoteNotificationTypeBadge|UIRemoteNotificationTypeSound;
[应用registerForRemoteNotificationTypes:类型];
}
这将导致对应用程序委托的调用didRegisterForRemoteNotificationsWithDeviceToken
方法。此方法返回的设备令牌是您将作为标识符参数传递给以下Support SDK方法的内容:
斯威夫特
NSLocale.preferredLanguages.first ? ?“en”
ZDKPushProvider 亚博(zendesk: Zendesk.instance)。register(deviceIdentifier: identifier, locale: locale) {(pushResponse, error) in
打印("无法注册设备:\(标识符)。错误:\(错误)”)
} else {
print("已成功注册的设备:\(标识符)")
}
}
objective - c
...
NSString*语言环境=[[NSLocale preferredLanguages]firstObject];
[[[ZDKPushProvider alloc]initWith亚博Zendesk:[ZDK亚博Zendesk实例]]registerWithDeviceIdentifier:标识语言环境:现场完成:^(NSString*_Nullable registrationResponse,NSError*_Nullable错误){
如果(错误){
NSLog(无法注册设备:%@。错误:%@ in %@",标识符,错误,自我.类);
}其他的如果(registrationResponse){
NSLog(成功注册的设备:%@ in %@,标识符,自我.类);
}
}];
...
请注意:某些字符应该从文本中删除deviceIdentifier
在Zendesk注册推送通知之前。亚博的空格和出现<
和>
应该被移除。
要注册Zendesk支持的推送通知,必须在支持SDK中设置有效的身份。亚博根据你的应用是如何配置的,你可能不会在AppDelegate
.我们建议您存储Apple返回的设备标识符,并在身份可用时(例如当用户登录您的应用程序时)向Zendesk Support注册推送通知。亚博
设备时
当用户退出或不再需要推送通知时,调用以下API从Zendesk Support中删除设备标识符:亚博
斯威夫特
ZDKPushProvider 亚博(zendesk: Zendesk.instance !) .unregisterForPush ()
objective - c
[[[ZDKPushProvider alloc]initWith亚博Zendesk:[ZDK亚博Zendesk实例]]unregisterForPush];
通知有效负载处理
设置委托方法来处理接收到的有效负载如iOS通知编程指南所述在苹果网站上。
当收到通知时,您可以使用Support-SDK的深度链接功能来处理它,也可以自己处理它。如果你选择自己处理,你可以的检索票证和获取它的注释使用API提供程序。
票深度链接
您可以使用支持SDK的深度链接功能来直接显示票证以响应通知点击。
呈现请求UI
斯威夫特
函数userNotificationCenter(_ center: UNUserNotificationCenter, didReceive: UNNotificationResponse, withCompletionHandler completionHandler:
@escaping () -> Void) {
let requesttid = response.notification.request.content.userInfo["tid"]
}
//在UIViewController内部
函数presentRequest(带有requesttid: String) {
let viewController = RequestUi。buildRequestUi (requestId requestId):
self.navigationController ?。pushViewController(viewController, animated: true)
}
objective - c
-(无效)userNotificationCenter:(UNUserNotificationCenter*)中心didReceiveNotificationResponse:(UNNotificationResponse*)响应withCompletionHandler:(无效(^)(无效))completionHandler{
NSString*requestID=[[[[响应的通知]请求]内容]用户信息[@“tid”]];
}
//在UIViewController内部
-(无效)presentRequest:(NSString*)requestID{
ui*requestController=[ZDKRequestUi buildRequestUiWithRequestId:requestID];
[自我.导航控制器pushViewController:requestController动画:是的];
}
刷新评论流
如果评论流是可见的,您可以刷新它。refreshRequest
返回一个布尔值,指示刷新是否成功,例如,用户当时打开了票据。如果返回false,则需要自己处理通知。
斯威夫特
函数userNotificationCenter(_ center: UNUserNotificationCenter, didReceive: UNNotificationResponse, withCompletionHandler completionHandler:
@escaping () -> Void) {
let requesttid = response.notification.request.content.userInfo["tid"]
如果Support.instance ?。refreshRequest(请求Id: requestID) {
返回
} else {
//处理通知
}
}
objective - c
-(无效)userNotificationCenter:(UNUserNotificationCenter*)中心didReceiveNotificationResponse:(UNNotificationResponse*)响应withCompletionHandler:(无效(^)(无效))completionHandler{
NSString*requestID=[[[[响应的通知]请求]内容]用户信息[@“tid”]];
如果([[ZDKSupport实例]refreshRequestWithRequestId:requestID]){
返回;
}其他的{
//处理push
}
}
如果你只使用API提供者自己构建UI;
斯威夫特
UNUserNotificationCenter: UNUserNotificationCenter
didReceive response: UNNotificationResponse,
withCompletionHandler completionHandler:
@escaping () -> Void) {
let requesttid = response.notification.request.content.userInfo["tid"]
如果Support.instance ?。refreshRequest(请求Id: requestID) {
返回
} else {
//处理通知
}
}
objective - c
-(无效)userNotificationCenter:(UNUserNotificationCenter*)中心
didReceiveNotificationResponse:(UNNotificationResponse*)响应
withCompletionHandler:(无效(^)(无效))completionHandler{
NSString*requestID=[[[[响应的通知]请求]内容]用户信息[@“tid”]];
如果([[ZDKSupport实例]refreshRequestWithRequestId:requestID]){
返回;
}其他的{
//处理push
}
}
确保你的服务正在发送亚博zendesk_sdk_request_id
参数指定应用程序额外的
发送给APNS的消息的部分。它应该看起来像这样:
{
aps={
…
警报=“你的留言有人回复了。”;
…
};
…
“亚博zendesk_sdk_request_id”=<的-请求-id>;
…
}