2016-05-23 3 views
0

Ich implementiere Remote-Benachrichtigungen für meine iOS-App und versuche, Benachrichtigungs-Payloads zu erfassen, wenn die App nicht ausgeführt wird. Das Problem besteht darin, dass beim Start von FinishedLaunch der Parameter launchOption immer null ist. In anderen Fällen, wenn die App im Hintergrund oder aktiv ist, funktionieren Benachrichtigungen gut. Ich verstehe nicht warum, basierend auf Referenzen und Blog-Posts, sollte es funktionieren. Dies ist der Code, den ich verwende:LaunchOption in FinishedLaunching immer null (Xamarin.iOS)

public override bool FinishedLaunching (UIApplication application, NSDictionary launchOptions) 
    { 
      //new UIAlertView("launchOption", launchOptions != null ? "Yes" : "No", null, "").Show(); 
      if(launchOptions != null && launchOptions.ContainsKey(UIApplication.LaunchOptionsRemoteNotificationKey)) 
      { 
       //new UIAlertView("launchOption", "launchOption != null", null, ""); 
       this.viewModel.Loading(false); 

       NSObject result; 
       if (launchOptions.TryGetValue (UIApplication.LaunchOptionsRemoteNotificationKey, out result)){ 
        NSNotification notification = result as NSNotification; 
        DispatchPushNotification(application, notification.UserInfo); 
        Console.WriteLine ("Got a local notification: {0}", notification); 
       } 
      ... 

Was mache ich falsch?

+0

hast du eine Lösung dafür gefunden ?, ich stehe auch vor einem ähnlichen Problem – Subha

Antwort

0

Ich hatte genaues Problem, Payload kam als Null. Das Problem war, ich war nicht Typ Casting die fertige Startoption wie folgt:

NSDictionary userInfo = (NSDictionary)options [UIApplication.LaunchOptionsRemoteNotificationKey]; 

Nach Typ Gießen, fing ich an, richtige Nutzlast zu bekommen. Es scheint, dass Sie auch direkt auf die launchOptions zugreifen.

1

Ich löste das Ändern des Codes, der die Nutzlast abruft. Ich habe bemerkt, dass jedes Mal, wenn ich options.TryGetValue(...) verwendete, der Eingabewert in der Startoption null war. Durch das Entfernen dieser Zeile und die Verwendung des Folgenden wurde mein Problem gelöst.

if (launchOptions != null && launchOptions.ContainsKey (UIApplication.LaunchOptionsRemoteNotificationKey)) { 
    Console.WriteLine ("launchOption != null and LaunchOptionsRemoteNotificationKey present"); 
    NSDictionary notification = launchOptions.ObjectForKey(UIApplication.LaunchOptionsRemoteNotificationKey) as NSDictionary; 
    if (notification != null) 
     // do something 
    } 
} 

Ich weiß nicht, ob es ein Fehler ist, ich hatte nicht zu viel Zeit, um es zu testen.