メッセージが折りたたまれないようにする方法
モバイルアプリのプッシュ通知シナリオでは、メッセージの折りたたみはユーザー体験とメッセージ配信効率に直接影響します。AppPush 製品をベースに、本記事では技術的な設定によってメッセージを折りたたまずに表示する方法を、Notification と Custom Message の両タイプを対象に説明します。

1. メッセージタイプと表示ルールの比較
Notification
- システムのデフォルト動作:
| App Status | Display Rule |
|---|---|
| Running in foreground | group_id を使用して折りたたみロジックを制御できます。 |
| Running in background | モバイル OS によって処理されます。デフォルトではメッセージは通知バーに表示されますが、表示形式には制限があります(折りたたみ、件数制限など)。そのため、カスタムスタイルの適用は困難です。 |
- 適用シナリオ: システム通知バーを通じてユーザーに届ける必要がある標準的なプッシュ通知。
Custom Message
主な利点:
アプリがフォアグラウンド、バックグラウンド、またはワンタップで消去された状態であっても、ポップアップ位置や折りたたみロジックを含むメッセージ表示形式を、クライアント側コードで完全に制御できます。適用シナリオ:
注文状況のリマインダーやインスタントチャットメッセージなど、カスタマイズされたインタラクションが必要な高優先度メッセージ。
2. メッセージが折りたたまれないようにする 2 つの方法
方法1: Notification を使用する
(FCM チャネルではアプリがフォアグラウンドである必要があります。EngageLab チャネルではフォアグラウンドとバックグラウンドを区別しません。)
実装原理
group_id フィールドを使用して、メッセージのグループ化ロジックを制御します。
- 折りたたまない: 各メッセージに一意の
group_idを割り当てます。
手順
対応バージョン: Android SDK V5.0.1 以降
push API パラメータ設定例(リクエストボディ):
{
"notification": {
"android": {
"group_id": "UNIQUE_GROUP_123" // 折りたたみを防ぐために一意の値を使用
}
}
}
{
"notification": {
"android": {
"group_id": "UNIQUE_GROUP_123" // 折りたたみを防ぐために一意の値を使用
}
}
}
このコードブロックはフローティングウィンドウ内に表示されます
互換性に関する注意事項
- FCM および EngageLab プッシュチャネルのみ対応しています。
- アプリがバックグラウンドで実行されている場合、メッセージ表示は引き続きシステムの制限を受けます。
方法2: Custom Message を使用する(すべてのシナリオに対応)
実装原理
クライアント側で 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("Define this yourself, but make sure each notification is different")
.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("Define this yourself, but make sure each notification is different")
.setTitle(customMessage.getTitle())
.setContent(customMessage.getContent())
.setgroup_id(customMessage.getMessageId()); // 折りたたみ防止のための主要フィールド
MTPushPrivatesApi.showNotification(context, notificationMessage);
}
このコードブロックはフローティングウィンドウ内に表示されます
利点の比較
| Capability | Notification | Custom Message |
|---|---|---|
| Supported app status | FCM: フォアグラウンドのみ、EngageLab: フォアグラウンドとバックグラウンド | すべてのシナリオ(フォアグラウンド/バックグラウンド) |
| Style flexibility | 制限あり(システム依存) | 完全にカスタマイズ可能 |
| Channel dependency | 特定チャネルが必要(FCM、EngageLab) | 制限なし |
3. 注意事項
チャネル互換性
group_id機能は現在、FCM と EngageLab チャネルのみをサポートしています。その他のチャネルは現時点では未対応です。
パフォーマンス最適化
- 独立した
group_id値でメッセージを頻繁に送信する場合は、システム側の通知バーキャッシュ負荷を監視してください(推奨: 1 デバイスあたり 1 時間に 30 件以下)。
- 独立した
4. まとめ
- 軽量な要件: Notification の折りたたみロジックを制御するには、
group_idの使用を優先してください。開発コストを低く抑えられます。 - 高度にカスタマイズされた要件: クライアント側コードを通じて、すべてのシナリオで完全に制御可能な表示を実現するには、Custom Message ソリューションを選択してください。
- ハイブリッド戦略: 重要な通知(支払い確認など)には Custom Message を使用し、通常の通知には
group_id管理を使用します。
適切な方法を選択することで、重要メッセージの配信率を大幅に向上させ、ユーザーインタラクション体験を強化できます。










