当用户退出我的应用程序并且我不再希望他接收到设备的通知时,我该如何处理这种情况.
我试过了
FirebaseInstanceId.getInstance().deleteToken(FirebaseInstanceId.getInstance().getId(), FirebaseMessaging.INSTANCE_ID_SCOPE)
Run Code Online (Sandbox Code Playgroud)
但我仍然收到我的设备的通知registration_id.
我还确保这是我应删除的令牌:
FirebaseInstanceId.getInstance().getToken(FirebaseInstanceId.getInstance().getId(), FirebaseMessaging.INSTANCE_ID_SCOPE)
Run Code Online (Sandbox Code Playgroud)
或者简单地说FirebaseInstanceId.getInstance().getToken()).
我也尝试过FirebaseInstanceId.getInstance().deleteInstanceId(),但是下次我打电话给FirebaseInstanceId.getInstance.getToken我时会收到空(它在第二次尝试时起作用).
我想,在deleteInstanceId我能够立即getToken()再次打电话之后,它看起来像是一个黑客.并且还有这个答案表明不应该这样做,但它建议删除显然不起作用的令牌.
那么处理这个问题的正确方法是什么?
有点类似于什么时候调用didRegisterForRemoteNotificationsWithDeviceToken?.
当用户首次安装应用程序并提示是否接受通知时,didRegisterForRemoteNotificationsWithDeviceToken如果用户接受通知,则会调用该应用程序?
我正在registerForRemoteNotificationTypes用户成功登录或创建帐户后拨打电话.
在随后的启动中,didRegisterForRemoteNotificationsWithDeviceToken即使不在registerForRemoteNotificationTypesAppDelegate中调用,也会调用该委托.
如果我按照文档和示例代码:
通过每次启动应用程序时请求设备令牌并将其传递给提供程序,您可以帮助确保提供程序具有设备的当前令牌.
- (void)applicationDidFinishLaunching:(UIApplication *)app {
// other setup tasks here....
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:...
}
Run Code Online (Sandbox Code Playgroud)
但是,当应用程序启动时请求令牌,代理将被调用两次.
需要几个问题和清晰度:
对于初始提示,registerForRemoteNotificationTypes必须要求提示才能显示提示?但是,如果我在AppDelegate中手动调用该代理,则会调用该代理两次.这是假设吗?
如果用户接受初始提示,将didRegisterForRemoteNotificationsWithDeviceToken自动调用?或者我们必须registerForRemoteNotificationTypes在AppDelegate中调用
吗?但是,代表将在未来的发布会上被召集两次?
如果用户拒绝并稍后通过设置接受它,会发生什么?
UPDATE
0.对于初始提示,registerForRemoteNotificationTypes必须要求提示才能显示提示?但是,如果我在AppDelegate中手动调用该代理,则会调用该代理两次.这是假设吗? 事实并非如此.发现实际上有2个registerForRemoteNotiicationTypes在AppDelegate中制作.