はじめに
今までは、ソケット通信を使って通信するものでプッシュ通知のペイロードの大きさが2MBまででとか、証明書がアプリごとに違ってとか1年毎にサーバに証明書を置き換えないといけないとかすごい手間が多かった手法に慣れていたので使っていました。
しかし、そろそろ面倒になってきたので、 APNs Provider API
という HTTP/2
ベースでプッシュ通知を送れて、証明書はアプリに依存せずに使い回せて、証明書の置き換え等の操作をしなくてもよくなるということで実装してみました。
開発環境
準備
p8
ファイルの作り方とかは色んなサイトで紹介されていると思うので省略します
$ pip install git+https://github.com/nnsnodnb/python-apns.git@payload#egg=gobiko.apns
ちょっと、本家さんのソースコードがバグってたのでやや修正中&Payloadの簡単な指定実装のForkを指定してます。
本家
ソースコード
from gobiko.apns.client import APNsClient from gobiko.apns.payload import PayloadAlert, Payload import jwt import time AUTH_KEY = '/path/to/AUTH_KEY.p8' client = APNsClient(team_id='YOUT_TEAM_ID', bundle_id='com.example.sample.notification', auth_key_id='YOUR_AUTH_KEY', auth_key_filepath=AUTH_KEY, use_sandbox=True) custom = {'image_url': 'https://example.com/1.jpg'} payload_alert = PayloadAlert(title='ここがタイトル', body='ここが本文') # alert is str or PayloadAlert payload = Payload(alert=payload_alert, sound='default', badge=1, mutable_content=True, custom=custom) client.send_message( 'REGISTRATION_ID (as DEVICE_TOKEN)', alert=payload_alert, )
team_id
は Membership
で見られるTeam IDです。
bundle_id
はアプリのバンドルIDです。
auth_key_id
は、 p8
ファイル生成した時に生成されるものです。
最後に
これで、Sandbox用とProduction用の証明書を分ける必要もなくなって、アプリごとに証明書を作りまくることから開放されました!
p8
ファイルは安全に盗難されることない場所に保管しましょう!