Parse 的推送通知中有一个奇怪的行为。你可以下载一个空白项目,在这里做一些实验https://parse.com/downloads/ios/parse-starter-project/latest
要注册推送通知,我们需要 didFinishLaunchingWithOptions
中的此代码
[application registerForRemoteNotificationTypes:UIRemoteNotificationTypeBadge|
UIRemoteNotificationTypeAlert|
UIRemoteNotificationTypeSound];
然后,在
didRegisterForRemoteNotificationsWithDeviceToken
,我们包括:[PFPush storeDeviceToken:newDeviceToken];
以下是案例:
案例 1. 如果您的手机没有应用程序版本,并且您运行代码,它将为设备注册推送通知 - 一切正常。
案例 2. 如果您最初不使用代码,请将其从
didFinishLaunchingWithOptions
中删除[application registerForRemoteNotificationTypes:UIRemoteNotificationTypeBadge|
UIRemoteNotificationTypeAlert|
UIRemoteNotificationTypeSound];
当然,应用程序不会为设备注册推送通知。然后,您插入代码。旧应用程序仍在您的手机中,运行它不会注册设备;但是如果您卸载旧版本的应用程序,并使用插入的代码安装新应用程序,该应用程序将注册设备。
现在,我们的应用程序处于案例 2 的情况。当用户从商店更新应用程序时,应用程序不会为他们的设备注册推送通知,除非他们先删除旧版本。这不是使用推送通知功能更新应用程序的理想方式。
您有什么方法可以在不删除旧版本的情况下更新应用程序并注册推送通知吗?
最佳答案
使用 NSUserDefaults
,您可以设置一个标志来标记设备是否已注册通知。为它们注册通知后,将标志设置为是:
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"Registered"];
在应用程序中确实完成了带有选项的启动,请检查并仅在
NO
时注册它们.现在,对于已经安装了应用程序的人来说,他们不一定会重新启动他们的应用程序,因此他们不一定会通过
appDidFinishLaunching...
但是您可以尝试在应用程序的其他位置注册它们。您是否有一个主菜单或某个共同的地方,几乎每个用户都可以保证在某个时候通过?如果是这样,请插入一些这样的代码:
if (![[NSUserDefaults standardUserDefaults] boolForKey:@"Registered"]) {
// run the code to register and then set the flag to YES
}
关于ios - Parse 不为推送通知注册设备,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23970312/