FCM topic cached on old token - users still getting pushes - firebase

Having a tricky problem. I have firebase messaging, recording tokens in the database (as prescribed). Then I'm running triggers to send to topics (using functions). I noticed a bug when unsubscribing from a topic (had a space in the name - since fixed) , so the user didn't get to unsubscribe properly. Ever since they are getting that topic. Just wondering if theres a way of deleting old tokens / expiring - then unsubscribing from all topics. Basically I'm looking to create a "reset" button of sorts incase this ever happens again.
I had the same issue on my profile. However my cure (and test) was to delete and recreate my profile. Not an ideal solution! Everything worked great again after that.

Basically I'm looking to create a "reset" button of sorts incase this ever happens again.
Currently you cannot do that, topics are based on publish/subscribe model. Therefore the user who subscribes to a topic has to unsubscribe using his own phone to stop receiving notifications related to that topic.
If you created a topic by accident and all users unsubscribe from it, then it is no longer a topic and no one will be able to subscribe to it or receive any notification related to it.

Related

What would cause events to suddenly stop being sent to/recevied by firebase?

We are using Firebase/Google analytics for our Android and iOS app. Everything seemed to be sending data correctly and we were able to view the data in Big Query etc. However we started to notice that some data seemed to be getting lost.
We detected an odd situation where some users' analytics data stopped showing on Firebase/Google Analytics/Big Query, despite having previously received data from that user in the past. The data seems to just stop at a random point in time, for random users.
in_app_purchase events from those players were still appearing in the data on dates where they didn't have any other events. We checked our backend service (gamesparks) for their account and could see that they were active players who had been using the app very recently. That is, after their last event was appearing in Big Query.
After investigating some more and started finding other users who had the same issue. They would be sending data without issue and then all of a sudden we would receive nothing from them, except from in_app_purchase events/notification events etc which are sent via a seperate service (app store etc) rather than the client.
After scouring our implementation and going over it line by line comparing to the samples/documentation we couldn't really see any issues, and even the automatic events (session_start etc) stop appearing. We made sure we were using the latest versions of the firebase SDKs etc in the hope it would fix it but it made no difference.
One peculiar thing is that when we find a in_app_purchase event from one of these 'broken' players, things like the user properties and default parameters for that player have changed from when they stopped sending data, so it seems like the lost data is somewhere but not being logged anywhere.
I was wondering if it was possible for specific users to stop their app sending any analytics data to Firebase via a device/google account setting?
While looking into the documentation we noticed that if Google Play Services is installed on the device, data is sent via that, rather than via the client/firebase sdk itself. Is there any known issue with players changing their Google Play Services settings that could cause something like this?
Wondered if this was a known issue but please let me know what other information you might need.
EDIT: I also wanted to mention that although we can't be 100% certain, we believe this is only happening to our Android users. We haven't found any iOS users that have the same issue.
Thanks,
Matt

Restoring access to telegram bots after deleting the owner's account

Telegram deleted my account by timing (after half a year without activity), this account had several combat bots. After deleting the account, the bots were not deleted, but now I don’t understand how I can restore access to them. I tried to re-register on a new account. The list of bots is empty.
I wrote to Telegram support, 2 weeks have passed and there is no response from them. I was looking for a similar situation on the Internet but did not find a similar one. Out of despair, I am writing here.
I think that the only way to solve this is to ask support.
Because if you'll create bot with the same name again - you'll lose your users. As you would normally delete and create bot.
So, ping them in all available channels, hope and wait.

How to reliably stop receiving notifications when user logs out

I have a server, and multiple clients (web & mobile). When my users log in, I want to start sending them notifications about the content they follow. When they log out, I want to stop sending them notifications.
I've found many Stack Overflow questions that are similar to mine, but none have been completely answered.
The closes to my question was this other question where the accepted answer is to call deleteInstanceId() when the user logs out, which seems like the most solid solution, but in the comments someone copy pasted from the (GCM) docs that "Developers should never unregister the client app as a mechanism for logout or for switching between users". I wasn't able to find the same notice in the new Firebase docs, but I assume that it's the same concept: the InstanceId is not supposed to be user related.
The only alternative I've found, is to send a "signOut" request to my server, with the instanceId, and my server needs to remove the associated instanceId from the user account.
But what if that API call doesn't go through? This seems to be quite a fragile solution.
So this is what I would do now:
Send the instanceId to my server when the user authenticates
Make sure that this same instanceId is not used by another user, since this could happen when the other user logged out on the same device, but the API call didn't go through
When sending notifications, send them directly to the registered instanceIds (initially I had planned on using topics, but in combination with handling my tokens, this seems even more fragile).
When the user logs out, send a signOut request to my API, and remove the instanceId from the user.
Your question seems to just be seeking validation for a design, which really isn't the purpose of Stack Overflow. The Firebase subreddit might be a better alternative for drumming up conversation around the problem.
But I will say that if it works for you, then run with it. Consider also sending the target users's UID in each message, and have your app compare that with the currently signed in user in order to determine if it reached its correct destination. Send a message back to the server if it's not in order to correct the problem.

How not to send FCM to users who don't want to receive push?

With GCM, when user expresses their preference whether they are willing to get notifications, we could mark their preference as active or inactive
How can I achieve similar effect with FCM?
When user says they don't want to receive pushes, we'd have to unsubscribe the user from all the topics we have?
Are there better approaches?
Depending on the scenario, unsubscribing from the topics is the way to go.
However, if your goal is to simply prevent the user from seeing any push notifications appearing on their screen, a workaround I could think of is have a setting (e.g. enable/disable notifications) that identifies if you should/shouldn't display a notification every time the user receives one.
For example, user installs the app. Initially, the setting defaults to enabled. Push notifications are displayed normally. If user disables it, when the device receives the message, you do not create a notification display.
For this to work, I'm thinking the checking should be done inside the method where you create the notification (e.g. sendNotification).
So the scenario now is that the device is still technically receiving the notification, it's just that you're not showing/displaying it to the user.
Note: I haven't tried to go with this scenario myself, so I'm not sure if this is breaking any best practices. I would still go with the unsubscribing if it were me though. It's easier.

Better way to notify the users about workflow items

I want to notify the users about their assignment list/status of their work items via notification.
Instead of sending email notification, is it possible to show the notifications in Tridion itself? Say for example: having new item like "Notifications" under shortcuts-->mytasks?
Or is there any better way to notify the users apart from email communication, because the users dont want to receive so many mails in their mail box.
Yes. The list of items shown shortcuts is extendable, just like every other list I've ever looked at in the Tridion GUI.
Have a look at this blog post from Jaime to get started. The topic of how to extend is was also covered in this question, but Jaime's tutorial is probably a better starting point.
Once you get some experience with writing this extension, you'll probably run into questions similar to the one Nuno asked here (and that was answered expertly by Jaime and Boris).
In general I like to think of workflow notification in two broad groups - Active and Passive. Under active notifications, I really only include email notification, but you could expand the concept to push notifications to an iphone app or send a text message etc. When considering active notifications, it is very common for users to get fed up of having too many alerts from the system, so it is important to design it in a flexible way that allows your users to not feel bombarded with alerts. The most successful implementation I have implemented allowed users to say how often they receive notifications. Typically they set this to every 24 hours, and they receive a summary email of their pending assignments each morning. This allows users who are very active and use their task list regularly to never receive emails, as they normally get to the items before the following day.
Moving to passive forms of notification, if you keep in mind that you can expose a user's task list using the API's the SDL have provided, you could think about implementing the following forms of passive notification:
Create an RSS feed for the Users's assignment list
Create a Widget/Portlet for a company intranet to show a user their assignments
Create some kind of desktop or mobile app which can pull the data
Set the default start screen of the CMS to be the Task List rather than the Dashboard
The last of these options has been an "out of the box" offering from Tridion for a long time (but I think it was dropped by mistake at some point with Tridion 2009 or 2011. However, #Alvin has recently answered one of my other questions, which may help solve this issue (although it may not be supported). Essentially you can set the <defaultpage> node in the CME.config to /Views/Dashboard/Dashboard.aspx#locationId=cme:workitems. This will make the UI automatically open on the work list (BUT I REPEAT... THIS MAY NOT BE SUPPORTED).

Resources