İOS 11 beta 2'de, application:didReceiveRemoteNotification:fetchCompletionHandler
uygulamanın ne olursa olsun (arka plan / ön plan) sessiz bildirimlerin teslim edilmediğini fark ettim .
UIApplicationDelegete
Yöntemi uyguladım application:didReceiveRemoteNotification:fetchCompletionHandler
ve aşağıdaki sessiz push'u gönderdim
{
"aps": {
"content-available": 1
},
"mydata": {
"foo": "bar"
}
}
ancak temsilci yöntemi iOS 11'de çağrılmaz.
İOS'un diğer sürümlerinde ve Sessiz Bildirimi Yapılandırma dokümantasyon bölümünde iyi çalışır, başka bir şey yapılması gerektiğini belirtmez.
Bu iOS 11'de bir hata mı yoksa iOS 11'de yeni bir şey mi kaçırdım?
UserNotification
Sessiz itme göndermek için gerekli olmayan çerçeveden bahsetmediğimi veya kullanmadığımı lütfen unutmayın .
İşte sorunu gösteren örnek bir proje (kendi paket kimliğinizi ayarlamanız gerekecek)
Örnek projeyi öğle yemeğine eklediğinizde ve uygulamaya yukarıdaki yükü gönderdiğinizde, itme işleminin cihaza doğru bir şekilde teslim edildiğini ancak uygulamaya değil teslim edildiğini görmek için macOS konsolunu kullanabilirsiniz.
GÜNCELLEME 10.08
Davranışın rastgele olduğu anlaşılıyor. Bazen cihazı yeniden başlattıktan sonra, yük doğru bir şekilde teslim edilir, ancak bir süre sonra çalışmayı durdurur.
Aşağıdaki ekran görüntüsünde görebileceğiniz gibi, 1 olarak işaretlenen itme yalnızca cihaza teslim edilir ve itme 2 (cihaz yeniden başlatıldıktan sonra) da uygulamaya teslim edilir.
14.08 GÜNCELLEME - iOS 11 Beta 6
Hala aynı davranış. Çalışması gereken ama yapmayan bir başka şey de şudur. Uygulamanın şeması "Yürütülebilir dosyanın başlatılmasını bekle" olarak ayarlandığında, sessiz bir uygulamanın uygulamayı uyandırması ve arka planda başlatması gerekir.
GÜNCELLEME 21.08 - iOS 11 Beta 7
Yine aynı davranış ve hata raporunda Apple güncellemeleri değil.
GÜNCELLEME 29.08 - iOS 11 Beta 8
Yine de aynı sorun. Şimdi kullandığım çoğaltma adımları şunlardır:
- Xcode proje şemasında, "Yürütülebilir dosyanın başlatılmasını bekleyin" seçeneğini belirleyin.
- Bir kesme noktası ekleyin
didReceiveRemoteNotification: fetchCompletionHandler
- Uygulamayı cihazda başlat
- Yukarıdaki sessiz push'u gönder
Beklenen : Uygulama askıya alınmış durumdan arka plana getirilir ve didReceiveRemoteNotification: fetchCompletionHandler
denir
Gerçek : hiçbir şey olmuyor
GÜNCELLEME 06.09 - iOS 11 Beta 10
Hala aynı arabası davranışına sahibim. Apple'ın bileti aşağıdaki cevapla güncellendi:
Apple Geliştirici İlişkileri 6 Eylül 2017, 22:42 Mühendislik, bu sorunla ilgili aşağıdaki geri bildirimleri sağlamıştır:
Örnek uygulamayı çalıştırmayı ve davranışı test etmeyi başardık. Bunu açıklandığı gibi test ettiğimizde hiçbir sorun görmedik.
İtme işlemlerinin arka planda çalışırken uygulamaya ulaşması garanti edilmez ve buradaki günlükler, uygulamanın uygulamayı başlatmak için yeterince kullanıldığına inanmadığımızı gösterir.
Koşulların iyi olduğu zamanlarda zaman zaman baskılar yaptığımızı görüyoruz.
Bunun doğru davrandığına inanıyoruz.
Güncelleme 11.09
Apple hata raporum kapatıldı ve yinelenenleri 33278611
açık olarak işaretlendi
GÜNCELLEME 13.09 - iOS 11 GM
Kam800'ün yorumları sayesinde (aşağıya bakınız) daha fazla test yaptım ve bu gözlemleri buldum:
İOS 11'de dasd DuetActivitySchedulerDaemon
veri aktarımını tamamen ortadan kaldıran veya veri aktarımı dağıtımını geciktiren yeni bir arka plan programı var gibi görünüyor :
Teslimat ertelendi
Konsol Günlükleri
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
Ertelenen teslimat sorunları
- Veri aktarımı teslimi ertelendiğinde ve uygulama başlatıldığında, veri aktarımı yalnızca ileride birkaç dakika olabilen teslim tarihine ulaşıldığında teslim edilir . Bu, yeni uygulamanın içeriğini bir sonraki lansman için hazır tutmak için veri itme amacını tamamen ortadan kaldırır. Burada Apple'ın belgelerini bir kez daha teklif ediyorum:
"Sessiz bildirimler, uygulamanızı çalışmadığında bile güncel tutmanıza yardımcı olarak kullanıcı deneyimini geliştirir."
- Ne zaman iki veri iter bir askıya alınmış uygulama gönderilir onlar iOS 11 yerine doğrudan uygulama uyanma tarafından ertelendi. Teslim süresine ulaşıldığında, yalnızca son veri aktarımı gerçekleştirilir! Önceki itmeler kaybedilir ve veri kaybı ile sonuçlanan temsilci yöntemi aracılığıyla iletilmez.
Teslimat iptal edildi
Konsol Günlükleri
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
İptal edilen teslimat sorunları
Bu durumda, veri aktarımı tamamen kaybolur ve iOS 10'da doğru şekilde teslim edilirken asla iOS 11'de yayınlanmaz.
GÜNCELLEME 19.09 - iOS 11 GM
Ayrıca, uygulama ön planda olduğunda ve uygulamaya bildirilmediğinde, konsolda aşağıdaki günlükleri gördüğümü fark ettim:
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
ve uygulama ön plandaysa, geri arama tetiklenmez.