2013-08-12 17 views
5

In base ai documenti Apple, è possibile identificare il tocco dell'utente sulla notifica controllando se la variabile di stato dell'applicazione è inattiva (link).Rilevamento del tocco dell'utente sulla notifica

iOS Nota: In iOS, è possibile determinare se un'applicazione è lanciato a seguito del l'utente toccando il pulsante azione o se il notifica è stata consegnata l'applicazione già in esecuzione dal esaminando lo stato dell'applicazione . Nell'implementazione del delegato di l'applicazione: didReceiveRemoteNotification: o application: didReceiveLocalNotification: metodo, ottenere il valore della proprietà applicationState e valutarlo. Se il valore è UIApplicationStateInactive, l'utente ha toccato il pulsante di azione; se il valore è UIApplicationStateActive, l'applicazione era in primo piano quando ha ricevuto la notifica.

ma posso vedere un caso d'uso in cui v'è un sistema di allarme (da Alert sistema, voglio dire una vista avviso presentato in primo piano dell'app che è controllata da iOS) in primo piano e l'applicazione è in inattiva stato (Quando viene visualizzato un "avviso di sistema", l'app dietro viene disattivata da iOS impostando l'app application state su UIApplicationStateInactive) ma l'utente sarà comunque in grado di vedere il contenuto dell'app sullo schermo. Consultare l'allegato qui sotto:

enter image description here

A questo stato, se l'applicazione riceve una notifica, si comporterà come se utente premuto su di notifica. C'è una soluzione per risolvere questo caso d'uso?

+1

Abbastanza confuso. Cosa intendi esattamente per "avviso di sistema in primo piano e l'app è in stato inattivo"? –

+0

@HinataHyuga Nello screenshot ho un esempio di un avviso di sistema (avviso di notifica sull'app gmail) che è controllato da iOS e non dall'app dietro. A questo punto, l'app viene trattata da iOS in quanto è in stato inattivo (l'applicationstatus dell'app verrà impostato su inattivo). – Shashank

+0

ogni volta 'applicazione: didReceiveLocalNotification:' chiamata di metodo quando hai ricevuto la notifica. – iPatel

risposta

5
- (void)application:(UIApplication*)application didReceiveRemoteNotification: 
(NSDictionary*)userInfo 
{ 
     UIApplicationState state = [application applicationState]; 
     if (state == UIApplicationStateActive) 
     { 
       //When your app was active and it got push notification 
     } 
     else if (state == UIApplicationStateInactive) 
     { 
       //When your app was in background and it got push notification 
     } 
} 

e didFinishLaunchingWithOptions saranno chiamati quando l'applicazione non è in esecuzione e lancio è stato cliccato nella notifica.

Come si visualizzerà alertview in didReceiveRemoteNotification, è possibile identificare toccare nel metodo delegato della alertview, ad esempio - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex.

+0

Questo capisco. Voglio un controllo affidabile che l'utente tocchi la notifica anche quando l'utente si trova nello stato come mostrato nello screenshot. – Shashank

+1

Non è corretto. Questo metodo è chiamato solo quando l'app è in esecuzione."Se l'app non è in esecuzione quando arriva una notifica push, il metodo avvia l'app e fornisce le informazioni appropriate nel dizionario delle opzioni di avvio.L'app non chiama questo metodo per gestire la notifica push." – nerowolfe

+0

Come mostrato nella schermata - questo avviso viene mostrato dal codice, non è un avviso di sistema sulla notifica. – nerowolfe

0

risolvessero questo problema in ios10, quando il metodo add:

userNotificationCenter willPresentNotification. 

questo sarà chiamato solo quando l'applicazione è in forground/stato attivo, e verrà visualizzata la notifica solo dopo che l'utente respingere l'altro sistema di allarme .

+0

Penso invece che cosa intendevi dire ['opzionale func userNotificationCenter (_ center: UNUserNotificationCenter, didRicevimento risposta: UNNotificationResponse, withCompletionHandler completionHandler: @escaping() -> Void)'] (https://developer.apple.com/ documentazione/usernotifications/unusernotificationcenterdelegate/1649501-usernotificationcenter). <- Questo metodo cattura effettivamente la risposta, ovvero il tocco. Il 'willPresentNotification' è solo quando l'app è in ** foreground ** ... e quando sei in primo piano basta mostrare un avviso ed elaborarlo da solo. – Honey

Problemi correlati