푸시 알림이 작동하고 앱이 포 그라운드로 전환 될 때 아이콘 배지 수를 업데이트했습니다.
나는 이것에 대해 약간 혼란 스럽습니다 … iPhone이 알림을 받고 팝업 메시지가 내 앱을 활성화하는 것처럼 보이며 배지는 앱을 시작한 후에 만 업데이트됩니다.
이것은 사용자 경험 측면에서 옳지 않은 것 같습니다. 내 이해는 배지 카운트는 증가 된 카운트를 통해 사용자에게 조치가 필요한 사항을 알려야한다는 것입니다. 그러나 이는 앱이 라이브 상태 인 이후 단계까지 발생하지 않습니다.
그렇다면 앱이 푸시 알림을 수신하고 백그라운드에있을 때 배지 수를 업데이트하도록 지시하는 방법이 있습니까?
내 앱은 위치를 사용하지 않으며 UIRemoteNotificationTypeBadge
알림 등록 요청에 있습니다.
건배 AF
답변
푸시 알림은 앱이 아닌 iOS에서 처리되므로 푸시 알림 수신시 애플리케이션 배지를 변경할 수 없습니다.
그러나 푸시 알림의 페이로드에 배지 번호를 보낼 수 있지만 계산 서버 측에서 수행해야합니다.
로컬 및 푸시 알림 프로그래밍 가이드 , 특히 알림 페이로드를 읽어야 합니다.
페이로드는 다음과 같습니다.
{
"aps" : {
"alert" : "You got your emails.",
"badge" : 9
}
}
이제 앱 애플리케이션 배지 아이콘에 9가 표시됩니다.
답변
푸시 알림 패키지 의 “badge” 매개 변수를 전송하여 백그라운드 상태에있을 때 배지 번호를 변경할 수 있습니다 . @rckoenes가 지적했듯이 JSON
배지 의 매개 변수는 INTEGER 여야합니다 .
동일한 작업을 수행하는 샘플 PHP 코드
// Create the payload body
$body['aps'] = array(
'alert' => $message,
'badge' => 1,
'sound' => 'default'
);
badge => 1
여기서 1은 문자열이 아닌 정수입니다 (예 : 아포스트로피 없음).
답변
실제로 iOS 10에서는 원격 알림이 didReceiveRemoteNotification
AppDelegate에서 자동으로 Method를 호출 합니다.
백그라운드에서 배지 수를 업데이트하는 두 가지 방법이 있습니다.
현재 앱에서도이 작업을 수행했습니다. 알림 서비스 확장도 필요하지 않습니다.
첫 번째 방법 :
페이로드와 함께 APS 배지 키를 APN에 보냅니다.
그러면 배지 페이로드의 정수 값에 따라 배지 수가 업데이트됩니다. 전의:
// Payload for remote Notification to APN
{
"aps": {
"content-available": 1,
"alert": "Hallo, this is a Test.",
"badge": 2, // This is your Int which will appear as badge number,
"sound": default
}
}
두 번째 방법 :
application.applicationState가에있을 때 application.applicationState를 전환하고 배지 Count를 업데이트 할 수 있습니다 .background
. 하지만 APN으로 전송할 때 알림 페이로드에 배지 키 매개 변수를 설정하지 않도록주의해야합니다.
// Payload to APN as silent push notification
{
"aps": {
"content-available": 1
}
}
애플리케이션 상태에 따라 배지 업데이트를 처리합니다.
다음은 APN 페이로드에서 배지 키없이 배지 카운트 업데이트를위한 작업 코드입니다.
func application(_ application: UIApplication, didReceiveRemoteNotification
userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
print("APN recieved")
// print(userInfo)
let state = application.applicationState
switch state {
case .inactive:
print("Inactive")
case .background:
print("Background")
// update badge count here
application.applicationIconBadgeNumber = application.applicationIconBadgeNumber + 1
case .active:
print("Active")
}
}
배지 수 재설정 :
앱이 활성 상태로 돌아갈 때 배지 수를 재설정하는 것을 잊지 마십시오.
func applicationDidBecomeActive(_ application: UIApplication) {
// reset badge count
application.applicationIconBadgeNumber = 0
}
답변
**This is the APNS payload get back from server.**
{
"aps" : {
"alert" : "You got your emails.",
"badge" : 9,
"sound" : "bingbong.aiff"
},
"acme1" : "bar",
"acme2" : 42
}
키 뱃지의 값은 자동으로 뱃지 개수로 간주되며 iOS 앱 측에서는 개수를 계산하거나 처리 할 필요가 없습니다. 위의 예에서 9는 배지 개수이므로 앱 아이콘에 9가 표시됩니다.
참고 앱이 닫혀있는 동안에는 배지를 직접 처리 할 수 없습니다. 따라서 우리는 APNS 페이로드의 배지 키를 사용하고 있습니다. 알림에 대한 자세한 설명은 문서를 참조하십시오.
직접 배지 수를 줄이려면 수를 줄이고 직접 업데이트하십시오.
답변
NotificationServiceExtension을 사용하는 경우 배지를 업데이트 할 수 있습니다.
var bestAttemptContent : UNMutableNotificationContent? //
bestAttemptContent.badge = 0//any no you wanna display
애플리케이션이 알림을받을 때마다 서비스 확장이 호출됩니다. 해당 값을 사용자 기본값에 저장하고 표시합니다. 애플리케이션과 확장간에 사용자 기본값을 공유하려면 애플리케이션에서 앱 그룹을 활성화해야합니다.
여기에서 더 많은 것을 읽으십시오
답변
iOS 10부터 앱에 대한 알림 서비스 확장을 개발할 수 있습니다. 알림을 받으면 시스템에서 시작되며 배지에 대한 유효한 번호를 계산하고 설정할 수 있습니다.
https://developer.apple.com/documentation/usernotifications/unnotificationserviceextension 문서를 살펴보십시오.
답변
Firebase 클라우드 메시징 (FCM)의 경우 다음과 같아야합니다.
{
"to": "some_token",
"notification": {
"body": "this is a body",
"title": "this is a title",
"badge" : 1
},
"priority": "high",
}