Creating a push or background service that checks remote server

248 views Asked by At

General idea of what I need:

I am porting an Android app to iOS (Using Xamarin, but I can translate to C# from objective C easily enough) that relies heavily on the AlarmManager to do background checks on an HTML page on a website that I don't own. AlarmManager is essentially a task scheduler for Android. The user would set the frequency to whatever they desired.

What I've tried:

Background fetching:

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 is just straight up NEVER called. I need some consistency (being one minute off is no big deal... but several hours will not do). I let it run and it just straight up never worked. I've read lots on how PerformFetch works, and I don't think it'll give me the critical response time that the user needs.

UserNotifications: New to iOS 10, is the ability to have repeating notifications. However this repeats the same notification.

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...
                }
            });

Push Alerts:

My own server

I could setup a server that does the checking and then sends a message to the Firebase Cloud Messaging to send a message to the user about the new items. I have approximately 500 active users on the Android version, if they check 5 different pages every 5 minutes, at 90 kbs a check, that's about half a gig of bandwidth an hour.

So the cons are:

  • Excessive bandwidth usage will make my home internet a lot slower
  • I will need to secure it myself
  • Power outages can sometimes last for days, leaving end users out of the loop
  • Their server could boot off my machine at any given moment, I could get a new IP address from my ISP if that happened... assuming they allow that

Using my shared hosting, setup a cronjob every 15 minutes

I can setup a cronjob to do an alert every 15 minutes. It's not the fastest, but way better than relying on the first option (as it just straight up never gets called)

  • Once again, I'm at the mercy that their server doesn't kick me off. The app completely breaks if they do this.
  • Shared hosting might cut me off for putting too much strain on their servers (Hostgator claims unlimited bandwidth, I'm not sure if they'd like me doing that)
0

There are 0 answers