[SWIFT] Notification Push / Clic sur une notification et données reçues
Bonjour tout le monde,
J'ai dû réouvrir un ancien projet pour remettre à jour une fonctionnalité et je galère un peu avec les données envoyées (via php) et reçues (via l'appli).
En gros, lors du clic sur une notification, je veux récupérer un id pour m'en servir plus loin.. sauf que je ne le retrouve pas ou je m'y prends pas mal..
Côté php, ça se présente comme ça :
$messageBody['aps'] = array('alert' => array("loc-key"=>"Label_VousEtesDestinataireDunMessage","loc-args"=>"Label_MerciDenPrendreConnaissance"), "mutable-content"=>1, 'sound' => "monSon",'badge' => 20,'IdSociete' => 10);
$payload = json_encode($messageBody);
$msg = chr(0).pack('n', 32).pack('H*', LeTokenDeMonUtilisateur).pack('n',strlen($payload)).$payload;
La valeur que je veux récupérer est : IdSociete
Côté Swift, j'ai ça :
func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
print("Clic notification ?")
print(response) // ici ?
}
J'ai fouillé dans mon response et je n'arrive pas à retrouver mon IdSociete..
Est-ce-que je m'y prend mal ?
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
response.notification.request.content.zzz
où "zzz" estuserInfo
oubody
, je ne sais pas par contre?rhaa ptin, c'était bien dans userInfo..
Merci Larme
Suivant certains type de notifications, j'aimerai rediriger mon utilisateur sur la bonne view...
Mon application est sous cette forme :
Sur mon storyboard, j'ai différent segues qui vont vers les bonnes vues..
Lorsque je clic sur mon menu, les segues fonctionnent bien, pas de soucis.
Maintenant, lorsque je reçois une notification de type "Message", j'aimerai ouvrir directement ma view "Messagerie" via mon segue..
J'ai essayé de mettre ça dans AppDelegate mais ça plante en me disant que le segue n'existe pas (pourtant il existe bien)
J'ai l'impression que je suis "trop tôt" et qu'il ne connait pas encore les segues du storyboard..
J'ai bon ?
Comment palier à ce problème ?
AccueilViewController()
, à moins que tu aies overrider l'init, c'est créer un TOUT nouvel objet. Il faudrait que tu saches ça depuis le temps.Cela ne l'init pas avec le Storyboard/Xib, donc pas de segue.
Je comprends bien que mon
AccueilViewController()
est foireux et ne s'utilise pas comme ça mais du coup, comment faire pour que mon segue soit pris en compte ?Pour accéder les ViewControllers, il faut les addresser par la Window :
@Joanna J'ai testé ton code mais ça foire quelque part..
Après plusieurs tests, ça foire sur
let acceuilViewController = rootViewController as? AccueilViewController
Je ne sais pas pourquoi pour le coup..
Il n'y a aucune erreur, je passe juste dans le
else
Je vais continuer de chercher ou peut-être déplacer ce déclenchement de segue dans un autre endroit de l'appli où ça pourrait le faire..
Print
rootViewController
alors (ou regarde quelle est sa classe).On ne peut pas deviner quelle est sa classe. Après, il y a 4 tests dans le guard, c'est vraiment celui-là qui rate ?
Si
rootViewController
est de classeAnotherCustomViewController
, c'est normal, le cast foire.Optional(<UINavigationController: 0x144815a00>)
Oui car j'ai enlever les autres tests pour être sur que ce soit lui qui foire..
Je passe dans le "PAS OK"
Dans ce cas là, tu as un navigation controller et il faut trouver le premier view controller pour y arriver :
Merci Joanna ^^
Maintenant que je vois le code écrit, ça parait évident et j'me sens bête mais bon.. c'est aussi comme ça qu'on apprend ^^
Du coup, je pense avoir résolu mon soucis.
J'ai du remanier pas mal de trucs dans l'appli car évidement, j'arrivais toujours pas sur mon
AccueilViewController
Mais ça m'a permis de mettre en évidence quelques trucs qui ne servait plus vraiment.dans mon code ^^