Bu konuyla ilgili çok sayıda stackoverflow iş parçacığı var, ancak yine de iyi bir çözüm bulamadım.
Uygulama arka planda değilse, kontrol edebilirim launchOptions[UIApplicationLaunchOptionsRemoteNotificationKey]
içinde application:didFinishLaunchingWithOptions:
bir bildirimden açılmış olup olmadığını görmek için çağrı.
Uygulama arka plandaysa, tüm gönderiler application:didReceiveRemoteNotification:
uygulamanın durumunu kullanmanızı ve kontrol etmenizi önerir . Ancak denediğim gibi (ve bu API'nin adından da anlaşılacağı gibi), bu yöntem, dokunulmak yerine bildirim alındığında çağrılıyor.
Yani sorun şu ki, uygulama başlatılırsa ve ardından arka planda çalışırsa ve sizden bir bildirim alındıysa application:didReceiveNotification
( application:didFinishLaunchWithOptions:
bu noktada tetiklenmez), kullanıcının bildirime dokunarak veya yalnızca simgesine dokunarak uygulamayı devam ettirip ettirmediğini nasıl anlarsınız? uygulama simgesi? Çünkü kullanıcı bildirime dokunduysa beklenti o bildirimde belirtilen sayfanın açılmasıdır. Aksi takdirde olmamalı.
handleActionWithIdentifier
Özel eylem bildirimleri için kullanabilirdim , ancak bu yalnızca özel bir eylem düğmesine dokunulduğunda tetikleniyor, kullanıcı bildirimin ana gövdesine dokunduğunda değil.
Teşekkürler.
DÜZENLE:
Aşağıdaki bir cevabı okuduktan sonra, bu şekilde sorumu netleştirebileceğimi düşündüm:
Bu 2 senaryoyu nasıl ayırt edebiliriz:
(A) 1. uygulama arka plana gider; 2. bildirim alındı; 3. kullanıcı bildirime dokunur; 4. uygulama ön plana giriyor
(B) 1. uygulama arka plana gider; 2. bildirim alındı; 3. kullanıcı bildirimi görmezden gelir ve daha sonra uygulama simgesine dokunur; 4. uygulama ön plana giriyor
Çünkü application:didReceiveRemoteNotification:
her iki durumda da 2. adımda tetiklenir.
Veya, application:didReceiveRemoteNotification:
yalnızca (A) için 3. adımda tetiklenmelidir, ancak uygulamamı bir şekilde yanlış yapılandırdım, bu yüzden 2. adımda görüyorum?