我正在将我的应用程序从GCM迁移到FCM.
当新用户安装我的应用程序时,onTokenRefresh()会自动调用该应用程序.问题是用户尚未登录(无用户ID).
如何onTokenRefresh()在用户登录后触发?
在新的Firebase中,在通知下,他们提到开发人员可以向特定设备发送通知.为此,在控制台中它要求一个FCM令牌.究竟是什么,我如何获得该令牌?
android firebase firebase-cloud-messaging firebase-notifications
有没有办法限制Firebase推送通知注册?不寻找主题.假设我有登录功能.我希望登录用户订阅推送通知.然后令牌可以发送到服务器并存储.
在用户注销的同时,用户也应该是未注册的.
那么目前有一种机制吗?我浏览了Firebase API文档但我找不到任何内容.
只是想知道我是否遗漏了任何东西.
android firebase google-cloud-messaging firebase-cloud-messaging
我对在我的应用中实施Firebase云消息传递有一些疑问.
我的应用程序是类似于whatsapp和facebook messenger的聊天.现在,每当有人登录时,我都会注册令牌并将其与用户联系起来.因此,如果有人想要与用户聊天,应用程序会在Db中搜索用户ID,并且我有他的令牌.
我可以注册设备令牌,但我不确定我该怎么做.
在我的聊天中,用户通过邮件/密码注册进行注册,并且用户可以在其他设备中登录.
例如: 用户Frehley使用Galaxy 8,并且能够使用令牌在他的设备中聊天和接收通知.但是,让我说他在另一台设备上.我需要再次注册令牌并将其与他联系起来吗?
所以,也许我错了,但是每次用户登录并在DB中替换它时,注册令牌的最佳时刻.对?
现在,假设有两个用户(Frehley和Stanley)使用相同的Galaxy 8登录,每次登录时令牌都会不同,或者每个设备的令牌都相同?
我希望能够在我的Android应用程序中添加多个发件人ID.
来自https://developers.google.com/cloud-messaging/concept-options
GCM允许多方向同一客户端应用程序发送消息.例如,假设客户端应用程序是具有多个贡献者的文章聚合器,并且每个人都应该能够在发布新文章时发送消息.此消息可能包含URL,以便客户端应用程序可以下载该文章.GCM不必将所有发送活动集中在一个位置,而是让您能够让每个贡献者发送自己的消息.
如何使用google-services.json配置文件实现这一目标?
android firebase google-cloud-messaging firebase-cloud-messaging
查看 Firebase 文档,它建议为每个客户端实例生成一个 FCM 令牌 - 然后必须手动存储该令牌。如果我将每个令牌链接到 Firestore 数据库中的用户文档,那么在用户注销时我是否需要手动删除设备特定的令牌?
例如,用户 A 启动应用程序,并且他们的 FCM 令牌(例如“ABC”)被存储到他们的用户文档中。然后,用户 A 注销,B 登录。FCM 令牌不会刷新**,因此我需要从 A 的用户文档中删除该令牌并将其移动到 B 的用户文档中。否则,任何发往 A 的通知都将发送至 B(全部在同一设备上)。
这种想法正确吗?这似乎是一种管理代币的棘手方法,但据我所知,这是必要的吗?
** 根据 Firebase 文档,令牌仅在以下情况下刷新:
阅读更多文档,首先在本地处理通知是否是更好的解决方案 - 决定它是否发往登录帐户,然后呈现它?即不向通知添加任何低级敏感数据(例如聊天消息),而只是提供“获取新消息的通知”?
apple-push-notifications firebase-cloud-messaging google-cloud-firestore
我有一个应用程序,它可以接收不同的通知类型(例如News和Podcast).目前,它有两个简单的开关,用户可以启用和禁用这些不同的通知类型.它只需订阅和取消订阅相应的Firebase主题即可.明显的优点是设备只接收用户想要的通知,而不必在本地过滤它们=>电池和数据有效.
问题是,我想将它与新的Android O通知渠道结合起来.我是否正确地假设唯一的方法是只订阅Firebase中的所有主题并让用户在Android设置中手动禁用不需要的主题?
有没有更好的方法可以节省更多的电池寿命(通过不接收所有通知)?
android android-notifications firebase firebase-cloud-messaging android-8.0-oreo
有没有办法创建一个具有登录用户范围的注册ID.我有一个应用程序,允许用户以不同的用户身份登录(比如一个用户作为学生,另一个用户作为父母).用户可以在用户之间切换.Case有点类似于gmail应用程序,其中可以同时登录多个电子邮件ID.
问题是我们打电话的时候
FirebaseInstanceId.getInstance().getToken()
Run Code Online (Sandbox Code Playgroud)
它将为该应用实例提供设备ID.因此,如果我要定位登录的特定用户,我不能.
我可以实现针对用户的一种方式是user_id明确地作为数据发送,在我的情况下,这是无效的,因为它将为每个用户发送一个FCM发送请求.无论如何,这可以实现.想知道gmail如何处理用户特定的通知.
android firebase google-cloud-messaging firebase-cloud-messaging
我第一次获得FCM并将其保存到我的userDefaults.现在当用户注销时,如何再次刷新FCM令牌?我搜索了文档和许多其他问题,但没有找到更好的解决方案.
提前致谢.
关于这个问题做了很多研究,首先是我的设置:
我的问题非常简单直接,尽管我似乎无法找到解决问题的明确方法。
我部署了应用程序的 4.2 版本。iOS 中的 Firebase 云消息传递 (FCM) 运行得非常好。然后我将 4.3 部署到 TestFlight 开始测试。通过 TestFlight 安装 4.3,FCM 停止工作,没有推送通知。如果我删除该应用程序并通过 TestFlight 推送通知再次安装 4.3,则该设备已注册。
我还可以重现此问题,更新最新发布的 App Store 中我的应用程序的安装版本,这并不奇怪。
我知道 InstanceId/设备令牌基于应用程序构建+设备,因此当应用程序更新时令牌发生变化是有意义的,但当我从 4.2 更新到 4.3 时我的令牌是相同的:
const fcmToken = await firebase.messaging().getToken(); //same whether 4.2 or 4.3
Run Code Online (Sandbox Code Playgroud)
是的, firebase.messaging().getToken() 在初始创建时被缓存。
所以我准备监听令牌更改事件:
firebase.messaging().onTokenRefresh(async () => {
console.log('======onTokenRefresh=========');
AsyncStorage.removeItem(FCM_TOKEN_KEY);
await getToken();
});
Run Code Online (Sandbox Code Playgroud)
那似乎永远不会火。我什至在我的应用程序中添加了一个按钮,以尝试强制使用新的 InstanceId 并在从 TestFlight 或 AppStore 更新版本后向 FCM 注册,但这没有帮助:
export async function forceRefresh() {
console.log('================force a new registration!!!==========');
AsyncStorage.removeItem(FCM_TOKEN_KEY);
firebase.messaging().deleteToken(); …Run Code Online (Sandbox Code Playgroud)