我最近将我的iOS游戏发布到App Store,当我注意到#Recipients(=#Installations)大约是#Users(在Parse仪表板上)的1/3时,我即将发送我的第一个推送通知。
我使用Parse 1.2.21发布(随后升级到1.4.1,但尚未发布)。
我怀疑有2/3的用户选择退出通知。
注意:我没有实现didFailToRegisterForRemoteNotificationsWithError(现在为下一个版本添加了)。
我唯一的理论如下:
理论:在我启用“发布到生产”之前,开发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 }];
}`
答案 0 :(得分:1)
我经历了同样的情况,可以直接说出来。是的,你的“释放到生产”问题是最可能的罪魁祸首。
如果用户每天/每周不使用该应用,也需要时间选择加入。当我们添加推送通知时,我们的安装比率:用户约为70%。问题是它只是要求用户在下次使用应用程序后添加推送,并且有些用户可能需要几天或几周再次打开应用程序并被要求注册(并创建他们的安装对象)。现在我们已经将系统启动并运行了3个月,这个比例超过了95%;几乎所有用户都选择了推送。
请耐心等待,最终您的报道会以用户身份上升:)
答案 1 :(得分:0)
我所有的理论都错了。 : - )
我现在99%确定2/3的用户确实拒绝批准推送通知,因为我在应用初始化期间立即询问(即在新用户与我的应用建立任何忠诚度或信任之前)。
而且,考虑到你真的只能得到一个机会,这对你的应用来说可能是一个重要的决定。
在阅读了大量关于最佳实践的建议之后,共识似乎是:
要求用户在对用户有意义的时间或在发生好事之后批准推送通知。理想情况下,您可以为他们想要批准的原因提供一个很好的案例。请记住,您只获得一个机会(从技术上讲,他们可以更改此设置,但不太可能。)
考虑使用两阶段模式:第一个模态是由您创建的自定义模式,并询问他们是否会批准推送通知(以及您可以建立的任何动机和信任)。如果他们点击你的模态是,那么弹出Apple推送通知请求(ios8:registerUserNotificationSettings,
有几个人已经显示两步模式显着提高转换率的数据。