mBaaSの管理画面では本文を改行してプッシュ通知を作成できます。iOSはそのまま改行が再現されますが、Androidでは標準のままでは改行されません。
送られてくるメッセージ(message
)には改行コード(\n
)が入った状態となっています。これを使ってプッシュ通知を改行させましょう。
具体的なやり方
参考にしたのは【mBaaS】プッシュ通知のメッセージを改行する【Android】 - Qiitaの記事です。こちらはJava、かつSDKが2系でしたので、Kotlinで3系のコードとして紹介します。
注意点としては NCMBFirebaseMessagingService
を継承するということです。その onMessageReceived
メソッドをオーバーライドすることで実装できます。
コードの全体は次のようになります。
class CustomFcmListenerService : NCMBFirebaseMessagingService() { fun onMessageReceived(from: String, data: Bundle) { if (!data.containsKey("message") && !data.containsKey("title")) { return } val notificationBuilder = notificationSettings(data) val inboxStyle = NotificationCompat.InboxStyle(notificationBuilder) if (null != data.getString("title")) { val title = data.getString("title") inboxStyle.setBigContentTitle(title) } if (null != data.getString("message")) { val message = data.getString("message") val messageArray = message!!.split("\n".toRegex()).dropLastWhile { it.isEmpty() }.toTypedArray() for (i in messageArray.indices) { inboxStyle.addLine(messageArray[i]) } } var appInfo: ApplicationInfo? = null try { appInfo = getPackageManager().getApplicationInfo(getPackageName(), PackageManager.GET_META_DATA) } catch (e: PackageManager.NameNotFoundException) { throw IllegalArgumentException(e) } val containsKey = appInfo!!.metaData.containsKey("notificationOverlap") val overlap = appInfo.metaData.getInt("notificationOverlap") var notificationId = Random().nextInt() if (overlap == 0 && containsKey) { notificationId = 0 } val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager? notificationManager!!.notify(notificationId, inboxStyle.build()) } }
改行処理
改行は次の部分で行っています。メッセージを \n
で分割し、それを順番に inboxStyle.addLine
として追加していきます。
if (null != data.getString("message")) { val message = data.getString("message") val messageArray = message!!.split("\n".toRegex()).dropLastWhile { it.isEmpty() }.toTypedArray() for (i in messageArray.indices) { inboxStyle.addLine(messageArray[i]) } }
まとめ
最新(3系)のAndroid SDKではonMessageReceivedがなくともプッシュ通知の表示ができるようになっています。そのため、カスタマイズのためには自分で継承したクラスを作成し、AndroidManifest.xmlの修正も必要になります。
一度実装しておけば、プッシュ通知のカスタマイズの幅が広がります。ぜひ試してみてください。