1. Mở đầu

Push Notification là dịch vụ để thông báo ra màn hình điện thoại của ứng dụng được cài đặt trong nó.

Ví dụ như ứng dụng chat Facebook Messenger, khi có tin nhắn đến thì tin nhắn sẽ được thông báo ra màn hình home cho mình cho dù mình đang không mở ứng dụng. Tất nhiên nếu bạn cài đặt không hiển thị thông báo của ứng dụng trong điện thoại thì thông báo sẽ không được xuất hiện.

APNS (Apple Push Notification service) là dịch vụ tạo Push Notification của các ứng dụng chạy trên các thiết bị của Apple. Để thông báo có thể hiển thị được trên màn hình điện thoại thì phía server của ứng dụng (provider) phải gửi thông báo tới APNS và APNS sẽ gửi nó tới cho điện thoại.

Sơ đồ hoạt động sẽ như sau:

      APNS hoạt động thế nào

  • Đầu tiên bạn cần đăng ký APNS certificate trên https://developer.apple.com/account/ios/certificate
  • Trong code iOS ở một chức năng nào đó bạn muốn, gọi câu lệnh lấy device_token tới APNS serverdevice_token này là duy nhất cho mỗi ứng dụng (app) chay trên mỗi điện thoại.
  • APNS server sẽ trả device_token về cho app và app sẽ gửi device_token lên server phía backend (provider) để server lưu vào DB.
  • Phía server backend phải có SSL certificate và private key để có thể giao tiếp được với APNS server.
  • Khi cần gửi push notification tới ứng dụng trên điện thoại nào đó thì từ server backend gọi API tới APNS server cùng với params là device_token đại diện cho app trên điện thoại đó.
  • APNS server nhận được lời gọi từ server sẽ gửi push notification tới cho điện thoại tương ứng.

 

Nhưng khi sử dụng cùng với SNS aws thì bạn sẽ không gửi API tới APNS server nữa mà gửi tới SNS AWS. SNS sẽ đứng ở giữa và gửi API tương ứng tới APNS server. Điều này dẫn tới việc: để SNS AWS có thể giao tiếp được với APNS server thì SNS AWS cũng cần phải cài đặt SSL certificate và private key, lúc này phía server backend sẽ không cần SSL certificate và private key nữa vì nó không còn giao tiếp trực tiếp với APNS server.

                 Hoạt động của APNS và SNS AWS

 

2. Cách cấu hình

2.1. Đăng ký APNS certificate

Truy cập vào https://developer.apple.com/account/ios/certificate và đăng ký certificate.

Lưu ý: Chọn đúng team nếu tài khoản của bạn thuộc về nhiều team
  • Chọn loại certificate: Nếu là Development thì chọn Apple Push Notification service SSL (Sandbox), là Production thì chọn Apple Push Notification service SSL (Sandbox & Production).

                chọn loại iOS certificate

 

  • Chọn App ID tương ứng, nếu chưa có App ID bạn phải tạo App ID trước trong phần Identifiers -> App IDs.
  • Màn hình tiếp theo sẽ yêu cầu bạn tạo CSR trên máy tính của bạn và upload CSR lên đây.
  • Cách tạo CSR trên máy macOS:
    • Mở ứng dụng Keychain Access: chọn Keychain Access -> Certificate Assistant -> Request a Certificate From a Certificate Authority... Tạo CSR trong keychain access
    •  Điền email đăng nhập vào Apple Developer và chọn Saved to disk. Khi tạo xong CSR, trong Keychain Access sẽ xuất hiện private key và public key vừa được tạo.tạo CSR

 

  • Upload file vừa tạo lên Apple Developer:

           upload csr file

2.2. Tạo các khóa cần thiết để upload lên SNS

  • Download file .cer vừa tạo về máy, ví dụ mình lấy tên file là myapnsappcert.cer:

           download cer file từ apple developer

 

  • Convert file .cer thành file .pem, vào terminal và gõ lệnh:
  •  

    openssl x509 -in myapnsappcert.cer -inform DER -out myapnsappcert.pem
  •  
  • Export private key từ máy tính của bạn: ở ứng dụng Keychain Access chọn dòng là private key bạn vừa tạo phía trên, rồi chọn File -> Export Items... , nhập password tùy ý, ta đặt tên cho khóa này là p-myapnsappcert.p12 

           export private-key từ keychain access

 

  • Gõ lệnh sau trên terminal để convert private-key định dạng .p12 ở trên thành file định dạng .pem:
openssl pkcs12 -in p-myapnsappkey.p12 -out p-myapnsappkey.pem -nodes -clcerts

Bạn sẽ phải nhập password mà bạn đã đặt ở bước trên.

  • Kiểm tra xem khóa công khai (public-key) và khóa bí mật (private-key) đã tạo thành một cặp chính xác chưa bằng cách gõ lệnh:
openssl s_client -connect gateway.push.apple.com:2195 -cert myapnsappcert.pem -key p-myapnsapkey.pem

Chú ý ở trên ta tạo certificate cho môi trường production, nếu bạn tạo cho môi trường development thì phải đổi domain ở câu lệnh trên từ gateway.push.apple.com:2195 thành gateway.sandbox.push.apple.com:2195.

 

2.3. Upload các khóa lên SNS aws

  • Lên SNS aws, chọn Applications tab, chọn ứng dụng cần cấu hình -> Platform Application Actions -> Update credentials

          update credential apns trên sns

 

          update credentials apns trên sns

Choose p12 file: Chọn upload file p-myapnsappkey.p12 file khi download từ trang apple developer về.

Enter password: Nhập password bạn đã đặt khi export private-key ở bước trên.

Certificate: Mở file myapnsappcer.pem bằng bất cứ texteditor nào bạn muốn và copy tất cả nội dung file vào đây (chú ý là copy hết kể cả các dòng -----BEGIN CERTIFICATE----- và -----END CERTIFICATE----- trong đó)

Private: Tương tự như trên, copy tất cả nội dung của file p-myapnsapp.pem vào đây.

 

Phần còn lại bạn chỉ cần đăng ký device-token vào DB và lưu trữ device-token đó lên Endpoint trên SNS, rồi gọi API gửi push notification từ server tới SNS aws là được.

 

Link tham khảo:

https://stackoverflow.com/questions/17262511/how-do-ios-push-notifications-work

https://docs.aws.amazon.com/sns/latest/dg/mobile-push-apns.html