Hacker Newsnew | past | comments | ask | show | jobs | submit | greysonp's commentslogin

Signal developer here. Our FCM and APN notifications are empty and just tell the app to wake up, fetch encrypted messages, decrypt them, and then generate the notification ourselves locally.

That's certainly a better state of affairs.

So you just need to fix the default setting and not display the message text in notifications to prevent this issue in the future?


We build Signal for everyone, and that includes a lot of people who are not as technologically literate as the average tech worker. For a lot of people, they don't even know they dismissed the notification permission prompt, they were just closing boxes. For them, the reminder is helpful and prevents them from experiencing missing notifications. Striking a balance between helping these people and annoying more technologically-literate users is very difficult, with compromises everywhere. We're just trying to make sure Signal works for people, nothing more.

Ask frequently but add a "don't ask again" option. Then everyone is happy.

Not really. A portion of users will randomly tap that just to get rid of the question. They don’t read.

The easiest way to experience that yourself is to set your device to a language you barely understand. You’ll find yourself dismissing dialogs just like all those illiterate normies.


Can you add a "tech-savvy user" mode, off-by-default, that opts out of these sort of reminders?

I think we're capable of finding it ourselves if you do.


Thanks for the reply. I know it feels noble to do it that way, and I admit I get dogmatic over this one principle: a computer should first and foremost obey the user. It shouldn't have its own agenda. It shouldn't second guess. It shouldn't "did you mean?" I command the computer, and the computer executes that command and then waits for the next command. If I command it to not display a particular output (notifications), then I expect it to never display them, full stop.

I don't see my computers as partners or helpful assistants or eager interns. I see them as tools for reliably performing computation, and I expect them to operate that way.

I fully understand that this means that fewer and fewer developers are "building their software for me" and I find that pretty disappointing.


I'm sure everyone loves it when they accidentally press "Delete", and the app instantly deletes a thing forever without showing any confirmation dialog. After all, if the computer asked you to confirm it, it would mean it disobeyed your direct order!

HN truly never fails to make me laugh when it comes to discussing user experience.


Have you ever built and distributed communications software? This is a very common problem.

I broadly sympathise, being a nerd myself also, but this just isn’t a way to build software for a general audience.

Signal developer here. Not entirely sure what you're saying. I'm only an Android guy, but FCM messages are certainly one trigger that can allow an app process to run, but it's not the only trigger. You can schedule system alarms, jobs, etc. And the notification does not need to be provided by the FCM message. In our case, the server just sends empty FCM messages to wake up the app, we fetch the messages ourselves from the server, decrypt them, and build the notification ourselves. No data, encrypted or otherwise, is ever put into the FCM payloads.

Sure but it needs to go through Firebase regardless of the content of the notification message, I do not believe there is a way to use a third party notification service which does not depend on Firebase.

It doesn't. The API for displaying a notification is purely local.

Receiving a ping from Firebase Cloud Messaging triggers the app to whatever it does in order to display its notification. In the case of Signal, that probably means something like fetching the user's latest messages from the server, then deciding what to show in the notification based on the user's settings, metadata, and message content.

Here's example code for using FCM to show a notification. In this case, the notification content also passes through FCM, but Signal does not do that. https://www.geeksforgeeks.org/android/how-to-push-notificati...


Sorry I should clarify, by "it" I meant any sort of ping must go through Firebase Cloud Messaging, not that the message content itself goes through Firebase.

Looks like there is a way to bypass Firebase by using something like UnifiedPush which runs a perpetual background process that acts similar to Google Play Services to pick up notifications from the server and calls the local notification API.


It's theoretically possible to just keep an app running in the background all the time and periodically poll a server.

That's unreliable though since some OEM Android builds will kill it for that even if the user disables battery optimizations. Those OEMs sort of have a point; if lots of apps did that it would drain the battery fast.


Then that's basically what I said right? That there is in practice no way to opt out of using Firebase if you want consistent notifications.

Not clear what your point is. The Signal server wakes up the app via an empty message. At most the info this conveys is that a Signal app got a message to pull.

My point is there is no reasonable way to remove oneself from Google and Apple even with a fully custom application, they control the notification servers for their devices.

Yea sorry I didn't follow the thread properly.

When running Signal without google play services, Signal reliably received push notifications and with minimal battery drain.

Do you have microG? That provides a compatibility layer for FCM.

No, my intention was to not touch google services.

Any application can send notifications without going through a server.

How? I'm not talking about an application backend server but a notification server which Google and Apple have for all apps. I'm not sure besides polling or having a persistent connection to send notifications to an app while that app is not running.

Signal developer here. It's just because notification reliability is always a top support complaint, and a lot of people turn off notifications and don't realize they've done so. Admittedly, once a month is likely too aggressive.

How about instead of prompting to enable notifications, you leave a small banner or other unintrusive/non-annoying UI noting that they're off, which users can tap in order to learn more about how to reenable them?

For an app that prides itself on privacy, it's kind of crazy that you're making it so easy to accidentally blow it.


That would drive me nuts. I do not want a banner permanently on I cannot remove.

And before someone suggests it: If the banner can be removed, you’re back to having lots of complaints for users that did not realise they turned off notifications.


Doesn't have to be prominent and doesn't even have to be a banner. The ultimate point is to make it hard to reenable by accident, and to not make it annoying. Lots of ways to do that.

True. Lots of ways to do it wrong too. I have seen this done wrong significantly more often than right.

Anyway, I agree it’s worth a try.


Is there some "no means no" additional setting that could be added where someone has to go into settings that would prevent that?

I fear that with the notifications pop up asking me this I might hit the wrong button and woops turn it on.


Try from inside the signal app itself instead of system settings? On android Signal has an option at hamburger menu > Settings > Notifications > Notifications (toggle switch)

Oh... hmm, two toggles actually. One at Settings > Notifications > Calls > Notifications toggle, and the other at Settings > Notifications > Messages > Notifications toggle


> notification reliability is always a top support complaint

I know octogenarians who use signal daily. "You called me and it didn't ring" or "messaged and it didn't beep" are definitely the top support complaints I receive. Thanks for being sensitive to this use case.


Any time after a user switches it off on purpose is too aggressive.

Making the product worse for everybody because a minority can’t manage their own settings is a terrible strategy.

Do most people keep the notifications disabled for their messaging apps?

It's just a mental compartmentalization thing for me. When I want to get into slack/signal chatting mode or read messages I load such an app and look/interact. When I'm not doing that I don't want to be bothered with messages. I'm already sacrificing a portion of my life to work related tasks and being in front of a computer at many hours, when I'm not in that mode I don't want to be interrupted - people who need to reach me in an emergency have other ways to get ahold of me.

But maybe _you_ are the minority

I disable notifications on every app that is not on the critical path to me earning a living. Notifications are largely unnecessary. Either you are actively engaged with something, in which case you didn't need the notification, or you are doing something else and don't need the distraction, in which case you didn't need the notification. Only my employer gets a right to demand my time during work hours, which is why notifications are enabled during work hours for work apps.

We as a society have gotten way too comfortable expecting every single person to be available at all times to provide us some kind of immediate response. Let people live. If I'm hiking through the woods with my camera doing bird photography, even if you're my best friend you can wait until I get back to my car and manually check my messages, I don't need a notification. If it's an emergency, dial my number and call me, which will make my phone ring. Novel concept, I know.


Signal notifications are the #1 thing in the critical path for me earning a living. Isn’t this normal in our industry?

Okay, well you should probably have them enabled then. For me, Signal is for personal messaging. My work messages are mostly Slack, Webex, and Teams.

Nope.

Personally, I have multiple messaging apps. I have notifications on for work slack, which is high signal, and I have notifications off for personal discord which is noisy and low priority.

They may be referring to the fact that ZIP compresses each file individually. It can't compress across files. I think RAR does compress across files though.


You put the ring on your index finger (and likely have it rotated so that the button is pointing to your thumb) and then press the button using the thumb on your same hand. That allows it to be one-handed.


I worked on the Snapchat Android back in 2017. It's only weird for people who have never had to work with cameras on Android :) Google's done their best to wrangle things with CameraX, but there's basically a bajillion phones out there with different performance and quality characteristics. And Snap is (rightfully) hyper-fixated on the ability to open the app and take a picture as quickly as possible. The trade off they made was a reasonable one at the time.


Key can mean different things in different contexts. In a substitution cipher, the key is the mapping. In modern ciphers, the key would be some set of secret bytes. Everyone agrees that this cipher would be a bad way to encrypt/encode something. But using the word cipher like this has real historical meaning, and that is the meaning that is being used in the project.


They don't explicitly state it in the article that I can see, but the PICO-8 is 128x128, and it appears that their output images were constrained to that. Your dithered images appear to be much higher resolution. I'd be curious what dithering would look like at 128x128!


Dithering is used quite frequently in PICO-8 projects at the “native” (128x128) resolution. Here’s an example from a few years ago: https://www.lexaloffle.com/bbs/?pid=110273#p


Hi there, Signal dev here. The Android app does indeed allow you to export encrypted backups to your local device, which you can sync as you wish. That's not going anywhere, and in fact, we have imminent plans to make it better (cross-platform, faster, etc).


Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: