Parse不会为推送通知注册设备

时间:2014-05-31 12:53:17

标签: ios push-notification parse-platform

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个情况。当用户从商店更新应用程序时,应用程序不会注册其设备以进行推送通知,除非他们先删除旧版本。这不是使用推送通知功能更新应用程序的理想方式。 您有没有办法更新应用程序并注册推送通知而不先删除旧版本?

1 个答案:

答案 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
}
相关问题