NguyenChanhTiep/Notes

Send APNs with cURL

Opened this issue · 1 comments

Sử dụng P12

Export file certificates p12

Trong máy phải cài đặt certificates bao gồm cả private key
Export .p12 với điền mật khẩu

Mở terminal tại folder chứa file cert vừa export và nhập theo format

curl -v \
-d '{PLAYLOAD}' \
--http2 \
--cert-type P12 --cert {TEN_FILE_CERT}.p12:{MAT_KHAU_FILE_CERT} \
https://api.sandbox.push.apple.com/3/device/{DEVICE_TOKEN} 
  • {PLAYLOAD}: nội dung payload của push
  • {TEN_FILE_CERT}: là tên file cert mình export
  • {MAT_KHAU_FILE_CERT}: là mật khẩu file cert mình export
  • {DEVICE_TOKEN}: là device token để gửi push

Ví dụ

curl -v \
-d '{"aps":{"alert":"hello"}}' \
--http2 \
--cert-type P12 --cert Certificates.p12:12345 \
https://api.sandbox.push.apple.com/3/device/d440ab865b5a249bf8990b12d6e2635d9d0178b9d52eb1152953765ad8a5a7b4

Sử dụng file PEM

Export file certificates .p12 và file .cer

Trong máy phải cài đặt certificates bao gồm cả private key
Export .p12 với private key (điền mật khẩu)
Export .cer không bao gồm private key (khi export sẽ không yêu cầu cấp mật khẩu).

Tạo file PEM

openssl x509 -in certificates.cer -inform der -out certificates_cer.pem
openssl pkcs12 -in certificates.p12 -out certificates_p12.pem
Ở bước này: sẽ nhập mật khẩu file p12, sau đó mật khẩu file pem.
cat certificates_cer.pem certificates_p12.pem > certificates.pem

Mở terminal tại folder chứa file cert vừa export và nhập theo format

curl -v \
-d '{PLAYLOAD}' \
--http2 \
--cert certificates.pem:{MAT_KHAU_FILE_PEM} \
https://api.sandbox.push.apple.com/3/device/{DEVICE_TOKEN} 
  • {PLAYLOAD}: nội dung payload của push
  • {MAT_KHAU_FILE_PEM}: chính là mật khẩu file pem lúc nãy
  • {DEVICE_TOKEN}: là device token

Ví dụ

curl -v \
-d '{"aps":{"alert":"hello"}}' \
--http2 \
--cert certificates.pem:12345 \
https://api.sandbox.push.apple.com/3/device/d440ab865b5a249bf8990b12d6e2635d9d0178b9d52eb1152953765ad8a5a7b4

Sử dụng P8

Yêu cầu

File p8
Team ID
Key ID

Generate JSON Web Token (JWT) with ES256 algorithm (Các ngôn ngữ Back End đều có hỗ trợ tạo JWT)
Có thể dùng thư viện viết bằng swift này để generate token: https://github.com/ethanhuang13/CupertinoJWT

Mở terminal và nhập theo format

curl -v \
-d '{PLAYLOAD}' \
-H "apns-topic: {BUNDLE_ID}.voip" \
-H "authorization: bearer {TOKEN}" \
--http2 \
https://api.sandbox.push.apple.com/3/device/{DEVICE_TOKEN} 
  • {PLAYLOAD}: nội dung payload của push
  • {BUNDLE_ID}: là bundle id của app
  • {TOKEN}: là JSON Web Token mình đã tạo ở trên
  • {DEVICE_TOKEN}: là device token nhận push

Ví dụ

curl -v \
-d '{"aps":{"alert":"hello"}}' \
-H "apns-topic: com.blaone.medinet.voip" \
-H "authorization: bearer eyJhbGciOiJFUzI1NiIsImtpZCI6IjNLOTdBNllVNTkifQ.eyJpc3MiOiI0VzhVTjRXUjRIIiwiaWF0IjoxNjUwOTgwOTAyLCJleHAiOjE2NTA5ODQ1MDJ9.SrJnl-dFMBTpWvAIVtns80Bl12S0SXiOSF1rJvoBrT8ljA6-MT3gyF9LAEnb0nujXBwrsI-OpewywVkvZkXpng" \
--http2 \
https://api.sandbox.push.apple.com/3/device/d440ab865b5a249bf8990b12d6e2635d9d0178b9d52eb1152953765ad8a5a7b4