Silent Push — 本質、バックグラウンドタスク、配信設定

著者: IT Sectr 公開日: 2026-03-20 読了時間: 9 分

Silent Pushは、ユーザーに何も表示せず、音も伴わずにデバイスに配信されるiOSプッシュ通知の一種です。サイレント通知の主な目的は、バックグラウンドでのデータ同期、コンテンツの更新、ユーザーの注意を必要としない短いタスクの実行です。Apple Developer Documentation、2026によると、Silent Pushは、受信データを処理するためにアプリをバックグラウンドで30秒間起動し、その後システムはバッテリーを節約するためにデバイスをスリープモードに戻します。

重要なポイント

  • バックグラウンド起動 — Silent Pushは、ユーザーの操作なしでデータを処理するために、アプリをバックグラウンドで30秒間起動します。
  • content-availableキー — APNSペイロード内の必須フラグで、値は1。サイレント通知を通常の通知と区別します。
  • バッテリー節約 — システムはsilent pushの配信を最適化します。バッテリー残量が少ない場合や省電力モードでは、配信が遅延またはキャンセルされる場合があります。
  • 頻度の制限 — iOSはすべてのsilent pushの配信を保証しません。特に高頻度で送信する場合やアプリがバックグラウンドにある場合に顕著です。
  • UIなし — サイレント通知は通知センターに表示されず、音も再生されず、アプリアイコンのバッジも増加しません。

Silent Pushとは — 本質と目的

Silent Pushは、ユーザーに視覚的な通知を一切行わずにデバイスにデータを配信するiOSの仕組みです。バナーを表示し、音を再生し、通知センターに表示される標準的なプッシュとは異なり、サイレントプッシュはバックグラウンドでアプリを「起動」し、処理するためにデータを渡します。ユーザーはそのような通知の配信を知ることはありません。結果として、次回アプリを開いたときに更新されたコンテンツが表示されます。

通常のプッシュ通知との違い

主な違いはJSONペイロードにあります。サイレントプッシュにはcontent-available: 1フラグが含まれ、alert、sound、badgeは含まれません。標準的な通知はalertがある場合、content-availableに関係なく常にユーザーに表示されます。Silent Pushはcontent-available: 1とalertなしでのみ機能します。alertを追加すると、バックグラウンド配信フラグがあってもシステムは通知を表示します。

Silent Pushを使用するタイミング

サイレント通知は、ユーザーがアプリを開くときにデータが最新である必要があるが、ユーザーが邪魔されるべきではないシナリオに不可欠です。: バックグラウンドでのニュースフィードの更新、サブスクリプションの同期、オフラインアクセスのための新しいコンテンツのダウンロード、ウィジェットの更新、キャッシュの無効化。Silent Pushは、ユーザーの予想される操作の前にアプリを「ウォームアップ」するためにも使用されます。

サイレント通知の配信の仕組み

Silent Pushの配信は通常の通知とは大きく異なり、電力最適化ルールに従います。iOSシステムはAPNSからプッシュリクエストを受信し、それがサイレントプッシュ(content-available: 1)であると判断し、バッテリーレベル、省電力モード、以前のサイレントプッシュの頻度、アプリアクティビティ、現在のCPU負荷など、複数の要因に基づいて配信するかどうかを決定します。

Power Napとバックグラウンドモードの役割

Apple MチップとiOS 15+を搭載したデバイスでは、サイレントプッシュはPower Napメカニズムと統合され、バックグラウンドタスクのために定期的にデバイスを起動します。Power Napは複数のサイレントプッシュを1つのアクティビティ期間に統合し、全体的な電力消費を削減します。開発者はPower Napを直接制御できません。システムはユーザーの行動とアプリの使用履歴に基づいて自動的に決定を下します。

30秒の処理ウィンドウ

システムがサイレントプッシュを配信すると、アプリはAppDelegateでapplication(_:didReceiveRemoteNotification:fetchCompletionHandler:)の呼び出しを受け取ります。開発者は30秒以内にcompletion handlerを呼び出し、正しい結果(UIBackgroundFetchResult)を渡す必要があります。処理が時間内に完了しない場合、システムはこのアプリのサイレントプッシュの頻度を制限したり、配信を完全に停止したりする可能性があります。

swift
// 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のユースケース

Silent Pushは、ユーザーの積極的な参加なしにデータを最新に保つ必要がある、さまざまなタスクで使用されます。実際のiOSアプリケーションにおけるこのメカニズムの最も効果的なユースケースを見てみましょう。

オフラインアクセスのためのコンテンツ更新

ニュースアプリ、リーダー、旅行アプリケーションは、バックグラウンドで新しいコンテンツをダウンロードするためにSilent Pushを使用します。ユーザーがアプリを開くと、データはすでにロードされており、インターネット接続がなくても利用できます。このアプローチはユーザーエクスペリエンスを劇的に向上させます。空のローディング画面がなくなり、コンテンツが即座に表示されます。新しい記事が表示されるとサーバーはサイレントプッシュを送信し、アプリはオフラインで読むためにバックグラウンドでそれらをダウンロードします。

ウィジェットの状態同期

iOS WidgetKitはスケジュールに従ってウィジェットを更新しますが、サーバー側のデータ変更後に即座に更新するには、Silent Pushが使用されます。バックグラウンドのアプリはサイレントプッシュを処理し、ウィジェット用のローカルデータストアを更新し、WidgetCenterを介してタイムラインを強制的に更新します。ユーザーはアプリを開かずにウィジェットで最新情報(為替レート、天気予報、配送状況)を確認できます。

キャッシュの無効化と古いデータのクリーンアップ

サーバーが重要なデータ(価格設定ルール、プレミアムユーザーが利用できる機能など)を更新すると、Silent Pushはローカルキャッシュを即座に無効化できます。次回のオープン時に、アプリは古いキャッシュを使用する代わりに、サーバーから新しいデータをロードします。これは特に有料コンテンツやサブスクリプションがあるアプリに関連します。

目に見える通知なしでのバッジ更新

シナリオによっては、通知を表示せずにアプリアイコンのバッジを更新する必要があります。ペイロードにbadgeフィールドがあるSilent Pushを使用すると、バナーでユーザーを邪魔することなく、目的のカウンター値を設定できます。たとえば、チャットアプリは、ユーザーがすでにアプリ内にいる場合、新しいメッセージごとに通知を表示せずに、未読メッセージの数でバッジを更新できます。

Silent Pushの設定: ペイロードと機能

Silent Pushを正しく機能させるには、Xcodeプロジェクト、サーバー上のJSONペイロード、アプリ内の処理コードの3つのレベルでの設定が必要です。各レベルは重要です。どのステップを省略しても、通知は通常どおり配信されるか、まったく配信されなくなります。

Xcodeでの機能の設定

Xcodeでは、Push Notifications機能と、Remote notificationsチェックボックスをオンにしたBackground Modesを有効にする必要があります。Push NotificationsはAPNSの証明書を生成し、Background ModesのRemote notificationsは、サイレントプッシュを受信したときにシステムがアプリを起動できるようにします。Remote notificationsがない場合、サイレントプッシュは配信されますが、アプリはバックグラウンドで起動されず、データは処理されません。

JSONペイロードの構造

Silent Pushのペイロードには、content-available: 1を含むapsキーが含まれている必要があり、alert、sound、badgeを含んではなりません。カスタムフィールドはapsと同じレベルで渡され、処理用のデータ(操作タイプ、オブジェクト識別子、メタデータ)が含まれます。content-availableがないペイロードは通常の通知として扱われます。alertがある場合、content-availableがあっても通常の通知になります。

json
{
    "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のSilent Pushに関する推奨事項

Appleは効果的なサイレントプッシュの使用に関するいくつかのルールに従うことを推奨しています。1台のデバイスに1時間あたり2〜3件を超えるサイレントプッシュを送信しないでください。制限を超えるとブロックされます。コンパクトなペイロードを使用してください。ペイロードサイズを最小限にすると、処理が高速化され、ネットワーク負荷が軽減されます。常にできるだけ早くcompletionHandlerを呼び出してください。処理に時間がかかるほど、システムが将来サイレントプッシュを制限する可能性が高くなります。

Silent Pushの代替手段

配信が保証されていることや、より多くの処理時間が必要なシナリオでは、代替手段を検討してください。VoIPプッシュ(PushKit)は配信を保証し、より多くの時間を提供しますが、VoIPアプリケーションのみを対象としています。Background fetch(UIApplication background fetch)はシステムによってスケジュールに従って起動されますが、サーバーから開始することはできません。WebSocketは永続的な接続を維持しますが、バッテリーをより多く消費し、すべてのタイプのアプリに適しているわけではありません。

監視とデバッグ

Silent Pushをデバッグするには、MacでConsole.appを使用し、アプリ名でフィルタリングします。システムは各サイレントプッシュを「background task」ラベルでログに記録し、処理が成功したかどうかを示します。デバイスでは、設定→デベロッパ→Background Modes Loggingで確認できます。サーバー側の追跡は、APNS Feedback Serviceを介して未配信の通知を特定するために行われます。

よくある質問

Silent Pushと通常のプッシュ通知の違いは何ですか?

Silent Pushはユーザーに表示されず、音も再生されず、通知センターにも表示されません。その目的は、データ同期のためにアプリをバックグラウンドで起動することです。通常のプッシュは常にバナーを表示し、サウンドとバッジを含めることができます。

Silent Pushの処理にはどのくらいの時間が与えられますか?

アプリはバックグラウンドタスクを完了するために30秒与えられます。completionHandlerを呼び出した後、システムはデバイスをスリープモードに戻します。時間内にcompletionHandlerが呼び出されない場合、システムはこのアプリへのサイレントプッシュの配信を停止する可能性があります。

Silent Pushがデバイスに届かないのはなぜですか?

バッテリー残量が少ない場合、省電力モードの場合、サイレントプッシュを頻繁に送信した後、またはアプリが長期間使用されていない場合、システムは配信を遅延させる可能性があります。これは通常のiOSの動作であり、実装エラーとは関係ありません。

Silent Pushを通常の通知と一緒に送信できますか?

はい、alertとともにcontent-available: 1を含めることができます。この場合、通知はユーザーに表示され、アプリは追加でバックグラウンド起動を受け取ります。ただし、タスクが表示なしのバックグラウンド同期のみの場合、alertを含めることはできません。

Silent Pushが正しく処理されていることを確認するにはどうすればよいですか?

MacのConsole.appを使用してバックグラウンドタスクのログを表示します。APNSを介してテスト用のサイレントプッシュを送信し、正しいcompletionHandlerでdidReceiveRemoteNotificationが呼び出されることを確認します。Xcodeでは、バックグラウンドモードのシミュレーションを使用してシミュレーターを使用します。

まとめ

  • Silent Push — ユーザーに表示せずにデータを配信し、アプリを30秒間起動するiOSのバックグラウンド同期メカニズム。
  • content-available: 1キー — APNSペイロード内の必須フラグで、サイレント通知を通常の通知と区別します。alert、sound、badgeは必須ではありません。
  • 配信は保証されていません — iOSはバッテリーレベル、頻度、アプリアクティビティに基づいてサイレントプッシュの配信を最適化します。実際の配信率は70〜80%です。
  • ユースケース — バックグラウンドコンテンツのダウンロード、ウィジェットの更新、キャッシュの無効化、サブスクリプションの同期、バッジの更新。
  • 頻度制限 — デバイス1台につき1時間あたり2〜3件を超えるサイレントプッシュは不可。制限を超えると、システムによる配信ブロックが発生します。
  • iOSはSilent Pushを遅延またはキャンセルする場合があります バッテリー残量が少ない場合、低電力モードの場合、またはユーザーが長時間操作しなかった場合。
  • Silent Push — ユーザーエクスペリエンスを最適化するための効果的なツールですが、重要な通知や保証された通知には使用しないでください。

ターンキー方式のモバイルアプリケーションを開発します

IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。

プロジェクトについて相談

こちらもお読みください