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个情况。当用户从商店更新应用程序时,应用程序不会注册其设备以进行推送通知,除非他们先删除旧版本。这不是使用推送通知功能更新应用程序的理想方式。 您有没有办法更新应用程序并注册推送通知而不先删除旧版本?
答案 0 :(得分:1)
使用NSUserDefaults
,您可以设置一个标记,标记设备是否已注册通知。注册通知后,将标志设置为yes:
[[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
}