Android アプリケーションでのプッシュ通知の設定
プッシュ通知を設定するために ServiceNow® インスタンスで実行する必要があるタスクに加えて、 Android アプリケーションに特定のコードを含める必要もあります。
NowSDK NowPushService を作成する
アプリケーションで最初に行う必要があることの 1 つは、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() メソッドをオーバーライドし、 RemoteMessage を NowPushService に渡します。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()に渡してください。