0

我需要什么的总体思路:

我正在将一个 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);
    }

Perform 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 的速度检查,那大约是每小时半个 gig 的带宽。

所以缺点是:

  • 过多的带宽使用将使我的家庭互联网速度变慢
  • 我需要自己保护它
  • 停电有时会持续数天,使最终用户置身事外
  • 他们的服务器可以在任何给定时刻从我的机器上启动,如果发生这种情况,我可以从我的 ISP 获得一个新的 IP 地址......假设他们允许

使用我的共享主机,每 15 分钟设置一次 cronjob

我可以设置一个 cronjob 每 15 分钟发出一次警报。这不是最快的,但比依赖第一个选项要好得多(因为它永远不会被调用)

  • 再一次,我只能任由他们的服务器不让我离开。如果他们这样做,该应用程序将完全崩溃。
  • 共享主机可能会让我对他们的服务器施加太大压力(Hostgator 声称无限带宽,我不确定他们是否希望我这样做)
4

0 回答 0