解析安装与用户之间的差异

时间:2014-10-12 19:19:25

标签: ios push-notification parse-platform

我最近将我的iOS游戏发布到App Store,当我注意到#Recipients(=#Installations)大约是#Users(在Parse仪表板上)的1/3时,我即将发送我的第一个推送通知。

我使用Parse 1.2.21发布(随后升级到1.4.1,但尚未发布)。

我怀疑有2/3的用户选择退出通知。

注意:我没有实现didFailToRegisterForRemoteNotificationsWithError(现在为下一个版本添加了)。

我唯一的理论如下:

  • 当我发布到App Store时,我没有意识到“发布到生产”开关(没有发布)。
  • 一周后,我注意到这个按钮并将其切换为YES。
  • 昨天,我测试了推送通知,并确认已将其发送到安装的良好样本。

理论:在我启用“发布到生产”之前,开发APN正在使用,因此失败了。

更好的想法为什么#Installations是#Users的1/3? : - )

这是我的代码:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    ...
    // Parse: Enable auto-user.
    [PFUser enableAutomaticUser];
    [[PFUser currentUser] incrementKey:@"runCount"];

    // Save the user to force a round trip w/ Parse (and obtain objectId if not already).
    [[PFUser currentUser] saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {
        if (succeeded) {
            NSLog(@"AppDelegate::application: Save PFUser succeeded: %@, objectId: %@", [PFUser currentUser], [PFUser currentUser].objectId);
        } else {
            // Log details of the save failure.
            if ([error code] == kPFErrorObjectNotFound) {
                // This user does not exist.
                NSLog(@"AppDelegate::application: RARE CASE: The current PFUser does not exist on Parse! This is probably due to us deleting the user to force a reset or a mistake. Logging this user out... lazily creating new PFUser...");
                [PFUser logOut];
            } else {
                // Other errors.
                NSLog(@"AppDelegate::application: RARE CASE: Saving the PFUser currentUser FAILED! currentUser: %@, objectId: %@.... saving eventually in attempt to re-try...", [PFUser currentUser], [PFUser currentUser].objectId);
                // Save eventually to ensure it gets saved.
                [[PFUser currentUser] saveEventually];
            }
            NSString *codeString = [NSString stringWithFormat:@"Save PFUser (app init), code:%d", [error code]];
            [PFAnalytics trackEvent:@"error" dimensions:@{ @"code": codeString }];
        }
    }];
    ...

    // Parse: Register for push notifications
    if ([application respondsToSelector:@selector(isRegisteredForRemoteNotifications)])
    {
        // iOS 8 Notifications
        UIUserNotificationSettings *settings =
            [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert |
                                                         UIUserNotificationTypeBadge |
                                                         UIUserNotificationTypeSound
                                              categories:nil];
        [[UIApplication sharedApplication] registerUserNotificationSettings:settings];
        [[UIApplication sharedApplication] registerForRemoteNotifications];
    } else {
        // iOS < 8 Notifications
        [application registerForRemoteNotificationTypes: UIRemoteNotificationTypeBadge |
                                                         UIRemoteNotificationTypeAlert |
                                                         UIRemoteNotificationTypeSound ];
    }
}

成功:

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)newDeviceToken {
    // Store the deviceToken in the current installation and save it to Parse.
    PFInstallation *currentInstallation = [PFInstallation currentInstallation];
    [currentInstallation setDeviceTokenFromData:newDeviceToken];
    [currentInstallation saveInBackground];
}

故障:

- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error
{
    // An error occured during register push notifs.
    NSLog(@"ERROR:didFailToRegisterForRemoteNotificationsWithError: error: %d, %@", error.code, error.description );

    NSString *codeString = [NSString stringWithFormat:@"Register Push Notifications, code:%d", [error code]];
    [PFAnalytics trackEvent:@"error" dimensions:@{ @"code": codeString }];
}`

2 个答案:

答案 0 :(得分:1)

我经历了同样的情况,可以直接说出来。是的,你的“释放到生产”问题是最可能的罪魁祸首。

如果用户每天/每周不使用该应用,也需要时间选择加入。当我们添加推送通知时,我们的安装比率:用户约为70%。问题是它只是要求用户在下次使用应用程序后添加推送,并且有些用户可能需要几天或几周再次打开应用程序并被要求注册(并创建他们的安装对象)。现在我们已经将系统启动并运行了3个月,这个比例超过了95%;几乎所有用户都选择了推送。

请耐心等待,最终您的报道会以用户身份上升:)

答案 1 :(得分:0)

我所有的理论都错了。 : - )

我现在99%确定2/3的用户确实拒绝批准推送通知,因为我在应用初始化期间立即询问(即在新用户与我的应用建立任何忠诚度或信任之前)。

而且,考虑到你真的只能得到一个机会,这对你的应用来说可能是一个重要的决定。

在阅读了大量关于最佳实践的建议之后,共识似乎是:

  1. 要求用户在对用户有意义的时间或在发生好事之后批准推送通知。理想情况下,您可以为他们想要批准的原因提供一个很好的案例。请记住,您只获得一个机会(从技术上讲,他们可以更改此设置,但不太可能。)

  2. 考虑使用两阶段模式:第一个模态是由您创建的自定义模式,并询问他们是否会批准推送通知(以及您可以建立的任何动机和信任)。如果他们点击你的模态是,那么弹出Apple推送通知请求(ios8:registerUserNotificationSettings,

  3. 有几个人已经显示两步模式显着提高转换率的数据。