在后台 iOS Xcode 中获取信标通知

Posted

技术标签:

【中文标题】在后台 iOS Xcode 中获取信标通知【英文标题】:get beacon notifications when in background iOS Xcode 【发布时间】:2017-05-12 07:09:20 【问题描述】:

我有一个应用程序可以让两个人通过蓝牙玩游戏。当一个玩家发出玩游戏的邀请时,他们正在把他们的手机变成一个信标。当此信标打开时,使用该应用程序的其他人(如果在范围内)注册他们已进入范围并弹出通知。当应用程序打开时,这非常有用。但是,当应用程序处于后台时,会收到通知,但在用户唤醒应用程序之前不会向用户显示。如何在应用程序处于后台模式时显示通知或播放声音或两者兼而有之。

这是我用来接收 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) 

if ([yourName isEqualToString:@"None"]) notification.alertBody = @"你错过了邀请你玩跳棋的人。\n打开 I'M GAME 并发送邀请。"; [[UIApplication sharedApplication] presentLocalNotificationNow:notification]; 别的 NSString *nameString1 = 你的名字; 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 的后台模式下有位置更新。 我获得了权限 现在,当应用程序在后台有一个邀请但没有记录姓名时,会出现一个通知,但在前台会收到有关此人姓名的警报。

【问题讨论】:

【参考方案1】:

代码引用UILocalNotification,但没有发送。相反,它会显示一个UIView 和一个警告对话框,这些操作仅在应用处于前台时可见。

为了在应用程序不在前台时提醒用户,ios 为您提供的唯一工具是UILocalNotification。如果应用程序在后台,您必须将其呈现给用户。如果用户点击它,它会将应用程序带到前台。

【讨论】:

我添加了一个从 @"no fire" 改变的背景字符串;开火”;当警报通知进来并且有效时。然后我尝试在背景字符串为@“fire”时发送本地通知; (见上面的代码)但没有任何反应。我确定我错过了一些东西,但不知道是什么。 想通了感谢您的提示。我将发布我的代码以反映我所做的事情。

以上是关于在后台 iOS Xcode 中获取信标通知的主要内容,如果未能解决你的问题,请参考以下文章

退出信标时获取通知

在后台监控期间接收来自信标区域检测的通知

在iOS中测距和监控时如何获取信标的MAC地址

在 iOS 中如何在后台运行状态下获取全局触摸事件通知?

在 iOS 上,我的应用如何获取手机在后台时收到的通知数据?

iOS 后台获取本地通知