Railsアプリケーションからプッシュ通知を送信する方法

モバイルアプリケーションをサーバーと通信する最も一般的な方法の1つは、プッシュ通知をユーザーに送信することです。 プッシュ通知の実装にすでに直面している場合、アメリカの発見はあなたのために起こりませんが、このトピックの新規参入者は苦労しています-これは情報の大きな混乱のためです(翻訳者から:本当に多くの矛盾し、しばしば完全に役に立たない情報があります) 。 WellWithMeに関するこの記事の執筆に至ったのはこの混乱でした。そこで、プッシュ通知のサーバー側の開発について説明します。







続行する前に、プッシュ通知を提供するプラグアンドプレイサービス( ParsemobDBPushwooshUrban Airshipなど)について警告する必要がありますが、これは戦士のやり方ではありません。 ゼロから(そして無料で)自分でやってみましょう(実際にはゼロからではありませんが、誰も支払う必要はありません)



最初からアップルパイを作りたい場合は、まず宇宙を作成します
カールサガン



プッシュ通知配信システムで重要な役割を果たす3つのコンポーネントを次に示します。





まず、ユーザーにプッシュ通知(ゴールデンワード)を受信するかどうかを確認し、同意する場合はデバイストークンを送信する必要があります(翻訳方法はわかりませんが、誰もがデバイストークンを理解すると思います) 。 それら(デバイストークン)を単純な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の指示に従ってください。



これで、簡単に拡張可能なプッシュ通知システムができました。 プッシュ通知はユーザー数を増やすのに役立ちますが、悪用しないでください。そうしないと逆の効果が発生します

そして、翻訳者は、R​​edisを投げてWindows Phoneを追加するだけで、ほとんど同じように松葉杖を書きます。



All Articles