IOS Targeted Push Notification - Parse API

时间:2014-09-08 13:48:10

标签: parse-platform

我正在实施一个解决方案,允许用户仅从他关注的用户列表中接收推送通知。我在推送邮件时了解了高级定位收件人。我应该如何设置我的安装对象,以便仅接收我​​正在关注的用户的帖子。我应该获取他正在关注的用户列表并设置安装对象。问题是,我正在使用Parse登录视图控制器,只有在我登录后才能获得以下用户列表。我的第二个问题是,如果用户未登录,用户是否能够获得推送通知。我的第三个问题是,每次启动应用程序时都会创建一个新的Parse安装对象?要求是我应该看到以下用户的推送通知。请指教。

1 个答案:

答案 0 :(得分:0)

在实施我自己的身份验证和推送警报系统时,我遇到了类似的问题和疑虑。这就是我处理它的方式。

AppDelegate.m中的

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
PFInstallation *currentInstallation = [PFInstallation currentInstallation];

if (authenticated) {
    NSString *user = someUniqueStringForUser;
    [currentInstallation addUniqueObject:user forKey:@"channels"];
}

[currentInstallation setDeviceTokenFromData:deviceToken];
[currentInstallation saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {
    if (succeeded) {
        NSLog(@"Successful Registration %s", __PRETTY_FUNCTION__);
    } else {
        NSLog(@"Error %@, %s", error, __PRETTY_FUNCTION__);
    }
}];

}

在您的登录ViewController.m

- (void)authenticatedAndRegisterForPush {
    PFInstallation *currentInstallation = [PFInstallation currentInstallation];
    [[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeAlert)];
    NSString *appUser = uniqueString;
    [currentInstallation addUniqueObject:appUser forKey:@"channels"];
    [currentInstallation saveInBackground];
}

我不是100%确定你需要再次添加频道,因为didRegister方法处理逻辑,但我正在做它并且它似乎正常工作。然后在任何视图控制器中,您必须选择要跟随的人,只需调用PFInstallation对象,将其订阅到通道,然后保存。

如果您想发送推送通知,则会将其发送给订阅这些频道的所有人。如果没有向安装注册设备令牌信息,则Parse将无法发送推送通知。

我相信iOS 8中的远程/推送通知会有一些细微的变化,因此如果你是针对iOS SDK构建的,那么对appDelegate方法的修改可能很少。

如果要删除用户的推送通知,则必须执行与注册过程相反的操作。调用安装,删除它将侦听的所有通道,然后保存。

据我了解,PFInstallation会查看是否存在与appBundle相关的安装实例。因此,如果您要注销并重新登录,它会将设备和安装识别为相同。只有在我没有正确清理频道时,我才会遇到登出和推送通知的问题。在创建多个安装的同一设备上删除和重新安装时,也会遇到测试困难。我还没有找到解决这个问题的好方法,但如果你这样做,请告诉我。

希望有所帮助。