Silent Pushは、ユーザーに何も表示せず、音も伴わずにデバイスに配信されるiOSプッシュ通知の一種です。サイレント通知の主な目的は、バックグラウンドでのデータ同期、コンテンツの更新、ユーザーの注意を必要としない短いタスクの実行です。Apple Developer Documentation、2026によると、Silent Pushは、受信データを処理するためにアプリをバックグラウンドで30秒間起動し、その後システムはバッテリーを節約するためにデバイスをスリープモードに戻します。
重要なポイント
Silent Pushは、ユーザーに視覚的な通知を一切行わずにデバイスにデータを配信するiOSの仕組みです。バナーを表示し、音を再生し、通知センターに表示される標準的なプッシュとは異なり、サイレントプッシュはバックグラウンドでアプリを「起動」し、処理するためにデータを渡します。ユーザーはそのような通知の配信を知ることはありません。結果として、次回アプリを開いたときに更新されたコンテンツが表示されます。
主な違いはJSONペイロードにあります。サイレントプッシュにはcontent-available: 1フラグが含まれ、alert、sound、badgeは含まれません。標準的な通知はalertがある場合、content-availableに関係なく常にユーザーに表示されます。Silent Pushはcontent-available: 1とalertなしでのみ機能します。alertを追加すると、バックグラウンド配信フラグがあってもシステムは通知を表示します。
サイレント通知は、ユーザーがアプリを開くときにデータが最新である必要があるが、ユーザーが邪魔されるべきではないシナリオに不可欠です。例: バックグラウンドでのニュースフィードの更新、サブスクリプションの同期、オフラインアクセスのための新しいコンテンツのダウンロード、ウィジェットの更新、キャッシュの無効化。Silent Pushは、ユーザーの予想される操作の前にアプリを「ウォームアップ」するためにも使用されます。
Silent Pushの配信は通常の通知とは大きく異なり、電力最適化ルールに従います。iOSシステムはAPNSからプッシュリクエストを受信し、それがサイレントプッシュ(content-available: 1)であると判断し、バッテリーレベル、省電力モード、以前のサイレントプッシュの頻度、アプリアクティビティ、現在のCPU負荷など、複数の要因に基づいて配信するかどうかを決定します。
Apple MチップとiOS 15+を搭載したデバイスでは、サイレントプッシュはPower Napメカニズムと統合され、バックグラウンドタスクのために定期的にデバイスを起動します。Power Napは複数のサイレントプッシュを1つのアクティビティ期間に統合し、全体的な電力消費を削減します。開発者はPower Napを直接制御できません。システムはユーザーの行動とアプリの使用履歴に基づいて自動的に決定を下します。
システムがサイレントプッシュを配信すると、アプリはAppDelegateでapplication(_:didReceiveRemoteNotification:fetchCompletionHandler:)の呼び出しを受け取ります。開発者は30秒以内にcompletion handlerを呼び出し、正しい結果(UIBackgroundFetchResult)を渡す必要があります。処理が時間内に完了しない場合、システムはこのアプリのサイレントプッシュの頻度を制限したり、配信を完全に停止したりする可能性があります。
// AppDelegateでのSilent Pushの処理
func application(
_ application: UIApplication,
didReceiveRemoteNotification userInfo: [AnyHashable: Any],
fetchCompletionHandler completionHandler:
@escaping (UIBackgroundFetchResult) -> Void
) {
guard let type = userInfo["sync-type"] as? String
else {
completionHandler(.failed)
return
}
if type == "news-feed" {
NewsFeedSyncService().sync { success in
completionHandler(success ? .newData : .failed)
}
} else if type == "cache-invalidate" {
CacheManager.shared.invalidateAll()
completionHandler(.newData)
} else {
completionHandler(.noData)
}
}
Appleはサイレントプッシュ間の正確な間隔を公開していませんが、テストとドキュメントに基づいて、デバイス1台につき1時間あたり2〜3件のサイレント通知を超えて送信しないことを推奨しています。より頻繁に送信すると、システムはサイレントプッシュを無視し始め、データの配信が停止します。より頻繁な同期が必要な場合は、バックグラウンド設定のURLSessionまたはVoIPプッシュの使用を検討してください。
Silent Pushは、ユーザーの積極的な参加なしにデータを最新に保つ必要がある、さまざまなタスクで使用されます。実際のiOSアプリケーションにおけるこのメカニズムの最も効果的なユースケースを見てみましょう。
ニュースアプリ、リーダー、旅行アプリケーションは、バックグラウンドで新しいコンテンツをダウンロードするためにSilent Pushを使用します。ユーザーがアプリを開くと、データはすでにロードされており、インターネット接続がなくても利用できます。このアプローチはユーザーエクスペリエンスを劇的に向上させます。空のローディング画面がなくなり、コンテンツが即座に表示されます。新しい記事が表示されるとサーバーはサイレントプッシュを送信し、アプリはオフラインで読むためにバックグラウンドでそれらをダウンロードします。
iOS WidgetKitはスケジュールに従ってウィジェットを更新しますが、サーバー側のデータ変更後に即座に更新するには、Silent Pushが使用されます。バックグラウンドのアプリはサイレントプッシュを処理し、ウィジェット用のローカルデータストアを更新し、WidgetCenterを介してタイムラインを強制的に更新します。ユーザーはアプリを開かずにウィジェットで最新情報(為替レート、天気予報、配送状況)を確認できます。
サーバーが重要なデータ(価格設定ルール、プレミアムユーザーが利用できる機能など)を更新すると、Silent Pushはローカルキャッシュを即座に無効化できます。次回のオープン時に、アプリは古いキャッシュを使用する代わりに、サーバーから新しいデータをロードします。これは特に有料コンテンツやサブスクリプションがあるアプリに関連します。
シナリオによっては、通知を表示せずにアプリアイコンのバッジを更新する必要があります。ペイロードにbadgeフィールドがあるSilent Pushを使用すると、バナーでユーザーを邪魔することなく、目的のカウンター値を設定できます。たとえば、チャットアプリは、ユーザーがすでにアプリ内にいる場合、新しいメッセージごとに通知を表示せずに、未読メッセージの数でバッジを更新できます。
Silent Pushを正しく機能させるには、Xcodeプロジェクト、サーバー上のJSONペイロード、アプリ内の処理コードの3つのレベルでの設定が必要です。各レベルは重要です。どのステップを省略しても、通知は通常どおり配信されるか、まったく配信されなくなります。
Xcodeでは、Push Notifications機能と、Remote notificationsチェックボックスをオンにしたBackground Modesを有効にする必要があります。Push NotificationsはAPNSの証明書を生成し、Background ModesのRemote notificationsは、サイレントプッシュを受信したときにシステムがアプリを起動できるようにします。Remote notificationsがない場合、サイレントプッシュは配信されますが、アプリはバックグラウンドで起動されず、データは処理されません。
Silent Pushのペイロードには、content-available: 1を含むapsキーが含まれている必要があり、alert、sound、badgeを含んではなりません。カスタムフィールドはapsと同じレベルで渡され、処理用のデータ(操作タイプ、オブジェクト識別子、メタデータ)が含まれます。content-availableがないペイロードは通常の通知として扱われます。alertがある場合、content-availableがあっても通常の通知になります。
{
"aps": {
"content-available": 1
},
"sync-type": "news-feed",
"last-article-id": "article_8521",
"priority": "high"
}
サイレントプッシュを受信すると、iOSはアプリが表示される前にapplication(_:didReceiveRemoteNotification:fetchCompletionHandler:)を呼び出します。このメソッドでは、userInfoを分析し、必要な作業(ネットワークリクエスト、Core Dataへの書き込み、キャッシュ更新)を実行し、30秒以内に正しい結果でcompletionHandlerを呼び出す必要があります。completionHandlerを呼び出さないと、システムはエラーと見なし、将来のサイレントプッシュの頻度に影響を与えます。
Silent Pushは、重要な操作のための信頼性の高いデータ配信チャネルではありません。これは最適化メカニズムであり、保証された同期ではありません。開発者は制限を理解し、サイレントプッシュがある場合とない場合の両方でアプリが正しく機能するようにシステムを設計する必要があります。
iOSはすべてのサイレントプッシュの配信を保証しません。バッテリー残量が少ない場合(20%未満)、低電力モード、頻繁なサイレントプッシュの後、またはアプリが長期間使用されていない場合、システムは配信を遅延またはキャンセルする場合があります。Appleによる平均配信統計によると、約70〜80%のサイレントプッシュが5分以内に配信され、残りは遅延または消失する可能性があります。
Appleは効果的なサイレントプッシュの使用に関するいくつかのルールに従うことを推奨しています。1台のデバイスに1時間あたり2〜3件を超えるサイレントプッシュを送信しないでください。制限を超えるとブロックされます。コンパクトなペイロードを使用してください。ペイロードサイズを最小限にすると、処理が高速化され、ネットワーク負荷が軽減されます。常にできるだけ早くcompletionHandlerを呼び出してください。処理に時間がかかるほど、システムが将来サイレントプッシュを制限する可能性が高くなります。
配信が保証されていることや、より多くの処理時間が必要なシナリオでは、代替手段を検討してください。VoIPプッシュ(PushKit)は配信を保証し、より多くの時間を提供しますが、VoIPアプリケーションのみを対象としています。Background fetch(UIApplication background fetch)はシステムによってスケジュールに従って起動されますが、サーバーから開始することはできません。WebSocketは永続的な接続を維持しますが、バッテリーをより多く消費し、すべてのタイプのアプリに適しているわけではありません。
Silent Pushをデバッグするには、MacでConsole.appを使用し、アプリ名でフィルタリングします。システムは各サイレントプッシュを「background task」ラベルでログに記録し、処理が成功したかどうかを示します。デバイスでは、設定→デベロッパ→Background Modes Loggingで確認できます。サーバー側の追跡は、APNS Feedback Serviceを介して未配信の通知を特定するために行われます。
よくある質問
Silent Pushはユーザーに表示されず、音も再生されず、通知センターにも表示されません。その目的は、データ同期のためにアプリをバックグラウンドで起動することです。通常のプッシュは常にバナーを表示し、サウンドとバッジを含めることができます。
アプリはバックグラウンドタスクを完了するために30秒与えられます。completionHandlerを呼び出した後、システムはデバイスをスリープモードに戻します。時間内にcompletionHandlerが呼び出されない場合、システムはこのアプリへのサイレントプッシュの配信を停止する可能性があります。
バッテリー残量が少ない場合、省電力モードの場合、サイレントプッシュを頻繁に送信した後、またはアプリが長期間使用されていない場合、システムは配信を遅延させる可能性があります。これは通常のiOSの動作であり、実装エラーとは関係ありません。
はい、alertとともにcontent-available: 1を含めることができます。この場合、通知はユーザーに表示され、アプリは追加でバックグラウンド起動を受け取ります。ただし、タスクが表示なしのバックグラウンド同期のみの場合、alertを含めることはできません。
MacのConsole.appを使用してバックグラウンドタスクのログを表示します。APNSを介してテスト用のサイレントプッシュを送信し、正しいcompletionHandlerでdidReceiveRemoteNotificationが呼び出されることを確認します。Xcodeでは、バックグラウンドモードのシミュレーションを使用してシミュレーターを使用します。
まとめ
ターンキー方式のモバイルアプリケーションを開発します
IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。