LoginSignup
4
5

More than 1 year has passed since last update.

[Java]APIサーバーからpush通知を送信できなくなってしまった。

Posted at

この記事について

筆者がJavaで構成されるアプリのAPIサーバーを修正していたところ、自前のApiサーバーからAppleのApnsサーバーへpush通知の送信リクエストができなくなってしまいました。その際に対処したことを備忘録として残しておきます。

経緯

Apnsサーバーへpush通知の送信リクエストができなくなってしまったのですが、その際サーバーには以下のようなエラーログが吐かれていました。

[ERROR] NotificationSender:70 certificateName: □ □ □.p12 / Exception: java.util.concurrent.ExecutionException: java.io.IOException: Stream closed before a reply was received

このAPIサーバーで使用しているライブラリはpushyというものです。

筆者は上記のエラー文や、ライブラリ関係の文言でググってもなかなか原因がわかりませんでした。

セットする変数を誤っていただけだった

結局プッシュ通知が送信できなかった原因は、このライブラリのApnsClientのインスタンスを生成する際にセットする変数の値が、開発環境の場合は

api.sandbox.push.apple.com

なのですが、誤って本番用の値

api.push.apple.com

をセットしていたことでした。この変数の値はApnsサーバーのドメインに当たるものです。
https://developer.apple.com/documentation/usernotifications/setting_up_a_remote_notification_server/sending_notification_requests_to_apns/

今回、Apnsへのリクエスト送信処理やpush通知の証明書に問題がなく、エラー内容からも原因が特定しにくかったため、原因特定に時間がかかってしまいました。。。
このライブラリを使用していない場合でも、Javaで構成したサーバーからApnsサーバーへ送信するエンドポイントが誤っていた際には似たようなエラーが発生するかもしれません(エラー内容は異なるかも)。

まとめ

自前サーバーからApnsへpush通知が送信できない際には、一度送信先のエンドポイントを確認してみてください!

4
5
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
5