iOS 11 베타 2에서 자동 알림이 application:didReceiveRemoteNotification:fetchCompletionHandler
앱의 상태 (배경 / 전경)에 관계없이 전달되지 않는 것으로 나타났습니다 .
UIApplicationDelegete
방법을 구현하고 application:didReceiveRemoteNotification:fetchCompletionHandler
다음 자동 푸시를 보냅니다.
{
"aps": {
"content-available": 1
},
"mydata": {
"foo": "bar"
}
}
iOS 11에서는 delegate 메소드가 호출되지 않습니다.
그것은 다른 버전의 iOS에서 잘 작동하며 문서 섹션 자동 알림 구성은 다른 작업을 언급하지 않습니다.
iOS 11의 버그입니까, 아니면 iOS 11의 새로운 점이 누락 되었습니까?
나는 UserNotification
자동 푸시를 보내는 데 필요하지 않은 프레임 워크 에 대해 이야기하거나 사용 하지 않습니다.
다음은 문제를 보여주는 샘플 프로젝트 입니다 (자신의 번들 ID를 설정해야합니다)
샘플 프로젝트를 점심 식사하고 위의 페이로드를 앱으로 보내면 macOS 콘솔을 사용하여 푸시가 장치에는 제대로 전달되지만 앱에는 제대로 전달되지 않는지 확인할 수 있습니다.
업데이트 10.08
동작이 임의 인 것으로 보입니다. 때로는 장치를 다시 시작한 후 페이로드가 올바르게 전달되지만 잠시 후 작동이 중지됩니다.
다음 스크린 샷에서 볼 수 있듯이 1로 표시된 푸시는 장치에만 전달되고 푸시 2 (장치를 다시 시작한 후)도 앱으로 전달됩니다.
업데이트 14.08-iOS 11 Beta 6
여전히 같은 행동입니다. 작동하지만 작동하지 않는 또 다른 것은 다음과 같습니다. 응용 프로그램 구성표가 "실행 파일 실행 대기"로 설정되어 있으면 자동 푸시는 응용 프로그램을 깨우고 백그라운드에서 시작해야합니다.
업데이트 21.08-iOS 11 베타 7
버그 리포트에서 여전히 Apple과 동일한 동작을하고 업데이트하지는 않습니다.
업데이트 29.08-iOS 11 베타 8
여전히 같은 문제입니다. 지금 사용하는 재현 단계는 다음과 같습니다.
- Xcode 프로젝트 구성표에서 "실행 파일 실행 대기"를 선택하십시오.
- 에 중단 점 추가
didReceiveRemoteNotification: fetchCompletionHandler
- 기기에서 앱을 시작합니다
- 위의 자동 푸시 보내기
예상 : 앱이 일시 중단 된 상태에서 백그라운드로 가져와 didReceiveRemoteNotification: fetchCompletionHandler
호출 됨
실제 : 아무 일도 일어나지 않습니다
업데이트 06.09-iOS 11 베타 10
나는 여전히 같은 벌레 같은 행동을하고 있습니다. Apple의 티켓은 다음 답변으로 업데이트되었습니다.
Apple 개발자 관계 2017 년 9 월 6 일 오후 10시 42 분 엔지니어링은이 문제와 관련하여 다음과 같은 피드백을 제공했습니다.
샘플 앱을 실행하고 동작을 테스트 할 수있었습니다. 설명 된대로이를 테스트 할 때 아무런 문제도 발견되지 않았습니다.
푸시가 백그라운드에서 실행될 때 앱에 도달한다고 보장 할 수 없으며 여기에있는 로그는 앱이 앱을 실행하는 데 충분히 사용되고 있다고 생각하지 않음을 나타냅니다.
우리는 상황이 좋은 때에 때때로 푸시를 제공하는 것을 보았습니다.
우리는 이것이 올바르게 동작한다고 생각합니다.
11.09 업데이트
내 애플 버그 보고서의 중복으로 폐쇄 및 표시되었다 33278611
되는 열려
업데이트 13.09-iOS 11 GM
kam800의 의견 (아래 참조) 덕분에 나는 더 많은 테스트를 수행했으며 그 관찰 결과를 얻었습니다.
iOS 11 dasd DuetActivitySchedulerDaemon
에는 데이터 푸시를 완전히 삭제하거나 데이터 푸시 전송을 지연 시키는 새로운 데몬이있는 것 같습니다 .
배송이 연기 됨
콘솔 로그
default 13:11:47.177547 +0200 dasd DuetActivitySchedulerDaemon CANCELED: com.apple.pushLaunch.net.tequilaapps.daylight:C03A65 <private>! lifecycle com.apple.duetactivityscheduler
default 13:11:47.178186 +0200 dasd DuetActivitySchedulerDaemon Removing a launch request for application <private> by activity <private> default com.apple.duetactivityscheduler
default 12:49:04.426256 +0200 dasd DuetActivitySchedulerDaemon Advancing start date for <private> by 6.5 minutes to Wed Sep 13 12:55:31 2017 default com.apple.duetactivityscheduler
default 13:21:40.593012 +0200 dasd DuetActivitySchedulerDaemon Activity <private>: Optimal Score 0.6144 at <private> (Valid Until: <private>) scoring com.apple.duetactivityscheduler
default 13:21:40.594528 +0200 dasd DuetActivitySchedulerDaemon Setting timer (isWaking=1, activityRequiresWaking=0) between <private> and <private> for <private> default com.apple.duetactivityscheduler
연기 된 배송 문제
- 데이터 푸시 전송이 연기되고 앱이 시작되면 데이터 푸시는 배달 날짜에 도달 한 경우에만 전달 되며, 앞으로 몇 분이 걸릴 수 있습니다 . 이것은 데이터 푸시를 사용하여 새로운 앱의 콘텐츠를 다음 출시에 대비할 수 있도록하는 목적을 완전히 상실합니다. 나는 애플 문서를 다시 한 번 인용한다.
"자동 알림은 앱이 실행 중이 아닌 경우에도 앱을 최신 상태로 유지하여 사용자 환경을 개선합니다."
- 때 두 데이터 푸시가 일시 중단 된 응용 프로그램으로 전송됩니다 그들은 아이폰 OS (11) 대신에 직접 응용 프로그램을 깨어으로 연기된다. 전달 시간에 도달 하면 마지막 데이터 푸시 만 전달됩니다! 이전 푸시는 손실되고 대리자 메소드를 통해 전달되지 않아 데이터가 손실됩니다.
배송 취소
콘솔 로그
default 13:35:05.347078 +0200 dasd DuetActivitySchedulerDaemon com.apple.pushLaunch.net.tequilaapps.daylight:C03A65:[
{name: ApplicationPolicy, policyWeight: 50.000, response: {Decision: Must Not Proceed, Score: 0.00}}
], FinalDecision: Must Not Proceed} scoring com.apple.duetactivityscheduler
취소 된 배송 문제
이 경우 데이터 푸시가 완전히 손실되고 iOS 11에서 제대로 전달되는 동안 iOS 11에서는 전달되지 않습니다.
업데이트 19.09-iOS 11 GM
또한 응용 프로그램이 포 그라운드에 있고 알림이 앱에 전달되지 않으면 콘솔에 다음 로그가 표시됩니다.
default 08:28:49.354824 +0200 apsd apsd <private>: Received message for enabled topic '<private>' onInterface: NonCellular with payload '<private>' with priority 10 for device token: NO courier-oversized com.apple.apsd
fault 08:33:18.128209 +0200 dasd Foundation <NSXPCConnection: 0x151eee460> connection from pid 55: Exception caught during decoding of received message, dropping incoming message.
Exception: Exception while decoding argument 0 (#2 of invocation):
Exception: value for key 'NS.objects' was of unexpected class 'NSNull'. Allowed classes are '{(
NSArray,
NSData,
NSString,
NSNumber,
NSDictionary,
NSUUID,
_DASActivity,
NSSet,
_DASFileProtection,
NSDate,
NWParameters,
NWEndpoint
)}'. general com.apple.foundation.xpc
"content-available": 1
앱이 포 그라운드에 있으면 콜백이 시작되지 않습니다.