88

WWDC 2013 の「マルチタスキングの新機能」プレゼンテーションには、サイレント プッシュ通知に関するセクションがあります。まっすぐに見えます。プレゼンテーションによると、content-available だけを 1 に設定して APS ペイロードを送信すると、ユーザーには通知が通知されません。

// A. This doesn't work
{ 
  aps: { 
          content-available: 1 
       }
}

私のテストでは、プッシュが受信されないため、これは機能しないことが示されています。しかし、sound 属性を含めて alert 属性を除外すると、機能します (ただし、サイレントではなくなります)。

// B. This works
{ 
  aps: {
          content-available: 1,
          sound: "default"
       }
}

ただし、サウンド属性を変更してサイレント オーディオを再生すると、サイレント プッシュを模倣できます。

// C. This works too.
{ 
  aps: {
          content-available: 1,
          sound: "silence.wav"
       }
}

誰か知っていますか:

  1. もしやこれはバグ?
  2. また、B または C がリモート通知として扱われていると仮定するのが正しい場合 (サウンド属性が必要なサイレント プッシュのバグではありません)? もしそうなら、これは、サイレントプッシュのようにレート制限されていないことを意味します... Appleが修正する可能性があります. だから頼ってはいけないのかもしれません。
  3. レート制限はどのくらいですか (X 秒ごとに N プッシュなど)?

前もって感謝します。

より多くの情報で編集

A の場合、アプリケーションの状態は問題ではありません。通知は受信されません。

B と C は、以下のように属性と値を引用符で囲んだ場合にのみ機能するようです。

{"aps":{"content-available": 1, "sound":"silent.wav"}}

そして、通知は状態に関係なくapplication:didReceiveRemoteNotification:fetchCompletionHandler:に届きます。

4

11 に答える 11

73

これも機能し、到着時にサウンドを再生しません。

{
    aps = {
        "content-available" : 1,
        sound : ""
    };
}

編集

この問題を抱えている人は、このリンクをチェックしてみてください。私は、Apple の開発者フォーラムのスレッドに参加しており、アプリのすべての状態と、サイレント プッシュが受信された場合と受信されなかった場合について説明しています。

于 2013-10-17T13:23:22.577 に答える
30

そのため、昨日この問題に遭遇しました。サウンドを空の文字列に設定してペイロードを送信しようとした後も、デバイスで振動/サウンドが発生していました。最終的に、Urban Airship からのブログ投稿に出くわしました。

{ priority: 5 }

見たことのないプッシュ通知で。プッシュ通知に関するAppleのドキュメントを熟読した後、私はこのページに出くわしました:

https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/CommunicatingwithAPNs.html

これは、優先度を「5」または「10」に設定する必要があることを示し、次のように説明しています。

通知の優先度。次のいずれかの値を指定します。

10 プッシュ メッセージがすぐに送信されます。

プッシュ通知は、デバイスでアラート、サウンド、またはバッジをトリガーする必要があります。content-available キーのみを含むプッシュにこの優先度を使用するとエラーになります。

5 プッシュ メッセージは、それを受信するデバイスの電力を節約できるタイミングで送信されます。

最終的に、次の形式のバッジ カウントで動作するサイレント プッシュ通知を取得することができました (アラートでも同じことができるのではないかと思います)。

    aps =     {
        badge = 7;
        "content-available" = 1;
        priority = 5;
    };
于 2014-05-28T16:54:46.840 に答える
10

アラート属性として空の文字列を設定しようとしましたが、それも機能しました:

{
    aps =     {
        "content-available" = 1;
        "alert" = "";
    };
}

プッシュ ペイロードを検証する目的で、APNS がこの属性の存在をチェックしているようです。興味深いことに、彼らは実際のコンテンツをチェックしていません。少しハッキーなようですが...

于 2013-11-22T12:27:13.280 に答える
6

私はツールを使用しています- Knuffはプッシュ通知を私のデバイスに送信します。

次のようになります。 ここに画像の説明を入力

次に、これらの例を試しました。

それらはすべて動作します!しかし、優先度 10 を設定する必要があります!

そのため、ツールを使用していない場合は、それにも注意してください。


例:

  • アラートなし、音なし

{
    "aps":{
        "content-available":1,
    }
}

  • アラートのみ

{
    "aps":{
        "content-available":1,
        "alert":""
    }
}

  • 音だけ

{
    "aps":{
        "content-available":1,
        "sound":""
    }
}

于 2016-09-06T11:06:59.430 に答える
4

これは私のために働く:

{ 
  aps: { 
          content-available: 1 
       }
}

>のチェックBackground fetchボックスをチェックしてくださいProject CapabilitiesBackground Modes

于 2014-11-03T15:26:23.290 に答える
2

私は同じ問題を見ています。"content-available":1 を指定してプッシュを送信し、他の属性を設定しないと、通知が受信されません。他の属性を追加すると、完全に機能します。

一時的な回避策として、バッジ属性を追加しています。これは、バッジをアイコンに追加する以外にユーザーに警告を発しないためです。

より良い解決策を見つけた場合はお知らせください。

于 2013-10-17T10:39:27.453 に答える
1

優先度は、ペイロード json 文字列ではなく、バイナリ ストリーム内の 1 つの項目として設定する必要があります。次のように優先順位を設定する際に使用できるのは、明らかに最新のタイプ 2 形式のみです。

$token      = chr(1) . pack('n', 32)     . pack('H*', $deviceToken);
$payload    = chr(2) . pack('n', strlen($json)) . $json;
$identifier = chr(3) . pack('n', 4)      . pack('N', $notification);
$expiration = chr(4) . pack('n', 4)      . pack('N', time()+86400);
$priority   = chr(5) . pack('n', 1)      . chr($priority);

$frame_data = $token.$payload.$identifier.$expiration.$priority;
$frame_length = strlen(bin2hex($frame_data))/2;

$msg = chr(2) . pack('N', $frame_length) . $frame_data;

リモート通知バイナリ メッセージのフォーマット タイプ (最初のバイト):

0 - シンプル (旧) 1 - 拡張 (旧) 2 - より多くのパラメータを持つ最新 (新)

于 2015-07-23T08:17:04.793 に答える
0

ああ!また、私の髪を引っ張る-これは、機能しないペイロードの別の例としての答えではありません。didReceiveRemoteNotification メソッドが呼び出されることはありませんが、デバイスがスリープ状態の場合は警告テキストが表示されます。

 {"aps":
    {  "alert":"alert!",
       "sound":"default",
       "content-available" : 1},
    "content-id":21482,
    "apt":"1"
}

「apt」は、通知タイプを示すために使用するカスタム フィールドです。

于 2013-10-24T21:47:04.573 に答える
0

通知が配信されないという同じ問題がありました。私たちの場合、サイレント プッシュを使用してバッジ番号を更新していました。アラート (本文とタイトル) とサウンドに空の文字列を設定すると機能しますが、いずれかのキーが存在しない場合は機能しません。これが機能し、音やアラートなしでバッジを更新しました(didReceiveRemoteNotificationの結果のuserInfo辞書のログ)

{
    aps =     {
        alert =         {
            body = "";
            title = "";
        };
        badge = 103;
        "content-available" = 1;
        sound = "";
    };
}
于 2018-05-10T05:18:41.263 に答える
0

「サウンド」を0に設定するとうまくいきました... :)

于 2013-11-05T00:54:42.780 に答える