2016-10-31 1 views
2

私はPush機能が必要なiOSアプリを持っており、そのために必要なdevとProd SSL証明書を作成して通知プロバイダ(node-apn)にロードしました。APS:Missing topic

通知はAPNsサンドボックス環境で正常に機能しますが、プロダクション設定で通知を送信すると、プロバイダはAPNゲートウェイから不足しているトピックエラーを取得しています。予想通り

はPRODの本命を検査する際に、私は、証明書拡張の下にリストされている三つの項目を参照してください。

  1. app.bundle.id.voipと
  2. app.bundleをapp.bundle.id。 id.complication

APSdは、アプリケーションが通知設定をOSに登録したときに関連トピック(app.bundle.id)が有効になっていることを示します。だから、セットアップはアプリの側で私にはうまく見えます。

アップルのドキュメントによれば、通知はアプリが複数のトピックをサポートしている場合にapn-topicヘッダーが含まれている必要があります。

私の理解では、voipノードとcomplicationノードは証明書拡張に自動的に追加され、必ずしも別々のトピックを意味するわけではありません。

質問:

  1. が必須またはオプションのAPN-トピックヘッダーですか?

  2. 上記の設定は、複数のトピックまたは単一のトピックとして扱われますか?

  3. すべての通知プロバイダは、サポートする各アプリケーションのバンドルID /トピックを知っている必要があります。その値を使用してAPNにapn-topicヘッダーを送信しますか?

お手伝いします。

答えて

1

私は私の場合、ドキュメントに関連し、それはヘッダにあった問題は、言う、DEVとPRODとの間で同様の問題があった:apns-、

のAPN-idに採用するために、適切なエンコーディングexpiration、およびapns-collapse-id要求ヘッダーは、次のように最初のPOST操作か後続のPOST操作の一部かによって異なります。 これらのヘッダーを初めて送信するときは、ヘッダー名をインクリメンタルインデックスでエンコードしますダイナミックテーブルに追加 その後、これらのヘッダーを送信し、インデックスなしでリテラルヘッダーフィールドとしてエンコードします。

HTTP/2 Request to APNs

ので、PHPでリクエストのヘッダは次のように行く:名前またはキーなし

$headers[] = 'content-length: ' . strlen($data); 
$headers[] = 'apns-topic: ' . $message->topic; 
$headers[] = 'apns-expiration: ' . ($message->time_to_live ? (int)$message->time_to_live + time() : 0); 

が、私はそれが誰かにレガシー証明書を使用して

0

を役に立てば幸い、開発者は1つの自分のアプリがサポートされる機能の種類ごとに証明書を得た:通常のプッシュ通知を、などのVoIPこれらのそれぞれが一つだけのトピックで構成され、したがってときましたレガシー証明書を使用するAPNゲートウェイと通信する通知プロバイダ。トピックの仕様はオプションです。

新しいhttp2インターフェイスとユニバーサル証明書の導入により、開発者は標準プッシュ、VoIPプッシュ、およびウォッチキットの通知を許可する証明書を1つ取得できるようになりました。つまり、同じ証明書に複数のトピックを含めることができます(私の場合と同じです)。したがって、通知プロバイダが新しいユニバーサル証明書を使用してAPNゲートウェイとインタフェースする場合、トピックにはhttpヘッダーを指定し、証明書に存在するものと一致するトピックを指定する必要がありました。

トピックヘッダーはオプションではなくなりました。

関連する問題