애플리케이션에서 푸시 알림 Android 설정
푸시 알림을 구성하기 위해 인스턴스에서 수행해야 ServiceNow® 하는 작업 외에 애플리케이션에 특정 코드도 포함해야 합니다 Android .
NowSDK NowPushService 생성
애플리케이션에서 수행해야 하는 첫 번째 작업 중 하나는 NowSDK NowPushService를 검색하는 것입니다. 기본 코드 본문 앞부분에 다음 코드 조각과 유사한 코드를 추가합니다.
/**
* 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 }
}
}
NowPushSDK.makePushService() 메서드에 대한 자세한 내용은 를 참조하십시오NowPushSDK - makePushService(instanceURL: URL).
푸시 토큰 등록
Google Firebase 는 푸시 알림을 수신할 장치와 애플리케이션을 식별하는 고유한 푸시 토큰을 제공합니다. 애플리케이션이 푸시 알림을 수신하기 위해서는 NowPushService를 사용하여 이 토큰을 등록해야 합니다. 응용 프로그램에서 다음 코드 조각 Android 과 유사한 함수를 추가합니다. 애플리케이션의 이름으로 변경해야 PushAppName 합니다 Android . 이 애플리케이션은 인스턴스에 등록되어 있어야 합니다 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)
})
}
registerPushToken() 메서드에 대한 자세한 내용은 을 참조하십시오NowPushService - registerPushToken(pushToken: String, pushApp: String, successCallback: Runnable, errorCallback: Consumer<Throwable>).
푸시 토큰 등록 취소
사용자가 애플리케이션을 종료할 때마다(예: 사용자가 로그아웃할 때) 푸시 토큰을 등록 취소해야 합니다. 다음 코드 조각과 유사한 코드를 사용하여 푸시 토큰의 등록을 취소합니다. 애플리케이션의 이름으로 변경해야 PushAppName 합니다 Android .
pushService.unregisterPushToken(token, "PushAppName", {
Log.v(TAG, "Successfully unregistered push token")
}, { e ->
Log.e(TAG, "Error unregistering push", e)
})
unregisterPushToken() 메서드에 대한 자세한 내용은 을 참조하십시오NowPushService - unregisterPushToken(pushToken: String, pushApp: String, successCallback: Runnable, errorCallback: Consumer<Throwable>).
FirebaseMessagingService 구현
애플리케이션 내에서 FirebaseMessagingService 를 구현해야 합니다. 이 서비스를 설정하고 구현하려면 Android Firebase 문서의 지침을 따르세요.
설정이 완료되면 onMessageReceived() 메서드를 재정의하고 RemoteMessageNowPushService에 전달합니다. NowPushService가 알림을 인식하면 알림을 처리하고 애플리케이션이 처리할 알림 개체를 반환합니다. 현재 유일하게 구현된 알림은 NowPushVirtualAgent입니다. 알 수 없는 알림은 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) })
}
}
handlePush() 메서드에 대한 자세한 내용은 을 참조하십시오NowPushService - handlePush(remoteMessage: RemoteMessage, successCallback: Consumer<NowPushPayload>, errorCallback: Consumer<Throwable>).
또한 onNewToken(token: String)을 재정의해야 합니다. "푸시 토큰 등록" 섹션에서 수행한 것과 유사하게 토큰을 pushService.registerPushToken()에 전달해야 합니다.