我需要的一般概念:
我正在将一个Android应用程序移植到iOS(使用Xamarin,但我可以很容易地从目标C转换为C#),它在很大程度上依赖于AlarmManager对我不拥有的网站上的HTML页面进行背景检查。 AlarmManager本质上是Android的任务调度程序。用户可以将频率设置为他们想要的频率。
我尝试了什么:
背景提取:
app.SetMinimumBackgroundFetchInterval(240);
UNUserNotificationCenter.Current.RequestAuthorization(UNAuthorizationOptions.Alert, (approved, err) =>
{
// Handle approval
});
UNUserNotificationCenter.Current.Delegate = new WEBSITEFUNCTIONS.UserNotificationCenterDelegate();
return base.FinishedLaunching(app, options);
public override void PerformFetch(UIApplication application, Action<UIBackgroundFetchResult> completionHandler)
{
System.Diagnostics.Debug.WriteLine("interval");
WEBSITEFUNCTIONS kf = new WEBSITEFUNCTIONS();
kf.doCheck();
completionHandler(UIBackgroundFetchResult.NewData);
}
执行Fetch只是直接调用从不调用。我需要一些一致性(一分钟关闭没什么大不了的......但几个小时不会这样做)。我让它运行,直接上升从未奏效。我已经阅读了很多关于PerformFetch如何工作的内容,我认为它不会给我提供用户所需的关键响应时间。
UserNotifications: iOS 10的新功能是能够重复通知。但是,这会重复相同的通知。
var trigger = UNTimeIntervalNotificationTrigger.CreateTrigger(60, true);
var requestID = "sampleRequest";
var request = UNNotificationRequest.FromIdentifier(requestID, content, trigger);
UNUserNotificationCenter.Current.AddNotificationRequest(request, (err) =>
{
if (err != null)
{
// Do something with error...
}
});
推送提醒:
我自己的服务器
我可以设置一个执行检查的服务器,然后向Firebase Cloud Messaging发送一条消息,向用户发送有关新项目的消息。我在Android版本上有大约500个活跃用户,如果他们每5分钟检查5个不同的页面,每次检查90 kbs,这大约是每小时一半的带宽。
所以缺点是:
使用我的共享托管,每15分钟设置一次cronjob
我可以设置一个cronjob每15分钟发一次警报。它不是最快的,但比依赖第一个选项更好(因为它直接上升永远不会被调用)