2017-05-12 3 views
1

J'ai une application qui permet à deux personnes de jouer à un jeu via bluetooth. Quand un joueur envoie une invitation à jouer, il transforme son téléphone en balise. Lorsque cette balise est activée, les autres personnes avec l'application (si elle est à portée) s'enregistrent dans la plage et une notification apparaît. Cela fonctionne très bien lorsque l'application est ouverte. Toutefois, lorsque l'application est en arrière-plan, la notification est reçue mais n'est pas affichée jusqu'à ce que l'application soit réactivée. Comment faire pour que la notification soit affichée ou qu'un son soit joué ou les deux lorsque l'application est en mode d'arrière-plan.recevoir des notifications de la balise en arrière-plan iOS Xcode

Voici le code que j'utilise pour recevoir region.state et afficher une notification.

-(void)locationManager:(CLLocationManager*)manager didDetermineState:(CLRegionState)state forRegion:(CLRegion*)region{ 
NSLog(@"manager didDetermineState state forRegion"); 

UILocalNotification *notification = [[UILocalNotification alloc]init]; 

if(state == CLRegionStateInside){ 
    NSLog(@"region.identifier;%@",region.identifier); 

    if ([region.identifier isEqualToString:@"com.checkers.bluetooth"]) { 
     NSLog(@"region.identifier;%@",region.identifier); 

     [UIView animateWithDuration:1 delay:0 options:UIViewAnimationOptionCurveEaseIn animations:^{ 
      if([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone){ 
       if([UIScreen mainScreen].bounds.size.height == 480.0){ 
        inviteCheckers.frame = CGRectMake(147,95 *.84,20,20); 
       } 
       else { 
        inviteCheckers.frame = CGRectMake(147,95,20,20);} 
      } 
      else if([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad){ 
       inviteCheckers.frame = CGRectMake(64+294,145,40,40); 
      } 
     } completion:^ (BOOL completed) { 

si ([yourName isEqualToString: @ "None"]) { notification.alertBody = @ ". Vous avez manqué quelqu'un vous invite à jouer aux dames \ nOuvrez Je suis GAME et envoyer une invitation"; [[UIApplication sharedApplication] presentLocalNotificationNow: notification]; } else { NSString * nameString1 = votrenom; NSString * nameString2 = [nameString1 chaîneByAppendingString: @ "veut lire les vérificateurs."]; notification.alertBody = nomString2; AlertView = [[UIAlertView alloc] initWithTitle: @ "Jouer à un jeu?" message: notification.alertBody

            delegate:self 
             cancelButtonTitle:@"OK" 
             otherButtonTitles:@"CANCEL", nil]; 
          [self.AlertView setBackgroundColor:[UIColor clearColor]]; 
      [AlertView show];} }  ]; 

     identifierString = region.identifier; 

     messageString2 = @"checkers"; 
     recieve.hidden = NO; 
    } 

// ceci est nouveau code J'ai ajouté

- (void)applicationDidEnterBackground:(UIApplication *)application 
{ 


if ([backgroundstring isEqualToString:@"fire"]) { 
    UILocalNotification *notification = [[UILocalNotification alloc] init]; 

    notification.alertBody = @"Someone wants to play a game."; 
    [[UIApplication sharedApplication] presentLocalNotificationNow:notification]; 
} 

} 

Il semble que cette habitude de travailler, mais maintenant il ne fonctionne pas. J'ai des mises à jour de localisation en mode d'arrière-plan dans plist. Je reçois des autorisations Maintenant, lorsque l'application est en arrière-plan, il y a une invitation, mais aucun nom n'est enregistré une notification apparaît, mais au premier plan devient alerte avec le nom de la personne.

Répondre

0

Le code référence UILocalNotification mais n'en envoie pas. Il présente à la place un UIView et une boîte de dialogue d'alerte, actions qui ne seront visibles que lorsque l'application est au premier plan.

Afin d'alerter l'utilisateur si l'application n'est pas au premier plan, le seul outil que iOS vous donne est un UILocalNotification. Vous devez le présenter à l'utilisateur si l'application est en arrière-plan. Si l'utilisateur tape dessus, l'application sera mise au premier plan.

+0

J'ai ajouté une chaîne de fond qui passe de @ "no fire"; à "feu"; lorsque la notification d'alerte arrive et que cela fonctionne. Et puis j'ai essayé d'envoyer une notification locale quand la backgroundstring est @ "fire"; (voir le code ci-dessus) mais rien ne se passe. Je suis sûr qu'il me manque quelque chose mais je ne sais pas quoi. – user1114881

+0

Je l'ai trouvé grâce à l'indice. Je posterai mon code pour refléter ce que j'ai fait. – user1114881