モバイルアプリプッシュにおけるメッセージ折りたたみの解決策
モバイルアプリのプッシュシナリオにおいて、メッセージの折りたたみ問題は直接的にユーザーエクスペリエンスとメッセージ配信効率に影響を及ぼします。この記事では、AppPushサービスを基に、通知メッセージとカスタムメッセージの両方のタイプを使用して、メッセージを折りたたまずに表示する方法について詳しく説明します。
1. メッセージタイプと表示ルールの比較
通知メッセージ
- システムのデフォルト動作:
アプリ状態 | 表示ルール |
---|---|
フォアグラウンド | group_id を使用して折りたたみを制御可能 |
バックグラウンド | 携帯電話のシステムによって管理され、通知バーに表示される。カスタマイズオプション(折りたたみ、数量制限など)が限られている |
- 使用シナリオ: システム通知バーを介してユーザーに到達する必要がある標準的なプッシュメッセージ。
カスタムメッセージ
主な利点:
アプリがフォアグラウンド、バックグラウンド、またはメモリからクリアされている場合に関係なく、クライアント側のコードでメッセージの表示方法(ポップアップ位置、折りたたみロジックなど)を完全に制御できます。使用シナリオ:
カスタマイズされた対話が必要な高優先度メッセージ(注文状態の更新、インスタントメッセージングなど)。
2. メッセージの折りたたみを防止する2つの解決策
解決策1:通知メッセージを使用する
(FCMはアプリがフォアグラウンドの場合のみ有効;EngageLabはすべての状態で有効)
原理
group_id
フィールドを使用してメッセージのグループ化を制御します:
- 折りたたみを防止するには:各メッセージに一意の
group_id
を割り当てます。
実装手順
Android SDKバージョンV5.0.1以降でサポートされています
プッシュAPIペイロードのサンプル:
{
"notification": {
"android": {
"group_id": "UNIQUE_GROUP_123" // 一意の値で折りたたみを防止
}
}
}
{
"notification": {
"android": {
"group_id": "UNIQUE_GROUP_123" // 一意の値で折りたたみを防止
}
}
}
このコードブロックはフローティングウィンドウ内に表示されます
互換性に関する注意事項
- 現在、FCMとEngageLabのプッシュチャネルのみをサポートしています。
- アプリがバックグラウンドの場合、メッセージは依然としてシステムの制限の影響を受ける可能性があります。
解決策2:カスタムメッセージを使用する(すべてのシナリオでサポート)
原理
クライアントがアクティブにshowNotification
APIを呼び出してメッセージをレンダリングし、システムの制限を回避します。
実装手順
1. カスタムメッセージを送信する
{
"message": {
"msg_content": "Your order has been shipped",
"content_type": "text",
"extras": {
"type": "priority_alert",
"style": "popup_bottom" // カスタム表示スタイル
}
}
}
{
"message": {
"msg_content": "Your order has been shipped",
"content_type": "text",
"extras": {
"type": "priority_alert",
"style": "popup_bottom" // カスタム表示スタイル
}
}
}
このコードブロックはフローティングウィンドウ内に表示されます
2. クライアントがメッセージを処理する(Androidの例)
public class UserReceiver extends MTCommonReceiver {
@Override
public void onCustomMessage(Context context, CustomMessage customMessage) {
ExampleLogger.i(TAG, "onCustomMessage:" + customMessage.toString());
showNotification(context, customMessage); // 表示をトリガー
}
}
public class UserReceiver extends MTCommonReceiver {
@Override
public void onCustomMessage(Context context, CustomMessage customMessage) {
ExampleLogger.i(TAG, "onCustomMessage:" + customMessage.toString());
showNotification(context, customMessage); // 表示をトリガー
}
}
このコードブロックはフローティングウィンドウ内に表示されます
3. カスタム表示ロジック(折りたたみ防止)
public void showNotification(Context context, CustomMessage customMessage) {
NotificationMessage notificationMessage = new NotificationMessage()
.setMessageId(customMessage.getMessageId())
.setNotificationId("独自のID;各通知は一意である必要があります")
.setTitle(customMessage.getTitle())
.setContent(customMessage.getContent())
.setgroup_id(customMessage.getMessageId()); // 折りたたみを防止するキーフィールド
MTPushPrivatesApi.showNotification(context, notificationMessage);
}
public void showNotification(Context context, CustomMessage customMessage) {
NotificationMessage notificationMessage = new NotificationMessage()
.setMessageId(customMessage.getMessageId())
.setNotificationId("独自のID;各通知は一意である必要があります")
.setTitle(customMessage.getTitle())
.setContent(customMessage.getContent())
.setgroup_id(customMessage.getMessageId()); // 折りたたみを防止するキーフィールド
MTPushPrivatesApi.showNotification(context, notificationMessage);
}
このコードブロックはフローティングウィンドウ内に表示されます
機能比較
機能 | 通知メッセージ | カスタムメッセージ |
---|---|---|
アプリ状態サポート | FCM:フォアグラウンドのみ;EngageLab:すべての状態 | すべてのシナリオ(フォアグラウンド/バックグラウンド) |
UIの柔軟性 | 限られている(システムに依存) | 完全にカスタマイズ可能 |
チャネル依存性 | 特定のチャネル(FCM、EngageLab)が必要 | 制限なし |
3. 注意事項
チャネル互換性
group_id
機能は現在、FCMとEngageLabチャネルのみをサポートしています。
パフォーマンス最適化
- 一意の
group_id
を持つ高頻度メッセージを送信する場合は、通知バーのキャッシュ圧力を監視してください(推奨制限:1デバイスあたり1時間に≤30メッセージ)。
- 一意の
4. まとめ
- 軽量なニーズ: 通知メッセージで
group_id
を使用して折りたたみを制御することを推奨します。開発コストが低くなります。 - 高カスタマイズニーズ: カスタムメッセージを選択してください。クライアントロジックを介して表示動作を完全に制御できます。
- ハイブリッド戦略: 重要なメッセージ(支払い成功など)にはカスタムメッセージを使用し、標準メッセージは
group_id
で管理します。
適切な戦略を選択することで、メッセージの可視性とユーザーの関与を大幅に向上させることができます。