Configurer des notifications push dans votre iOS application
En plus des tâches que vous devez effectuer sur votre ServiceNow instance pour configurer une notification push, vous devez également inclure du code spécifique dans votre iOS application.
Créer le NowSDK NowPushService
L’une des premières choses à faire dans votre application est de créer un NowPushService. Le Kit de développement logiciel (SDK) NowPush fournit une fonction d’usine pour créer ce service. Ajoutez un code similaire à l’extrait de code suivant au début de votre corps de code principal.
func setup(with instanceURL: URL) -> AnyPublisher<NowService, ConfigurationError> {
NowPush.makePushService(instanceUrl: instanceURL)
.mapError { .sdkError($0) }
.map { $0 as NowService }
.eraseToAnyPublisher()
}
Pour plus d’informations sur la méthode NowPush.makePushService(), reportez-vous à API NowPush - iOS.
Enregistrer le jeton push
Apple fournit un jeton de notification push unique qui identifie l’appareil et l’application pour recevoir des notifications push. Pour qu’une application reçoive une notification push, vous devez enregistrer ce jeton à l’aide de NowPushService. Ajoutez une fonction similaire à l’extrait de code suivant dans votre iOS application. Cette application doit être enregistrée auprès de votre ServiceNow instance.
func registerForPushNotifications(deviceToken: Data) {
pushService.registerPushToken(deviceToken,
pushAppName: "TestPushApp", // Modify this to be your iOS application name
environment: environment) { [weak self] result in
guard let self = self else { return }
switch result {
case .success:
UserDefaults.standard.set(true, forKey: "pushNotificationsRegistered")
self.pushRegistrationState = .registrationSuccess
case .failure:
UserDefaults.standard.set(false, forKey: "pushNotificationsRegistered")
self.pushRegistrationState = .registrationFailed
}
}
}
Pour plus d’informations sur la méthode registerPushToken(), reportez-vous à NowPushService – registerPushToken(_token : Data, pushAppName : String, environment : NowPushEnvironment, completion : @escaping (Result<Data, NowPushError>) -> Void).
Annuler l’inscription du jeton push
Vous devez annuler l’inscription d’un jeton push chaque fois que l’utilisateur quitte votre application, par exemple lorsqu’il se déconnecte. Utilisez un code similaire à l’extrait de code suivant pour annuler l’inscription d’un jeton push. Veillez à modifier pushAppName le nom de votre iOS application.
func unregisterFromPushNotifications(deviceToken: Data) {
pushService.unregisterPushToken(deviceToken, pushAppName: "TestPushApp", environment: environment) { [weak self] result in
guard let self = self else { return }
switch result {
case .success:
UserDefaults.standard.set(false, forKey: "pushNotificationsRegistered")
self.pushRegistrationState = .unregisterSuccess
case .failure:
self.pushRegistrationState = .unregisterFailed
}
}
}
Pour plus d’informations sur la méthode unregisterPushToken(), reportez-vous à NowPushService – unregisterPushToken(_token : Data, pushAppName : String, environment : NowPushEnvironment, completion : @escaping (Result<Data, NowPushError>) -> Void).
Analyser la charge utile push
Vous devrez analyser les charges utiles des notifications push dans un objet NowPushPayload pour collecter des informations et utiliser les données dans d’autres parties de l’application. Actuellement, cette option n’est disponible que pour les notifications push d’Agent virtuel. Utilisez un code similaire à ce qui suit
func userNotificationCenter(_ center: UNUserNotificationCenter,
didReceive response: UNNotificationResponse,
withCompletionHandler completionHandler: @escaping () -> Void) {
guard let pushService = pushService else {
completionHandler()
return
}
let userInfo = response.notification.request.content.userInfo
_ = pushService.payloadFromUserInfo(userInfo)
.flatMap(handleNowPushPayload)
}
func handleNowPushPayload(_ payload: NowPushPayload) -> Result<Void, NowPushError> {
guard payload is NowPushVirtualAgent else {
return .failure(NowPushError.unsupportedData)
}
launchVirtualAgent()
return .success(())
}