2014-09-02 2 views
2

Я работаю над приложением iOS с xamarin. Теперь я получил эту проблему, я хочу отправить Push-уведомления с сервера на подключенные устройства. Я могу получать эти уведомления, когда мое приложение работает &, когда мое приложение находится в фоновом режиме. Теперь проблема в том, могу ли я получать уведомления, когда мое приложение убито? (Кнопка «Главная»)? Я читал об этом, и это должно быть возможно, хотя и не надежным. Но все же, как мне это сделать?Не удается получить APNS, когда приложение убито

Я прочитал о получении уведомления через launchoptions

public override bool FinishedLaunching (UIApplication application, NSDictionary launchOptions) 

но это ВСЕГДА Null & нет никакого способа, чтобы отладить его, так как я закрываю мое приложение. Любые мысли о том, что я делаю неправильно?

P.S. Я использую профиль обеспечения разработки (возможно, это проблема?)

Edit 1: Extra информация (код)

public override bool FinishedLaunching (UIApplication application, NSDictionary launchOptions) 
    { 
     application.RegisterForRemoteNotificationTypes (UIRemoteNotificationType.Alert | UIRemoteNotificationType.Badge | UIRemoteNotificationType.Sound); 

     if (launchOptions != null) 
     { 
      // check for a local notification 
      if (launchOptions.ContainsKey(UIApplication.LaunchOptionsRemoteNotificationKey)) 
      { 
       var localNotification = launchOptions[UIApplication.LaunchOptionsRemoteNotificationKey]; 
       if (localNotification != null) 
       { 

        new UIAlertView("TESTER", "TESTER3", null, "OK", null).Show(); 
        // reset our badge 
        UIApplication.SharedApplication.ApplicationIconBadgeNumber = 0; 
       } 
      } 
     } 
     return true; 
    } 

    public override void RegisteredForRemoteNotifications (UIApplication application, NSData deviceToken) 
    { 
     Console.WriteLine (deviceToken.ToString()); 
     String tokenStr = deviceToken.Description; 
     var deviceToken1 = tokenStr.Replace ("<", "").Replace (">", "").Replace (" ", ""); 
     ViewController.deviceToken = deviceToken1; 
    } 

    public override void DidReceiveRemoteNotification (UIApplication application, NSDictionary userInfo, Action<UIBackgroundFetchResult> completionHandler) 
    { 
     Console.WriteLine ("Recieved"); 
     var message = userInfo.ValueForKey (new NSString ("aps")).ValueForKey (new NSString ("message")).ToString(); 
     var reload = userInfo.ValueForKey (new NSString ("aps")).ValueForKey (new NSString ("refreshList")).ToString(); 
     var vehicleId = userInfo.ValueForKey (new NSString ("aps")).ValueForKey (new NSString ("vehicleListId")).ToString(); 
    } 

==> Есть вещи с 3 переменными (с информацией)

ответ

0

Прежде всего, убедитесь, что все ваши сертификаты верны (например: используйте сертификат разработки для сервера песочницы, сертификат пользователя для производственного сервера)

Во-вторых, вам необходимо обработать push-уведомление двумя различными способами. Я не уверен, что код на C# или Xamarin, код в Objective-C выглядит следующим образом: -

//Receive Push Notification when the app is active in foreground or background 
- (void)application:(UIApplication *)application 
      didReceiveRemoteNotification:(NSDictionary *)userInfo { 

    if(userInfo){ 
    //TODO: Handle the userInfo here 
    } 
} 

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    //Get the push notification when app is not open 
    NSDictionary *remoteNotif = [launchOptions objectForKey: UIApplicationLaunchOptionsRemoteNotificationKey]; 

    if(remoteNotif){ 
     [self handleRemoteNotification:application userInfo:remoteNotif]; 
    } 

    return YES; 
} 

-(void)handleRemoteNotification:(UIApplication*)application userInfo:(NSDictionary*)userInfo{ 

    if(userInfo){ 
     //TODO: Handle the userInfo here 
    } 
} 
+0

Уважаемый, благодарю вас за ваш ответ! Я использую правильные сертификаты, так как я могу получать уведомления, когда приложение работает/фон. Пока я вижу, у меня такая же реализация. общественного переопределение BOOL FinishedLaunching (UIApplication приложение, NSDictionary launchOptions) если (launchOptions! = NULL) { // Сделайте что-нибудь и у меня получил remoteNotification общественного переопределения недействительным DidReceiveRemoteNotification (UIApplication приложение, NSDictionary USERINFO, Action completeHandler) –

+0

hm ... если ваша реализация точно такая же, как моя, тогда я действительно не знаю, где проблема. Возможно, вам придется опубликовать дополнительную информацию, чтобы другие люди лучше понимали вашу проблему. – Ricky

+0

Я отредактировал свой вопрос с кодом, который у меня есть на данный момент. Надеюсь, это немного прояснится. –

Смежные вопросы