2017-05-12 15 views
1

두 사람이 블루투스를 통해 게임을 할 수있게 해주는 앱이 있습니다. 한 명의 플레이어가 재생 초대장을 보내면 휴대 전화가 신호로 바뀝니다. 이 비컨이 켜지면 다른 사람과 앱 (범위 내에있는 경우)이 범위를 넘었고 알림이 팝업됩니다. 앱이 열려있을 때 효과적입니다. 그러나 앱이 백그라운드에있을 때 알림은 수신되지만 앱을 다시 깨울 때까지 사용자에게 표시되지 않습니다. 앱이 백그라운드 모드에있을 때 알림이 표시되거나 소리가 재생되거나 둘 다 재생되도록하려면 어떻게해야합니까?백그라운드 iOS에서 비컨 알림 받기 Xcode

다음은 region.state를 수신하고 알림을 표시하는 데 사용하는 코드입니다.

-(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) { 

경우 ([YOURNAME isEqualToString : @ "없음"]) { notification.alertBody = @ ".. 당신은 체커를 재생 초대 사람을 놓친 내가 게임을하고 있는데 보내 nOpen 초대 \"; [[UIApplication sharedApplication] presentLocalNotificationNow : 알림]; } else { NSString * nameString1 = yourName; NSString * nameString2 = [nameString1 stringByAppendingString : @ "체커를 원합니다."]; notification.alertBody = nameString2; AlertView = [[UIAlertView alloc] initWithTitle : @ "게임하기?" 메시지 : notification.alertBody

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

     identifierString = region.identifier; 

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

이 내가이 작업을 사용하는 것 같다하지만 지금은 그렇지 않은

- (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]; 
} 

} 

새로운 코드를 추가한다 //. plist에서 백그라운드 모드로 위치 정보를 업데이트했습니다. 권한을 얻습니다. 앱이 백그라운드에있을 때 초대가 있지만 이름이 기록되지 않고 알림이 표시되지만 포 그라운드에서는 그 사람의 이름이 알림으로 표시됩니다.

답변

0

코드는 UILocalNotification을 나타내지 만 코드를 보내지 않습니다. 대신 UIView과 경고 대화 상자가 표시됩니다.이 작업은 앱이 포 그라운드에있을 때만 표시됩니다.

앱이 포 그라운드에 있지 않은 경우 사용자에게 알리기 위해 iOS에서 제공하는 유일한 도구는 UILocalNotification입니다. 앱이 백그라운드에있는 경우이 정보를 사용자에게 제시해야합니다. 사용자가 탭하면 앱이 포 그라운드로 이동합니다.

+0

@ "no fire"에서 변경되는 backgroundstring을 추가했습니다. 발사"; 경고 알림이 오면 작동합니다. 그리고 backgroundstring이 @ "fire"일 때 지역 알림을 보내려고했습니다. (위의 코드 참조) 아무 일도 일어나지 않습니다. 나는 뭔가를 놓치고 있지만 무엇을 모르겠다. – user1114881

+0

힌트를 주셔서 감사합니다. 내가 한 일을 반영하도록 코드를 게시 할 것입니다. – user1114881