News for hackers. Stuff that matters.
Re:You are not Google (2017) by schmichael on Wednesday April 06, 2022 @10:57AM (#30932719)
Around 2010 I was working at Urban Airship (now just Airship) offering an API for mobile app developers to send push notifications. We put a ton of effort into making sure we didn’t drop pushes and our API was HA. At one point very early on I was restoring pushes out of error emails in mutt (not great, I know, I know).

The reason? Not some unrealistic view of ourselves as Google or Amazon, but because we knew we served pushes for a popular pill reminder app (among other reasons).

So just because you don’t have Google or Amazons scale, the data you store and process may be as precious to your users as Amazon’s shopping carts are to them. Over 10 years later there is a lot more medication in my life, and I’m really proud of the sometimes-ridiculous lengths we went to to get the pushes delivered.

Re:You are not Google (2017) by commandlinefan on Wednesday April 06, 2022 @11:49AM (#30933550)
> Urban Airship (now just Airship)

Ironically, Urban Airship (now just Airship) itself is great example of something that people use even though they don't need it - due to hype. You have a mobile app and it needs to send notifications, but you don't have any in-house expertise on mobile notifications. Management says, "ok, let's outsource this to somebody who has some expertise!" They look around and find Urban Airship - the leader in mobile app notification handling!

So you "integrate" with Urban Airship, per management dictates (the same reason you used Hadoop, Cassandra and Kafka). They give you this big complicated presentation but you discover that, in order to use their "service" you have to:

1) instrument your application to send their API a notification every time something happens in your application.

2) set up a workflow in their system that tells them when to tell you that something happened that a notification needs to be sent for

3) instrument your application to read a dataset from them telling you when to send a mobile notification

4) actually send the mobile notification

You realize that they're charging your company a ton of money to do... absolutely nothing. You're still doing everything, responsible for everything, and they're nothing but completely empty overhead. They could have been replaced by a Postgres instance running on a single underpowered EC2 node (and it would be more reliable). But management sees "leader in mobile app notifications" the same as they saw "leader in distributed computing loads" and insisted that you use this thing that exists because it exists.

Re:You are not Google (2017) by dangerlibrary on Wednesday April 06, 2022 @01:29PM (#30935091)
It's entirely possible that for your use case, Airship provided you with no value. But, just as a thought experiment:

- Did you also build the audience segmentation system (and UI) for your marketing team?

- Did you build a scheduled / triggered push system with per-device (or user account) rate limiting?

- Did you build the streaming data interconnect to pipe audience data back to anywhere else in your organization?

- Did you build the capability to remove devices that uninstalled your app from your notification list (surprisingly tricky, at least a few years ago, and APNS and Google will start getting very upset with you if you don't do this)

- Did you build an embeddable notification inbox with state synced across devices?

- Did you build a CDN for in-app notifications with video / images?

Because Airship did, and they will sell you all of that in one package. They'll charge an arm and a leg for it, but they do a lot more than just sit as a middleman between you and APNS when sending notifications. The relatively simple backend tech is definitely not their product, and if that's all you used from them then I would understand your frustration.

Re:You are not Google (2017) by brimble on Wednesday April 06, 2022 @12:50PM (#30934559)
I built, all on my own, a dual-platform multi-app on-demand push notification service around the same time.

I can assure you, Urban Airship was not providing "absolutely nothing". If they hadn't been so expensive, we'd have used them and it would have saved me a shitload of time. Open-source support for push at the time was rudimentary (I assume that's gotten better? I haven't looked at it in about a decade) and in any case, doing it at any scale and even somewhat-good reliability involved a lot of work and dragging in tons of extra services (at least, a database and some kind of message queue service, unless you wanted to write those yourself)

Re:You are not Google (2017) by commandlinefan on Wednesday April 06, 2022 @01:06PM (#30934785)
I built one and then was forced to port it over to Urban Airship for "enterprise" reasons. I can assure you, Urban Airship is providing "absolutely nothing".
Re:You are not Google (2017) by brimble on Wednesday April 06, 2022 @01:10PM (#30934836)
If you had certain scale assurances—a set number of apps you're sending to, never more than low-five-figures pushes in a batch, never overlapping sends at the same time, et c.—it could be a lot simpler because you could skip most of the queue management work, so sure, for some workloads and usage patterns UA probably wasn't helpful enough to be worth the money. It wasn't for us, either, but that's because we needed to charge for it and couldn't mark it up even higher than UA already did.

[EDIT] Now, somewhat after that 2010 date, maybe 2012 or 2013 IIRC, UA re-structured their pricing and offering a ton which made them even less appealing to us, since their focus seemed to be value-add features for marketers on top of push, which was something we had no use for whatsoever—it's possible that by then they were indeed more trouble than they were worth if you just needed push messaging, even putting aside the cost of the service itself. If your marketing folks were big on using that as a "channel", though, it was probably very much worth it. They had a lot of features for that kind of thing.

Re:You are not Google (2017) by brimble on Wednesday April 06, 2022 @01:56PM (#30935370)
Seems wrong to edit this in, so I'll make this post for lookers-on to see what creating a reliable push messaging service looked like in the early '10s:

1) Your app needs to register with Apple to get a push token, using the app's push certificate (which you'd have to generate if your app used push messaging). It needs to send that to a server you control, because that's basically your "to" address to send messages. These were not to be treated as permanent, so to do it right you also had to be ready for these to change.

Then, similar story for Android, but all shoddier, less efficient, and worse-engineered, but also higher-level—so, situation normal for Android vs. iOS in (at least) the early '10s :-) So you're looking at two similar but necessarily entirely separate implementations of this sort of functionality, to cover both platforms.

2) You need to store all those tokens your apps are sending you.

3) To send the push, you need to generate a bunch of individual messages for each address. For Apple, you'll be using the app's push cert to authenticate over a raw (I think? Memory's fuzzy) UDP connection, then blindly firing a stream of data at it (no immediate return statuses, it's a one-directional communication channel). For Google, you'll need to manually chunk these into sets of a certain max size and post the chunks one at a time to some Web endpoint. For an app with one million users sending a broadcast notification to all of them, that's one million messages each time you send. Google's system required that you implement exponential backoff, too, if you didn't want to get banned.

4) Oh, if you're sending to multiple apps, you need a way to manage (add, update) the certs (or, for Google, IIRC, an API token of some kind?) for them and to select the correct one for a given push.

5) Google would tell you at send time if an address was bad (IIRC—it has been about a decade since I touched this stuff). For Apple, you had to wait a while after a send, then open a new connection and ask for a list of bad tokens for that app, which it will happily spit at you as another UDP data stream. These will be uninstalls, folks who've turned off push for your app, whatever. You have to remove those from your token list, facing vague threats of service bans if you keep sending to bad addresses for too long.

6) If your scale is non-tiny and you need any amount of delivery guarantees or reliability, it's plain by now that you need a queue of some kind. So if you're over that line but not too far over it, you hack something together in PostgreSQL or what have you, probably make some minor but OK-for-your-needs errors in the implementation, and live with it. If your needs are greater than that, this is where you start looking at shit like AMQP, which solves a ton of your problems while giving you an ongoing maintenance headache. Retries, fanout to multiple workers, aggregating failure data, et c. There's a lot going on there.

7) Do your senders want to schedule pushes for the future? Now you get to implement cron-for-push-messages, including a UI for it.

8) Do your senders want to send individualized messages? Now you need to hook into some kind of datastore that ties those push tokens to other user data so you can fill that stuff in while generating messages. And you need at least a rudimentary templating system.

9) Do your senders want to send messages in response to user actions in the app? Now you need a way to ingest potentially very bursty and high-volume traffic from a ton of clients, and connect those to configurable push-send triggers. Probably this'll be another thing you need to route through your queuing system, if you don't want to badly over-spend on servers while not having great reliability under load.

10) Push history and stats reporting is probably gonna be needed, at some point, by someone.

This list just keeps going, really.

Re:You are not Google (2017) by commandlinefan on Wednesday April 06, 2022 @02:08PM (#30935485)
Yeah, sure, that's all true - but Urban Airship doesn't handle any of that stuff for you. You still have to do all that stuff, but call Airship somewhere in the middle of all of that.
Re:You are not Google (2017) by brimble on Wednesday April 06, 2022 @02:17PM (#30935597)
OK, well, if that's true now, it wasn't true in the early '10s. Unless their API docs at the time were simply lying.
Re:You are not Google (2017) by djur on Wednesday April 06, 2022 @03:26PM (#30936446)
This lines up very well with my recollection of the state of things circa 2011 when I evaluated the options for cross-platform push notifications and ended up recommending UA. I actually really _wanted_ to build the system in-house, because it seemed interesting, but I couldn't justify our tiny startup spending all that time that would be better spent on features our clients were asking for.

3) and 5) in particular were significant hurdles -- allowing UA to handle the API and TOS differences between Apple and Google was a major benefit. It wasn't just a matter of not wanting to implement it ourselves, but the risk of implementing it incorrectly and getting banned from the service.

Re:You are not Google (2017) by jonny_eh on Wednesday April 06, 2022 @02:27PM (#30935708)
> UDP connection

Small nitpick: "UDP is considered a connectionless protocol because it doesn't require a virtual circuit to be established before any data transfer occurs."

https://www.techtarget.com/searchnetworking/definition/UDP-U....

Re:You are not Google (2017) by brimble on Wednesday April 06, 2022 @02:47PM (#30935956)
Well, sure. Logically, your language/libraries almost certainly present it as something resembling a persistent connection, though, probably not a ton different from how they present TCP (just with fewer features).

However, technically correct is the best kind of correct :-)

I may also be mis-remembering, and APNS might use TCP. Either way, you're spraying bits at a socket and not getting any kind of feedback (until later, on a separate connection), aside from getting dropped if your cert doesn't check out (again, IIRC).

Re:You are not Google (2017) by Groxx on Wednesday April 06, 2022 @04:23PM (#30937030)
Particularly in the earlier days before APNS revamped their APIs to provide better feedback, yeah - you could spray and pray and honestly it'd work pretty well, but oh boy was doing anything complex difficult. UA legitimately simplified a solid chunk of that, and you could just hammer their API however you pleased rather than needing to maintain stable connections to APNS.

Where I worked did eventually drop them and start using our own redis queue + long-running process and that was plenty sufficient for what we did. We lost the "+1 to iOS's counter" feature (this was prior to background processing of notifications existing at all), but we had solid evidence that it simply wasn't providing us much benefit for the complexity/cost compared to just a numberless dot.

Re:You are not Google (2017) by brimble on Wednesday April 06, 2022 @05:23PM (#30937576)
Oh no I forgot about badges! IIRC early on on iOS all you could do was set them to a specific number, so you had to track that state server-side (by having the app report when a notification was seen). There was no "take whatever it is and add one", you just (optionally) set an exact integer in the message payload and that number would go on the badge. That was a pain.
Re:You are not Google (2017) by Groxx on Wednesday April 06, 2022 @05:49PM (#30937873)
Yep, that's exactly what it was. UA had a feature that let you say to increment/decrement by N, and they maintained a cache + cleared it appropriately when the app launched.

Obviously we could do that too with some additional storage, but handling it across multiple OSes and weird iOS + Android lifecycle details was enough of a pain that we didn't end up doing it.

Re:You are not Google (2017) by dont__panic on Wednesday April 06, 2022 @11:56AM (#30933663)
Slightly unrelated, but can anybody explain why private RSS feeds are not a more popular choice for "client push" when push lag of a couple of hours isn't a big deal? The "pill reminder" app made me think about how easy it would be to host a private RSS feed for each client that the backend updates on a schedule, and clients just... check the RSS feed for an update.

Maybe I'm missing something here, but it feels like you don't need some fancy realtime queue service for most push notifications, so why not use something that offloads the checks to the client?

Re:You are not Google (2017) by anon9001 on Wednesday April 06, 2022 @12:10PM (#30933874)
Sure.

RSS is a neat standard, but if you're writing your own app, you might as well use a custom JSON payload that's exactly what you need. If you use RSS but never actually use an RSS reader or expose it to the public, you may end up deviating from the standard, or doing extra work to be compliant with the standard that never gets used.

As far as push notifications, the reality is that "push" is a bit of a marketing term. Every time your phone wakes up and gets on the network, it contacts Apple or Google and sees if there are any pending pushes to be delivered. By using the "push notification" systems, you get to piggyback on that highly optimized connection already provided by Apple or Google. These pushes have to be much smaller than your typical RSS feed and are intended for high priority delivery.

An alternative, if you don't want your data going through the "push" networks, is to have your app "background fetch". You might want to do this if it's too much data (like an RSS feed would be) or if it's sensitive data (Apple and Google can obviously read all push messages). In this case, the iOS and Android have special "background fetch" use cases, which gives your app a chance to pre-load data. News apps are the canonical example.

> it feels like you don't need some fancy realtime queue service for most push notifications, so why not use something that offloads the checks to the client

Mostly because the realtime queue already exists, it's provided mostly for free, it comes with extra features like sounds and badges, it was available before background fetches, and business people know to ask for "push" by name.

Re:You are not Google (2017) by Uehreka on Wednesday April 06, 2022 @12:11PM (#30933896)
I think it’s because most of the time a lag of a couple hours is in fact a big deal. Let’s look at some common use cases:

- If I want push notifications for meetings, I want to get them exactly 10 minutes before my meeting, not 2 hours after, or 10 minutes before but +/- 30 minutes

- If a customer is submitting a critical bug to my bug tracker, I want to know immediately so I can start damage control.

- If a developer on my team responds to my comments on a Pull Request at 3PM, I don’t want to get the notification after I’ve clocked out at 5, causing us to essentially lose a day of work.

In practice, I don’t think there are many use cases where people don’t care about the punctuality of push notifications. And if you start by tackling those use cases and then an important customer says “hey, I actually need punctuality for this new class of notifications”, then you’ll suddenly need to rebuild your whole notifications stack.

Re:You are not Google (2017) by withinboredom on Wednesday April 06, 2022 @12:41PM (#30934406)
scrolls through notifications

Yeah, I didn’t look at them at all today. I’m still alive. As a user, I don’t care about how punctual they are since I don’t look at them until the end of my work day.

Re:You are not Google (2017) by jonny_eh on Wednesday April 06, 2022 @02:28PM (#30935723)
I didn't receive any important phone calls today, does that mean phone system reliability isn't important?
Re:You are not Google (2017) by withinboredom on Wednesday April 06, 2022 @02:50PM (#30935986)
At least for today, for you. Phone systems go down all the time and when that happens, people DO die. No one dies because a notification gets delayed a few hours.
Re:You are not Google (2017) by mbreese on Wednesday April 06, 2022 @12:14PM (#30933933)
Because that would be a pull and not a push.

Not that there is anything wrong with that, and in many use cases it would be a fine alternative. But sometimes you really do need to push data to the user even if they aren’t polling for it.

Pill reminders would be something that you’d want to push. You can’t be sure the user is running your app (even in the background), and the actual state changes are rare. So some kind of mechanism where the client doesn’t initiate the check would be better.

Using a long poll for email or slack or something like that can make more sense in some scenarios.

Re:You are not Google (2017) by anon9001 on Wednesday April 06, 2022 @12:24PM (#30934096)
Pedantic, but: from the device's point of view, it's always a "pull". You can't "push" to something that's not publicly addressable.

From your app's point of view, you receive a "push" from the OS.

Re:You are not Google (2017) by burnished on Wednesday April 06, 2022 @01:24PM (#30935019)
I think they are differentiating between systems that perform polling and systems that can receive interrupts (maybe not quite the right word here), I don't think that has anything to do with being publicly addressable here, in either case you sort of have to assume that devices can find each other before the difference even makes sense.
Re:You are not Google (2017) by sburud on Wednesday April 06, 2022 @12:20PM (#30934019)
Good point! In the mobile space, a certain walled-garden platform traditionally killed off any app 10 minutes after you left it, and even to this date does not guarantee that your app will be allowed to call home on any semi-regular basis. This makes it impossible to guarantee delivery without using the officially sanctioned push system. And if we're doing push already, why bother doing it differently on other platforms? (even if they support cross-app coordination to make the polling battery-efficient)
Re:You are not Google (2017) by bmicraft on Wednesday April 06, 2022 @12:17PM (#30933979)
> Maybe I'm missing something here, but it feels like you don't need some fancy realtime queue service for most push notifications, so why not use something that offloads the checks to the client?

Depending on the use case, you may well depend on the real-time aspect of push notifications. If my door bell rang while using headphones, I'd want to know immediately. I'd also be pretty pissed if a messenger took more than 5 seconds between sending and receiving on the other end, event if "closed" or in background.

Re:You are not Google (2017) by dont__panic on Thursday April 07, 2022 @11:17AM (#30945567)
Totally fair. I mostly meant this as a replacement for notification systems that aren't super time dependent. Even 5 minute pings would probably be enough for most use cases.
Re:You are not Google (2017) by gowld on Wednesday April 06, 2022 @12:49PM (#30934539)
To be fair, their Pricing page tells that you aren't getting anything except buzzwords and the requirement to but more buzzwords:

https://www.airship.com/app-experience-platform/pricing/

> AXP ENTERPRISE

> Starts at $25k/Annually

> 100k + MAUs

> Powerful App Experiences

> Mobile Data Hub

> Customer Journey Optimization

> Success Packages

> Deep Mobile Expertise

> * Overage rates apply

> * Success Package required – prices may vary

More charitably, I think Airship was useful before Android / iOS built their feature into the platform natively.

Re:You are not Google (2017) by ardit33 on Wednesday April 06, 2022 @04:10PM (#30936923)
I have build a notification sending service / gateway, and it is a pain to do. Just because Apple has no knowledge how to do proper web based apis.

For small apps, that's another service to build and maintain. Airship serves well that purpose.

Now, if you are a large company, and have a large volume of pushes, then it doesn't makes sense to pay Airship, but build a service yourself, and have a team to maintain it. Usually, even the smallest service, if you are doealing with Apple's (and Google's) external APi, will have trouble time to time, and you will have to have a team to 'passively' monitor and maintain it.

For a company with less than 100 people, that doesn't really make sense. But with a later stage company, it totally makes sense to have your own service.

Anwyay, just my 2cents, as I have done both, build my own Notification service for a startup, and used Urban Airship for my own personal projects.

Re:You are not Google (2017) by willcipriano on Wednesday April 06, 2022 @12:25PM (#30934118)
Is that how it works? I would've thought it would be something like Twillo where you hit a endpoint when you want to send a message, maybe with an extra step to set up notifications on the users end in the first place.

In Twillio's case after a half hour of you could end up with some sort of send_text(number, msg) function/method that you can just use all over the place and if anything changes in the text message world they handle it.

Id rather do that than have to deal with the carriers, etc. The way you describe sounds like a pain with vendor lock in on top.

Re:You are not Google (2017) by Nextgrid on Wednesday April 06, 2022 @12:33PM (#30934238)
When it comes to mobile push notifications, your mobile app registers itself with the platform's (Apple or Google) push notification service and gets a token. It then has to send your server that token and your server can send pushes to it by talking to the platform's notifications endpoint and quoting that token.

These third-party push notification services are essentially overlays on top of the above, don't actually change the workflow at all (the above is the bare minimum you'd need for the functionality to work) but introduce extra complexity, moving parts, and more importantly, extra rent you now need to pay to them.

Re:You are not Google (2017) by willcipriano on Wednesday April 06, 2022 @12:37PM (#30934329)
Ahh that makes sense, thank you.
Re:You are not Google (2017) by commandlinefan on Wednesday April 06, 2022 @12:33PM (#30934245)
Twilio is actually somewhat useful. Airship is not.
Re:You are not Google (2017) by aadvark69 on Wednesday April 06, 2022 @12:23PM (#30934073)
Airship doesn't actually send the push? That's news to me
Re:You are not Google (2017) by Beltalowda on Wednesday April 06, 2022 @11:25AM (#30933133)
The main point of this article wasn't that these things are never needed or don't solve a real problem, but rather that a lot of people use them "because hype" without a good understanding of their problems, the strengths and weaknesses of these tools, etc.

UNPHAT is a good approach. Any webshop essentially has Amazon's "a failed add to cart will lose us money"-problem and there are a lot of webshops out there, so it's even a common problem! Cassandra may be a good choice even for a smaller webshop (I'm not familiar with it myself, and may be a poor trade-off with respect of ROI, but that's another thing), but it's definitely not a good fit for a lot of other things like batch jobs.

At my current $dayjob we run a low-volume high-profit B2B business; we have a few hundred customers, and it'll never be more than a few thousand – several ten thousand at the most if we end up wildly successful. It's a whole forest of microservices and will scale to the moon, but it's also pretty complex and difficult to work with. All that for a fairly small customer base using a fairly basic web UI they rarely log in to. We do actually have high-availability requirements in the core business, but that's separate from the management UI. It's a good example of not having understood the actual problems and just using something "because I read about it on Hacker News".

Re:You are not Google (2017) by bitexploder on Wednesday April 06, 2022 @11:45AM (#30933467)
Cargo cults everywhere.
Re:You are not Google (2017) by lbriner on Wednesday April 06, 2022 @11:01AM (#30932777)
That isn't really the counter-argument to the OP. Their examples were all about large complexity for the gain in throughput.

Clearly, having HA and reliable transport is reasonable for your use-case but that isn't the same as microservices, hadoop or Kafka.

Re:You are not Google (2017) by hn_throwaway_99 on Wednesday April 06, 2022 @11:27AM (#30933189)
I would actually go farther and say the comment you are responding to supports the article's thesis.

They talk about remediating issues with email alerts. That is exactly the kind of approach you can take when you are nowhere near Google's scale, instead of building a complex system to ensure all of these remediations can happen automatically without any human intervention. Sounds like they took exactly the right approach of not over-engineering a solution prematurely.

Re:You are not Google (2017) by schmichael on Wednesday April 06, 2022 @11:40AM (#30933395)
I intentionally wrote the story without referring to the article to let people think for themselves about the meaning, and it makes me very happy that this was what you thought!

Ironically we kind of relied on e-mail alerts for too long and would kinda sorta break Gmail. While it was probably just the web/IMAP interface or browser/client itself struggling, trying to bulk delete tens of thousands of emails while hundreds more per second were coming in often had incoherent results.

Re:You are not Google (2017) by schmichael on Wednesday April 06, 2022 @11:24AM (#30933127)
Definitely a bit off topic from me, apologies!

I think I was mainly writing in agreement with the article’s closing:

> What we’re all imploring you to do is to think! And to actually understand the problem you are trying to solve.

Re:You are not Google (2017) by HWR_14 on Wednesday April 06, 2022 @12:11PM (#30933885)
I'm confused why a pill reminder app is driven by the internet at all. Wouldn't it make more sense to have the pill reminder app send a local notification at the appropriate time?
Re:You are not Google (2017) by ryandrake on Wednesday April 06, 2022 @12:34PM (#30934282)
Excellent comment! A lot of projects already failed the "too much complexity" problem by just using the Internet when the Internet is unnecessary.

I remember a project I worked on in the past where the requirement was to have the app display a notification to the user at a certain time, like an alarm clock. Pretty simple, and could be implemented with a line or two of code as a locally-generated notification.

But no, the lead declared that we needed a push notification from a server in order to do this properly. Even after the difference between a local notification and a push notification was explained to him (he didn't know that local notifications existed), he insisted that notifications = push notifications, and we must have a server. AND that server needed to run a complex web service. AND it needed a way for devices to log in with credentials, so it needed a database. AND it needed to be fault tolerant since this was a critical user journey in the app. AND the clients had to check in with the server periodically, since their location might have changed to a different time zone, therefore the push notification time had to change. AND this AND that AND so on. All for what was essentially an alarm clock--something you could implement in the client code running on the device in 5 minutes.

Re:You are not Google (2017) by A4ET8a8uTh0 on Wednesday April 06, 2022 @01:11PM (#30934858)
Can we assume that the unstated purpose of push vs local was the ability to query various notifications without the need to separately upload queries somewhere else?
Re:You are not Google (2017) by schmichael on Wednesday April 06, 2022 @01:08PM (#30934806)
> app send a local notification at the appropriate time

IIRC this didn't exist at the time but is indeed the ideal solution. (some more discussion of this downthread)

If pill reminders were sync'd between devices (or between mobile and web verisons of the product), then push notifications would still be necessary to inform one side or the other when to resync data if nothing else.

Still, 2010 was a wildly different time in mobile. We were all still figuring a lot out (clearly)!

Re:You are not Google (2017) by CGamesPlay on Wednesday April 06, 2022 @11:30AM (#30933228)
Man, not to take away from your point or efforts, but imagine missing your pill reminder because you’re on a road trip and you didn’t have cell coverage in Montana.
Re:You are not Google (2017) by schmichael on Wednesday April 06, 2022 @11:36AM (#30933328)
Ha, right? IIRC this was well before local scheduled pushes existed, so the Remote Montana problem was real!

Mobile has come a long way for sure!

Re:You are not Google (2017) by brimble on Wednesday April 06, 2022 @01:04PM (#30934760)
My recollection is also that local notifications didn't exist yet in 2010 on iOS, or had just been added. I tried to confirm it but it's actually pretty hard to find that information, it seems. Could be wrong. But, I was heavy in mobile and push notifications just after 2010, so I'm fairly sure that's right. I distinctly remember that as a feature that was added, at some point.
Re:You are not Google (2017) by HWR_14 on Wednesday April 06, 2022 @12:12PM (#30933913)
I've been able to set a repeating alarm forever
Re:You are not Google (2017) by schmichael on Wednesday April 06, 2022 @01:47PM (#30935261)
It's entirely possible the app author made a poor choice. We have no control over their code. All we could do is try to deliver our meager little component as competently as possible.