Memo

メモ > 技術 > サービス: AmazonSNS > 考察: 処理の流れについて

考察: 処理の流れについて
※ログインして使うアプリの設計メモ。 ※ユーザ情報のテーブルとデバイス情報のテーブルがある想定。 ※「ログインしなくても基本機能は使える」「プッシュ通知の送信を許可しなかった」も考慮する。 ※デバイストークンは非同期で取得されるので、 「アプリ起動時に端末情報を同期」と「アプリ起動時にデバイストークンを同期」の計2つのAPIが必要になる。 ■前提 起動時にアプリから実行するAPIは以下の2つ。 ただしプッシュ通知が許可されない(デバイストークンを取得できない)場合は前者のみ実行する。 アプリ起動時に端末情報を同期。(OSバージョンやアプリバージョンなど、デバイストークン以外の情報を同期。) /api/device/sync アプリ起動時にデバイストークンを同期。 /api/device/sync_token ■アプリ初回起動時 「アプリ起動時に端末情報を同期」を使用し、アプリからPHPに、OSバージョンやアプリバージョンなどを送る。 PHPがDBに、OSバージョンやアプリバージョンなどを記録する。さらに全端末でユニークな識別コードを作成し、合わせてDBに保存する。 PHPからアプリに、識別コードを返す。アプリはこの値を保存しておく。 プッシュ通知が許可されるとデバイストークンを取得できるようになる。 「アプリ起動時にデバイストークンを同期」を使用し、アプリからPHPに、識別コードとともにデバイストークンを送る。 PHPがAmazonSNSから、エンドポイントを取得する。 PHPがDBに、デバイストークンとエンドポイントを記録する。 PHPからアプリに、識別コードを返す(正常終了の判定などに使う。) ■アプリ次回起動時 「アプリ起動時に端末情報を同期」を使用し、アプリからPHPに、識別コードとともにOSバージョンやアプリバージョンなどを送る。 PHPがDBに、OSバージョンやアプリバージョンなどを記録する。(最新情報として上書き更新する。) プッシュ通知が許可されていればデバイストークンを取得できる。 「アプリ起動時にデバイストークンを同期」を使用し、アプリからPHPに、識別コードとともにデバイストークンを送る。 PHPがAmazonSNSから、エンドポイントを取得する。 PHPがDBに、デバイストークンとエンドポイントを記録する。(対象データは、識別コードをもとに判断する。) PHPからアプリに、識別コードを返す。(正常終了の判定などに使う。) ■プッシュ通知拒否時 アプリ初回起動時にプッシュ通知の送信を拒否した場合、デバイストークンの取得ができない。 この場合、「プッシュ通知が許可されていれば」の処理は行われないので、デバイストークンやエンドポイントは無いままで動作する。 ■端末ごとの設定 端末ごとの設定を持ちたければ devices のレコードに保存する。 必要に応じて、設定は端末内にもキャッシュとして保存しておく。(インターネットに繋がっていなくても設定内容を参照できるように。) ■ログイン時 アプリ内でユーザ名とパスワードを入力し、その値をPHPに送る。 認証情報が正しければ、データベーステーブルのデバイス情報をユーザ情報に紐付ける。 デバイス情報にはログイン中か否かのステータスも持たせておき、そのステータスをログイン中にする。 (厳密なログイン判定が不要なら、デバイス側に単純なログインフラグを持たせておくか。厳密なログイン判定が必要なら、ユーザ情報にも識別コードを持たせてそれをアプリ内に記録させ、アプリ起動時に毎回サーバ側でチェックするか。) 以降のログインは、アプリ内に保存されている識別コードをもとに行う。 ■別端末でログイン時 上とまったく同じ流れでデバイストークンやエンドポイントを記録する。 端末情報テーブルには、同じユーザIDのデータが別途作成される。 ■ログアウト時 アプリからPHPに、デバイストークンを投げてくる。 データベーステーブルのデバイス情報とユーザ情報の紐付けを解除する。 ログイン中か否かのステータスをログアウトにする。 ■ログアウトして別ユーザでログイン時 「ログアウト時」の手順でログアウトし、「ログイン時」の手順でログインする。 ■プッシュ通知送信時 PHPがAmazonSNSを使って、エンドポイントに対してプッシュ通知を送信する。 1ユーザが複数の端末を持っていれば、それぞれにプッシュ通知が送信される。 ■セッションタイムアウト時 デバイストークンはDBにあるので、それをもとにプッシュ通知は届き続ける。 アプリを立ち上げると、その時点でデバイストークンの更新処理が走る。 ※iOSアップデートのタイミングでデバイストークンが変わる可能性があるらしい。 デバイストークンが変わるタイミングは不定らしいので、デバイストークンがいつ変わっても大丈夫な仕組みにする必要がある。 iOS 9からAPNsデバイストークンがアプリインストールの度に変わるようになったようです - Qiita https://qiita.com/mono0926/items/9ef83c8b0de0e84118ac

Advertisement