이 기사에서는 주로 APN 형식, FCM 메시지 푸시 및 백엔드 서비스가 메시지 푸시를 통합 할 때 발생하는 몇 가지 문제를 기록합니다. 사용되는 환경은 Node.js + AWS SNS입니다.
AWS SNS는 AWS 메시지 관리 서비스입니다.이 기사에서는 주로이를 사용하여 다중 플랫폼 메시지 푸시를 생성합니다. APN (iOS), FCM (Android) 등과 같은 SNS를 통해 여러 플랫폼에 메시지를 보낼 수 있습니다. 기사의 메시지 푸시는 다음 Node.js 코드 (Typescript)로 간단하게 수행 할 수 있습니다.
import {
SNS } from 'aws-sdk';
const sns = new SNS({
accessKeyId: '***',
secretAccessKey: '***',
region: '***',
});
const params = {
// 发送消息提醒到topic则需要填写此项,本文中主要是发送到topic
TopicArn: '',
// 发送消息提醒到指定终端则填写此项而非TopicArn
// TargetArn: '',
// 消息推送内容的类型,值为json
MessageStructure: 'json'
// 消息提醒的内容
Message: JSON.stringify({
// 若发送至topic,必须包含default,其代表发送至未被指定的平台的内容
default: '默认消息',
// 为指定平台发送数据时,必须为JSON键值对字符串
APNS: JSON.stringify({
aps: {
alert: {
title: '你好,iOS',
body: '这是提醒内容',
},
},
data: {
customId: '123',
}
}),
GCM: JSON.stringify({
notification: {
title: '你好,Android',
body: '这是提醒内容',
},
data: {
customId: '123',
}
}),
}),
}
sns.publish(params);
메시지가 전송 된 후 주제를 구독 한 프로덕션 환경의 iOS 터미널은 제목이라는 '你好,iOS'
메시지 알림을 수신 '你好,Android'
하고 Android 터미널은 메시지 알림 을 수신 하며 다른 터미널 (예 : iOS 개발 환경 또는 브라우저)은 수신합니다. 그것 '默认消息'
.
APN 데이터 형식 (iOS)
APNs (Apple Push Notification 서비스)는 Apple 단말 장치에 대한 알림을 푸시하는 서비스입니다. 먼저 APN이 푸시 한 콘텐츠의 예를 살펴 보겠습니다.
{
"aps": {
"alert": {
"title": "",
"body": "",
}
},
// other custom data...
"data": {
"customId": ""
}
}
이 중 aps
Apple에서 정의한 일부 push 설정을 의미 하며, 값 aps
은 일부 키-값 쌍 설명을 참조하십시오 .
또한 aps
예를 들어 사용자 지정 콘텐츠를 추가 할 수도 있습니다 customId
.
aps
필드 설명
이름 | 유형 | 기술 |
---|---|---|
alert |
사전 또는 문자열 | 푸시 배너에 표시되는 내용은 문자열 인 경우 문자열의 값을 직접 표시하고 사전 인 경우 아래 표를 참조하십시오. |
badge |
수치 | 앱 태그 (배지)로 표시되는 숫자, 0이면 태그가 표시되지 않습니다. |
sound |
문자열 또는 사전 | 푸시를 수락 할 때 알림 default 음, 기본값은 입니다. 더 많은 푸시 사운드는 UNNotificationSound 를 참조하십시오. |
thread-id |
끈 | 다양한 유형의 메시지 미리 알림을 그룹화하는 데 사용됩니다. |
category |
끈 | 메시지 알림 유형은 실행 가능한 알림 유형 선언을 참조하십시오. |
content-available |
수치 | 그 값은 1이고 포함되지 않습니다 alert , badge 그리고 sound 신속하게 메시지 알림이 배경 알림을 나타냅니다 |
mutable-content |
수치 | 값이 1 인 경우 앱에서 먼저 메시지 푸시를 처리해야합니다 . 새로 전송 된 알림에서 콘텐츠 수정을 참조하세요. |
target-content-id |
끈 | 열린 창의 식별자 |
자세한 내용은 페이로드 키 참조 표 1을 참조aps
하십시오 .
alert
일반적으로 사용되는 일부 필드에 대한 설명
이름 | 유형 | 기술 |
---|---|---|
title |
끈 | 메시지 알림의 기본 제목 |
subtitle |
끈 | 푸시의 목적을 설명하는 추가 정보를 나타내는 데 사용되는 메시지 알림의 부제 |
body |
끈 | 메시지 알림의 주요 내용 |
launch-image |
끈 | 사용자가 메시지 알림을 클릭하여 앱을 열 때 표시되는 이미지를 나타냅니다. |
또한, alert
일부 필드는 정의 loc-key
, loc-args
현지화 관련 등. 당신이 그것을 사용해야하는 경우, 문서를 참조하십시오. 자세한 내용은 페이로드 키 참조 표 2alert
를 참조하십시오 .
FCM 데이터 형식
FCM (Firebase 클라우드 메시징)은 교차 플랫폼 메시징 솔루션입니다. 2018 년부터 Google은 GCM (Google 클라우드 메시징)을 FCM으로 대체했습니다. 마찬가지로 FCM의 푸시 콘텐츠 예를 살펴 보겠습니다.
{
"notification": {
"title": "",
"body": "",
},
"data": {
"customId": ""
//
}
}
그중 notification
일부는 시스템에서 사용하는 미리 정의 된 필드이고 포함 된 필드는 notification
일부 공통 필드를 참조 할 수 있습니다 . data
일부는 예제에서와 같이 사용자 정의 필드 {"customId": ""}
입니다.
notification
몇 가지 일반적인 분야
이름 | 유형 | 기술 |
---|---|---|
title |
끈 | 메시지 알림 제목 |
body |
끈 | 메시지 알림의 주요 내용 |
icon |
끈 | 메시지 알림의 아이콘, 기본값은 매니페스트에 정의 된 앱 아이콘입니다. |
sound |
끈 | 메시지 미리 알림에서 재생되는 소리입니다. 기본값은default |
notification_count |
수치 | 메시지 알림의 레이블 번호 설정 |
visibility |
부울 값 | 메시지 알림 표시 여부 |
image |
끈 | 메시지 알림에 표시된 사진 |
더 많은 FCM 필드는 AndroidNotification-Firebase 를 참조하세요 .
데이터를 얻을 수 없습니다.
개발 환경과 프로덕션 환경을 정확하게 구분
일부 플랫폼은 차별화 될 필요가 아이폰 OS 푸시있는 APN과 같은 푸시 푸시, 서로 다른 환경을 구별해야 할 APNS
뿐만 아니라 APNS_SANDBOX
. AWS SNS를 사용하여 Topic 메시지를 생성 할 때 잘못된 환경을 사용하는 경우 단말기가 수신하는 데이터는 default
중간 정보 일 수 있습니다 . 예를 들어, 개발 환경에 메시지를 보내는 위의 테스트 코드에서 터미널이 수신 한 데이터는 다음과 같을 수 있습니다.
{
"aps": {
"alert": "默认消息"
}
}
SNS를 사용하여 페이로드를 문자열로 변환
SNS를 사용하여 메시지 푸시를 생성 할 때 각 페이로드 데이터를 먼저 문자열 형식으로 변환해야합니다. 그렇지 않으면 샘플 코드에서와 같이 올바른 푸시 콘텐츠가 수신되지 않을 수 있습니다 APNS: JSON.stringify({})
.