『入る学科間違えた高専生』の日記

プログラミングのコードを書いたりする予定です。あとは日記等。あといつまで高専生やねん

iOS用のAPNSをPython3でも動かすことができるDjangoプラグイン(α版)を作成した

はじめ

タイトル通り、プッシュ通知を送信することができるPython2,3対応のDjangoプラグインを作成しました。
現段階では、まだα版としてのリリースをしています。(パッケージ名かぶりが怖いからとりあえず拾っておいた)

現状探すと一応あるんですが、Python2のみの対応とかで...

PyPIページ

pypi.python.org

GitHubリポジトリ

github.com

GitHubリポジトリmaster ブランチはいつマージしようかと迷っているので気分でマージします。
αリリースしているブランチは developソースコードをいじっている最新のモノです。

サポート

使い方

インストール

$ pip install ios-notification

ios-notification をインストールすると自動的に Django==1.11.1 がインストールされますが、気が向いたら修正しておきます。

Djangoプロジェクトに反映

# Djangoプロジェクト作成から
$ django-admin.py startproject sample
$ cd sample/

sample/settings.pysample/urls.py を編集

sample/settings.py

INSTALLED_APPS += (
    'notification',
)

sample/urls.py

from django.conf.urls import include

urlpatterns += (
    url(r'^ios/', include('notification.urls', namespace='notification')),
)

マイグレーション

$ python manage.py migrate
$ python manage.py createsuperuser # パッケージ内でのsuperuserを必要とするため

実行

$ python manage.py runserver

ルーティング

BASE_URL: http://127.0.0.1:8000/ios

  • /receive
  • /send/<TARGET_MODE>/<DEVICE_TOKEN>
  • /cert_upload
  • /login
  • /logout

/receive

  • PUTメソッド
  • Content-Type: application/json
  • Model: notification.models.DeviceToken
  • リクエスト成功: {"result": "success"}
  • リクエスト失敗(パラメータ不足): {"error": "Bad Request"}

サンプルJSON

{
  "device_token": "8a0d7cba3ffad34bd3dcb37728080a95d6ee78a83a68ead033614acbab9b7e76",
  "uuid": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"
}

notification.models.DeviceToken には user フィールドがあるので django.contrib.auth.models.User を適用してユーザを紐付けることもできます。

/send/<TARGET_MODE>/<DEVICE_TOKEN>

  • GETメソッド
  • TARGET_MODE
    • Development: 0
    • Distribution: 1
  • DEVICE_TOKEN: 保存されているデバイストーク
  • パラメータ: message (not require)
  • 送信成功: Successful sending.
  • 送信失敗: Not found. Your device token.
    • Certificateファイルが見つからない
    • 不正なCertificateファイル
    • バイストークンが見つからない

サンプルURL

Development環境にプッシュ通知を送信する(use_sandbox)

http://127.0.0.1:8000/send/0/8a0d7cba3ffad34bd3dcb37728080a95d6ee78a83a68ead033614acbab9b7e76?message=配信!!

Distribution環境にプッシュ通知を送信する

http://127.0.0.1:8000/send/1/8a0d7cba3ffad34bd3dcb37728080a95d6ee78a83a68ead033614acbab9b7e76

/cert_upload

  • GET, POSTメソッド
  • Access by superuser
  • 鍵のかかっていないPEMファイル
  • 二重譲渡などがされていない安全なPEMファイル

/login

  • ログインURL

/logout

  • ログアウトURL

今後の予定

カスタムコマンドを作成して複数端末に同時に送信できるようにするなどの対応

最後に

クソコード実装なのでなにかあればIssue, PR等作成していただければと思います。
/send に関しては一度中身を見直したほうが良いのかなと言った印象。