AWS SNS - Mobile Push Notification dùng Ruby on Rails
Bài đăng này đã không được cập nhật trong 3 năm
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)
All rights reserved