[WWDC20] The Push


푸시 알림이 무엇인지, 왜 사용되는지, 앱에 추가하는 방법을 설명하는 동영상 모음입니다!

푸시 알림 소개

푸시 알림 기능

  • 참여: 앱이 푸시 알림을 통해 상호 작용하도록 허용합니다.

  • 업데이트 제공: 앱에 실시간 업데이트를 제공하는 기능을 제공합니다.

  • 동적 경험: 앱 내에서 변경 사항이 있을 때 동적 경험을 제공할 수 있습니다.

푸시 알림을 추가하면 어떤 이점이 있습니까?

  1. 전경이 필요하지 않음: 앱이 항상 전경에 있을 필요는 없습니다.

    푸시 알림은 앱 상태와 관계없이 전달되며 필요할 때 트리거됩니다.

  2. 에너지 효율: 푸시 알림은 에너지를 많이 사용하지 않습니다.

  3. Best Engagement : 고객과 소통하기 좋은 창구

푸시 알림에는 두 가지 유형이 있습니다.

  1. 경고 알림: 시각적으로 표시되는 일반 푸시 알림으로 사용자 지정 및 상호 작용할 수 있는 값을 사용자 지정할 수 있습니다.

  2. 백그라운드 알림: 콘텐츠를 최신 상태로 유지하기 위해 포그라운드에 있지 않은 경우에도 앱이 런타임 알림을 수신하도록 허용합니다.

알람 알림


  • 가시적 알림: 앱의 변경 사항에 대한 가시적인 알림을 제공할 수 있습니다.

  • Show new information and be interactive: 상호작용할 새로운 정보를 제공하는 데 사용해야 합니다.

    전 메시지
  • 전경 또는 배경: 앱이 실행 중일 필요가 없으며 앱 상태와 상관없이 표시될 수 있습니다.

  • 사용자 지정 가능: 푸시 알림의 모양이나 푸시 알림이 사용자와 상호 작용하는 방식을 사용자 지정할 수 있습니다.

경고 알림 구현


1. 원격 알림에 가입

가장 먼저 해야 할 일은 원격 알림을 등록하는 것입니다.

위의 방법은 APN(Apple 푸시 알림 시스템)에 장치를 등록하고 장치 토큰을 앱에 반환합니다.

푸시 토큰은 장치를 식별하는 데 사용되며 푸시 대상을 지정하는 값으로 사용됩니다.

2. AppDelegate를 UNUserNotificationCenterDelegate로 선언합니다.

위의 코드에서 AppDelegate는 UNUserNotificationCenter의 대리자가 AppDelegate에서 self라는 이름으로 지정되었기 때문에 UNUserNotificationCenterDelegate를 허용한다고 선언해야 합니다.

델리게이트로 지정한 후 푸시를 누르면 앱에 알릴 수 있습니다.

3. 등록 콜백 구현


registerForRemoteNotifications 메서드를 호출하면 위에서 언급한 두 메서드 중 하나에 대한 콜백을 받게 됩니다.

오류가 발생하면 오류 원인과 함께 위의 메서드가 호출되고 성공하면 다음 메서드가 호출됩니다.

성공적으로 토큰을 받은 경우 장치에 푸시 알림을 보낼 수 있도록 백엔드 푸시 서버로 토큰을 보내야 합니다.

APN은 장치 토큰을 데이터 객체로 앱에 전달하므로 문자열로 변환하여 서버로 보냅니다.

데이터 형식을 16진수 문자열로 변환하고 결합하여 URLQuery에 추가하여 서버로 보내는 코드입니다.

데이터베이스에 푸시를 보내기 위해 장치 토큰을 저장하는 논리는 서버에서 실행할 수 있습니다.

4. 알림 권한 요청


장치가 푸시 알림을 받으려면 먼저 알림을 볼 수 있는 권한을 요청해야 합니다.

requestAuthorization 메서드를 호출하면 경고 창이 나타납니다.

사용자가 수락하거나 거부한 결과는 완료 핸들러로 전송되고 장치 설정에 반영됩니다.

해당 메소드를 계속해서 호출하면 창이 뜨지 않는다.

알람, 소리, 뱃지 등의 권한은 requestAuthorization 메소드의 옵션으로 요청할 수 있습니다.

예시 페이로드


다음은 새로운 Avocado Bacon Burger를 알리는 푸시 알림의 페이로드입니다.


  • aps 사전: 장치에 대한 푸시 알림 렌더링에 대한 정보가 포함되어 있습니다.

    • 경고 사전: 푸시 알림에 표시할 제목과 텍스트를 포함합니다.

    • 소리 : 선택 사항으로 푸시 알림 수신 시 소리를 재생하기 위해 포함되어야 합니다.

      기본값으로 작성하면 기본 사운드가 재생됩니다.

    • 배지 : 앱 아이콘에 표시되는 값입니다.

      푸시 알림을 눌렀을 때 배지가 사라지게 하려면 코드를 통해 0으로 설정해야 합니다.

  • 사용자 정의 데이터는 aps 필드 외부로 전달될 수 있습니다.

  • 페이로드 키는 아래 링크에서 찾을 수 있습니다.

알림 페이로드를 처리하는 방법


푸시 알림이 열릴 때마다 userNotificationCenterDelegate 메서드가 호출됩니다.

  • 앱에 전달되는 페이로드는 경고 콘텐츠의 userInfo 속성에서 추출할 수 있습니다.

  • userInfo 데이터에 대한 작업을 수행한 후 completionHandler를 호출하거나 데이터가 없는 경우에도 completionHandler를 호출하여 푸시 알림이 열렸음을 시스템에 알려야 합니다.


배경 알림


  • 백그라운드에서 데이터 가져오기: 푸시 알림을 받으면 백그라운드에서 데이터를 가져올 수 있습니다.

  • 최신 상태로 유지: 앱을 실행하지 않고 최신 상태로 유지하는 데 사용해야 합니다.

  • 요청 시 시작됨: 시스템은 앱을 시작하고 백그라운드 업데이트를 실행하는 데 필요한 런타임을 제공합니다.

  • 시스템 관리: 너무 많은 백그라운드 작업이 제한되고 다음과 같은 제한이 있는 경우 백그라운드 업데이트가 수행되지 않을 수 있습니다.

    B. 약한 배터리.

백그라운드 푸시도 APN에 장치 토큰 등록이 필요합니다.

백엔드 서버로 토큰을 보내는 것은 동일합니다.

그러나 Appdelegate를 UNUserNotificationCenterDelegate로 설정하거나 UNUserNotificationCenter에 할당할 필요는 없습니다.

UNUserNotificationCenterDelegate는 경고 푸시를 처리할 때만 사용됩니다.

백그라운드 알림 페이로드


Content-Available 필드는 유일한 필수 필드입니다.

필드가 백그라운드 알림이며 업데이트하려면 앱을 시작해야 한다고 시스템에 알립니다.

마찬가지로 aps 필드 이외의 사용자 정의 필드를 추가할 수 있습니다.

백그라운드 푸시 처리


푸시 알림이 수신되면 application(didReceiveRemoteNotification) 메서드가 호출됩니다.

Alert-Push와 달리 “completionHandler”에는 하나의 매개변수가 있습니다.

백그라운드 새로 고침이 실패했는지, 데이터가 수신되지 않았는지 또는 새 데이터가 수신되었는지를 시스템에 알리는 열거형 유형입니다.


  • URL 생성에 실패하더라도 CompletionHandler를 호출하여 백그라운드 새로 고침 실패를 보고합니다.

  • URL이 생성되고 데이터가 없으면 completionHandler를 통해 데이터 없음 완료를 알립니다.

  • URL을 빌드한 후 데이터가 정상이면 업데이트된 메뉴를 가져오고, 메뉴가 업데이트된 후에는 completionHandler에서 새 데이터를 가져왔다고 알려줍니다.

이제 푸시에 대한 모든 것을 할 수 있습니다.

개발자에게 가서 푸시 알림을 활성화하고 구현하십시오.