続行する前に、プッシュ通知を提供するプラグアンドプレイサービス( Parse 、 mobDB 、 Pushwoosh 、 Urban Airshipなど)について警告する必要がありますが、これは戦士のやり方ではありません。 ゼロから(そして無料で)自分でやってみましょう(実際にはゼロからではありませんが、誰も支払う必要はありません) 。
最初からアップルパイを作りたい場合は、まず宇宙を作成しますカールサガン
プッシュ通知配信システムで重要な役割を果たす3つのコンポーネントを次に示します。
- モバイルデバイスのトークンを受信するためのAPIメソッド
- ワーカー-Apple / Googleサーバーに常時接続し、Redisのキューを監視します
- 実際には、メッセージをキューに送信するコード
まず、ユーザーにプッシュ通知(ゴールデンワード)を受信するかどうかを確認し、同意する場合はデバイストークンを送信する必要があります(翻訳方法はわかりませんが、誰もがデバイストークンを理解すると思います) 。 それら(デバイストークン)を単純なActiveRecordモデルに保存します。これをDeviceと呼びます
# Schema Information # Table name: devices # id :integer not null, primary key # user_id :integer # token :string(255) # enabled :boolean default(TRUE) # created_at :datetime not null # updated_at :datetime not null # platform :string(255) class Device < ActiveRecord::Base attr_accessible :enabled, :token, :user, :platform belongs_to :user validates_uniqueness_of :token, :scope => :user_id end
アプリケーションが適切なAPIメソッドを呼び出すときに、デバイスインスタンス(データベースへの書き込み)を作成する必要があります
resource :devices do post do @device = Device.create(user: current_user, token: params[:token], platform: params[:platform]) present @device, with: WellWithMe::Entities::Device end end
Redisの通知モデルをキューとして使用する
class NotificationSender @queue = :notifications def self.perform @list = Redis::List.new(Notification.key_name) while notification = @list.pop do notification_json = JSON.parse(notification) if notification_json['platform'] == 'iOS' note = Grocer::Notification.new( device_token: notification_json['token'], alert: notification_json['message'], sound: 'default', badge: 0 ) PUSHER.push(note) elsif notification_json['platform'] == 'Android' gcm = GCM.new(ENV['gcm_key']) registration_id = [notification_json['token']] options = { 'data' => { 'message' => notification_json['message'] }, 'collapse_key' => 'updated_state' } response = gcm.send_notification(registration_id, options) end end end end
NotificationSenderは、各プッシュ通知を送信するための新しい接続を確立しようとせずに、サーバーへの接続を常に維持しながらキューからタスクを読み取ります。これは、Appleが積極的に防止しています。プッシュ通知サーバーへの接続に関するAppleの注意
このコードは毎分実行され、Redis通知キューを確認し、プッシュ通知をデバイスに送信します。
iOS用の素晴らしい食料品ジャムとAndroid用のGCMが使用されました。 どちらのジャムも非常にうまく機能し、文書化されています。 唯一の制限は、iOS用の証明書を作成して正しくエクスポートする必要があることです。Appleの指示に従ってください。
これで、簡単に拡張可能なプッシュ通知システムができました。 プッシュ通知はユーザー数を増やすのに役立ちますが、悪用しないでください。そうしないと逆の効果が発生します
そして、翻訳者は、Redisを投げてWindows Phoneを追加するだけで、ほとんど同じように松葉杖を書きます。