AWS SNS - Mobile Push Notification dùng Ruby on Rails
SNS (Amazon Simple Notification) là một web service của amazon quản lý việc gửi notification tới các client. Giá AWS SNS có thể nó là rẻ nếu so sánh với các dịch vụ khác của Amazon. Sau đây mình sẽ giớ thiệu các bước cần thiết để sử dung AWS SNS. Config AWS SNS Để sử dụng được dịch vụ AWS SNS ...
SNS (Amazon Simple Notification) là một web service của amazon quản lý việc gửi notification tới các client. Giá AWS SNS có thể nó là rẻ nếu so sánh với các dịch vụ khác của Amazon. Sau đây mình sẽ giớ thiệu các bước cần thiết để sử dung AWS SNS.
Config AWS SNS
Để sử dụng được dịch vụ AWS SNS cái đầu tiền cần phải làm đó là config trên AWS Management Console. Sử dụng tài khỏan của Amazon để login to AWS Management Console. Bấm vào nút Get started sẽ hiển thị SNS dashboard. Chọn Create platform application , chỗ push notification platform chọn platform muốn push notification Kết nối với dịch vụ notification của Google hoặc Apple cần credential
- Android platform (Google cloud message) cần GCM API key từ google developer
- IOS platform (Apple production/ Appple development) cần generate IOS push certificate
Gửi notification từ Ruby
Trong project rails install gem aws-sdk để push notification. Sau đó add config trong file config/initializers/aws.rb
Aws.config[:credentials] = Aws::Credentials.new(ENV['AWS_ACCESS_KEY_ID'], ENV['AWS_SECRET_ACCESS_KEY']) Aws.config[:region] = ENV["AWS_REGION"]
Lấy AWS_REGION , AWS_ACCESS_KEY_ID và AWS_SECRET_ACCESS_KEY từ trong tài khỏan của amazon (username -> My Security Credentials -> Access keys (access key ID and secret access key)) Viết một service để gọi khi push notification
module Notify class AwsPusher attr_reader :device, :content def initialize device, content = {} @device = device @content = content end def push sns_client.publish(target_arn: endpoint_arn, message: message, message_structure: :json) if endpoint_arn end private def sns_client @sns_client ||= Aws::SNS::Client.new end def endpoint_arn sns_client.create_platform_endpoint( platform_application_arn: ENV["AWS_#{device.device_type}_ARN"], token: device.token).endpoint_arn end def message payload = { aps: { alert: content[:message], sound: "default" } } { APNS: payload.to_json, APNS_SANDBOX: payload.to_json }.to_json end end end
Khi push notification chỉ cần gọi
Notify::AwsPusher.new(device, content).push
- content là nội dung hiển thị trong notification của các device
- device là một object có token và device_type (token là của các device dùng để push notification do bên client generate ra)