서버는 AWS SNS를 통해 메시지 푸시 레코드를 생성합니다.

이 기사에서는 주로 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": ""
  }
}

이 중 apsApple에서 정의한 일부 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({}).

참고

추천

출처blog.csdn.net/ghosind/article/details/109730581