Tôi có một ứng dụng phải báo cáo vị trí của người dùng ngay cả khi nó được nền hoặc thậm chí bị giết (chấm dứt). Vấn đề là các ứng dụng nên báo cáo vị trí không hiếm hơn 1 giờ khoảng thời gian.Cập nhật vị trí nền iOS định kỳ không chỉ phụ thuộc vào thay đổi vị trí quan trọng
Tôi đang sử dụng thay đổi vị trí đáng kể (SLC) để theo dõi tất cả các chuyển động khá đủ khi người dùng đang di chuyển nhưng khi người dùng ngừng cập nhật thêm và ứng dụng không có cơ hội gửi vị trí mới (trong khi người dùng ở trong cùng một khu vực nhưng không có SLC).
Để trang trải trường hợp này, tôi bắt đầu sử dụng tính năng Tìm nạp nền để định kỳ gửi vị trí cập nhật ở chế độ nền ngay cả khi không có SLC). Vấn đề ở đây là tìm nạp nền được sử dụng để hoạt động khá thường xuyên (cứ sau 20-30 phút kể từ khi tôi sử dụng trong ứng dụng iOS 7.x khác) nhưng giờ đây với iOS8/iOS9 tôi chỉ có thể nhận được mỗi ngày một lần hoặc không chấp nhận được trong trường hợp của tôi. Tôi đã thực hiện tấn thử nghiệm, phát triển ứng dụng tải nền đơn giản, thêm thông báo cục bộ khi tìm nạp. Không có may mắn để buộc nó làm việc thường xuyên hơn.
Đây là appdelegate tôi:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[[UIApplication sharedApplication] setMinimumBackgroundFetchInterval:UIApplicationBackgroundFetchIntervalMinimum];
[application registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert|UIUserNotificationTypeBadge|UIUserNotificationTypeSound categories:nil]];
return YES;
}
- (void)application:(UIApplication *)application performFetchWithCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
{
[[UIApplication sharedApplication] cancelAllLocalNotifications];
UILocalNotification *localNotification = [[UILocalNotification alloc] init];
NSDate *now = [NSDate date];
localNotification.fireDate = now;
localNotification.alertBody = [NSString stringWithFormat:@"Background fetch!"];
localNotification.soundName = UILocalNotificationDefaultSoundName;
NSInteger number = [UIApplication sharedApplication].applicationIconBadgeNumber;
number++;
localNotification.applicationIconBadgeNumber = number;
[[UIApplication sharedApplication] scheduleLocalNotification:localNotification];
completionHandler(UIBackgroundFetchResultNewData);
}
Tất cả những gì được thực hiện ở đây là để thêm thông báo địa phương trên tất cả các nền lấy. Tôi luôn hoàn thành việc thực thi nền với UIBackgroundFetchResultNewData.
Bạn có bất kỳ đề xuất nào về cách buộc tải xuống nền hoạt động thường xuyên hơn (hoặc chứng minh các liên kết không thể thực hiện được nữa)? Bất kỳ giải pháp thay thế nào để đáp ứng yêu cầu của tôi cũng được hoan nghênh!
nền Truy xuất đã không bao giờ có một thời gian thi công đảm bảo. Tôi đề nghị bạn gửi push im lặng cho thiết bị của bạn để cho nó một cơ hội để báo cáo vị trí, nhưng điều này sẽ không hoạt động nếu ứng dụng được chấm dứt – Paulw11
Nó không bao giờ được đảm bảo nhưng ít nhất nó được sử dụng để làm việc thường xuyên hơn. Có một số thay đổi đáng kể kể từ iOS 7 liên quan đến tìm nạp nền không? –
Giá trị nào bạn trả lại cho trình xử lý hoàn thành? Dữ liệu mới hoặc không có dữ liệu mới? Theo kinh nghiệm của tôi, ngay cả trên iOS8, nó không được gọi cứ 20-30 phút một lần. – Paulw11