菜鸟教程小白 发表于 2022-12-12 21:58:06

ios - didEnterRegion 仅在设备唤醒时触发


                                            <p><p>我在我的应用中使用由 <code>iBeacon</code> 触发的<strong>本地通知</strong>。只要 iPhone 处于事件状态,它在前台和后台都可以正常工作,但在大约 15 分钟不活动或重新启动后不会触发 <code>didEnterRegion</code>。</p>

<p>然后它只会在使用主页按钮或 sleep 按钮唤醒 iPhone 时再次触发,但我希望 <code>didEnterRegion</code> 在 iPhone 在口袋中放置 15 分钟或更长时间时“触发”也进入该地区。</p>

<p>这可能吗?如果是,怎么做?</p>

<p>后台模式 > 位置更新已禁用</p>

<p>一些代码:</p>

<p>.h</p>

<pre><code>@property (strong, nonatomic) CLBeaconRegion *beaconRegion;
@property (strong, nonatomic) CLLocationManager *locationManager;
</code></pre>

<p>.m</p>

<pre><code>- (void)start {
    self.beaconRegion = [ initWithProximityUUID:uuid identifier:@&#34;com.bla.bla&#34;];

    self.beaconRegion.notifyOnEntry = YES;
    self.beaconRegion.notifyOnExit = YES;
    self.beaconRegion.notifyEntryStateOnDisplay = YES;
    self.locationManager.desiredAccuracy = kCLLocationAccuracyThreeKilometers;
    ;

    ;
    ;
    ;
}

- (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region {
    ;
}

-(void)locationManager:(CLLocationManager *)manager didExitRegion:(CLRegion *)region {
    ;
}

- (void)locationManager:(CLLocationManager *)manager monitoringDidFailForRegion:(CLRegion *)region withError:(NSError *)error
{
    NSLog(@&#34;%@&#34;, );
}

-(void)locationManager:(CLLocationManager *)manager didDetermineState:(CLRegionState)state forRegion:(CLRegion *)region {
    if (state == CLRegionStateInside) {
      ;
    } else {
      ;
    }
}
</code></pre></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>我不确定这里发生了什么,但问题中描述的体验与我在多个设备上看到的测试不一致。发布设置它的代码可能有助于找出一些答案。</p>

<p>在几个应用程序中,我已经能够获得后台 <code>didEnterRegion</code> 回调,即使在没有按肩部按钮或主页按钮的情况下闲置超过 15 分钟后也是如此。为此,我不必设置任何背景模式。 (如果您将应用程序提交到商店并设置了不必要的后台模式位置更新,Apple 实际上会拒绝您的应用程序。)</p>

<p>iOS 7.1 中存在一个错误,它会在启动后的某个时间点停止 iBeacon 检测,所以也许这就是这种情况下发生的情况。详情为 <a href="https://stackoverflow.com/questions/22946022/ibeacon-didrangebeacons-stops-getting-called-must-reset-device-for-it-to-work/22949187#22949187" rel="noreferrer noopener nofollow">here</a> .不幸的是,测试这个假设需要您唤醒屏幕以关闭和打开蓝牙以清除条件,这将唤醒您的屏幕并让您退出区域。也许您可以尝试设置 <code>beaconregion.notifyEntryStateOnDisplay=NO</code>,重新创建此条件,然后尝试循环蓝牙以查看是否收到通知。您还可以使用现成的信标扫描应用程序,例如 <a href="https://itunes.apple.com/us/app/locate-for-ibeacon/id738709014?mt=8" rel="noreferrer noopener nofollow">Locate for iBeacon</a>查看您的设备在进入此状态后是否能够针对 iBeacons 进行范围,如果您无法检测到 iBeacons,则仅循环到蓝牙。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - didEnterRegion 仅在设备唤醒时触发,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/23390832/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/23390832/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - didEnterRegion 仅在设备唤醒时触发