Configuração de notificações por push em sua aplicação Android
Além das tarefas que você deve executar em sua instância ServiceNow® para configurar uma notificação por push, você também deve incluir um código específico em sua aplicação Android.
Criar o NowSDK NowPushService
Uma das primeiras coisas que precisa ser feita em sua aplicação é recuperar o NowSDK NowPushService. Adicione um código semelhante ao snippet a seguir no início do corpo do código principal.
/**
* Helper class used to handle different Now service instances.
*/
@Singleton
class SdkManager @Inject constructor() {
private var nowPushService: NowPushService? = null
/**
* Create the NowPushService once in the lifetime of the application inside the Application
* class or another manager class that will be injected into other classes via dagger/hilt.
* NowPushService should be created after initializing the NowSDK
*/
suspend fun getNowPushService(): NowPushService? {
if (nowPushService != null) return nowPushService
return NowPushSDK.makePushService(URL("https://instance-name.service-now.com")).getOrThrow()
.also { this.nowPushService = it }
}
}
Para obter informações adicionais sobre o método NowPushSDK.makePushService(), consulte NowPushSDK - makePushService(instanceURL: URL).
Registrar o token de push
Google Firebase fornece um token de push exclusivo que identifica o dispositivo e a aplicação para receber notificações por push. Para que uma aplicação receba notificação por push, você deve registrar este token usando o NowPushService. Adicione uma função semelhante ao snippet de código a seguir em sua aplicação Android. Certifique-se de mudar PushAppName para o nome da sua aplicação Android. Esta aplicação deve ser registrada com sua instância ServiceNow®.
FirebaseMessaging.getInstance().token.addOnCompleteListener {task ->
val token = task.result
if (!task.isSuccessfull || token == null) {
throw Exception("Unable to fetch token"))
}
pushService.registerPushToken(token, "PushAppName", {
Log.v(TAF, "Successfully registered push token")
}, { e ->
Log.e(TAG, "Error registrating push", e)
})
}
Para obter informações adicionais sobre o método registerPushToken(), consulte NowPushService - registerPushToken(pushToken: cadeia de caracteres, pushApp: cadeia de caracteres, sucessoCallback: executável, errorCallback: consumidor<Throwable> ).
Cancelar registro do token de envio
Você precisa cancelar o registro do token de envio sempre que o usuário sair da aplicação, por exemplo, quando o usuário faz logout. Use um código semelhante ao snippet de código a seguir para cancelar o registro do token de envio. Certifique-se de mudar PushAppName para o nome da sua aplicação Android.
pushService.unregisterPushToken(token, "PushAppName", {
Log.v(TAG, "Successfully unregistered push token")
}, { e ->
Log.e(TAG, "Error unregistering push", e)
})
Para obter informações adicionais sobre o método unregisterPushToken(), consulte NowPushService - unregisterPushToken(pushToken: cadeia de caracteres, pushApp: cadeia de caracteres, sucessoCallback: executável, errorCallback: consumidor<Throwable> ).
Implementar o FirebaseMessagingService
Você deve implementar o FirebaseMessagingService em sua aplicação. Para configurar e implementar este serviço, siga as instruções na documentação do Android Firebase.
Depois da configuração, substitua o método onMessageReceived() e passe o RemoteMessage por meio do NowPushService. Se o NowPushService reconhecer a notificação, ele a processará e retornará o objeto de notificação para a aplicação processar. Atualmente, a única notificação implementada é NowPushVirtualAgent. Uma notificação desconhecida retorna um objeto NotSupportedPushError.
//Custom coroutineScope created in the Firebase service class
private val serviceCoroutineScope = CoroutineScope(Dispatchers.IO)
override fun onMessageReceived(remoteMessage: RemoteMessage) {
serviceCoroutineScope.launch {
val result = handleNowPush(remoteMessage)
if (result.isSuccess) {
when (val push = result.getOrNull()) {
is NowPushVirtualAgent -> handleVirtualAgentPush(push)
}
} else {
// Not a NowPush. Handle host app push notification message here
}
}
}
private suspend fun handleNowPush(remoteMessage: RemoteMessage): Result<NowPushPayload> {
val nowPushService = sdkManager.getNowPushService()
return suspendCoroutine { cont ->
nowPushService?.handlePush(remoteMessage,
{ cont.resume(Result.success(it)) }, { cont.resumeWithException(it) })
}
}
Para obter informações adicionais sobre o método handlePush(), consulte NowPushService - handlePush(remoteMessage: RemoteMessage, sucessoCallback: consumidor<NowPushPayload> , errorCallback: consumidor<Throwable> ).
Além disso, você deve substituir onNewToken(token: String). Certifique-se de passar o token por meio de pushService.registerPushToken(), semelhante ao que foi feito na seção "Registrar o token de envio".