【问题标题】:Are Parse push notifications very unreliable? Only 50% of mine are receivedParse 推送通知是否非常不可靠?我的只收到了 50%
【发布时间】:2015-01-15 14:12:19
【问题描述】:

我正在构建一个应用程序,该应用程序将实现 Parse 后端以发送推送通知。用户将能够向其他用户发送包含在推送通知中的消息。我一直在玩这个,当我发送它时在 Parse 网站上注册很好,但只有大约 50% 的发送消息在设备上被接收。还有其他人有这个问题吗?我知道推送通知不能保证但有 50% 的成功率?有任何想法吗?

谢谢

代码如下:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {


    [Parse setApplicationId:@"***"
    clientKey:@"****"];

    UIUserNotificationType userNotificationTypes =     (UIUserNotificationTypeAlert |
                                                UIUserNotificationTypeBadge |
                                                   UIUserNotificationTypeSound);
    UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:userNotificationTypes
                                                                         categories:nil];
    [application registerUserNotificationSettings:settings];
    [application registerForRemoteNotifications];


return YES;

}


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

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
        [PFPush handlePush:userInfo];
}

- (void)notifyFriendAtIndex:(NSInteger)index completionHandler:(userCompletionHandler)handler
{

    PFQuery *pushQuery = [PFInstallation query];
    [pushQuery whereKey:@"deviceType" equalTo:@"ios"];

    NSString *pushMessage = [NSString stringWithFormat:@"From %@ HI!", self.currentUser.username];
    NSDictionary *pushData = @{@"alert": pushMessage, @"badge": @0, @"sound": @"notify.wav"};
    PFPush *push = [[PFPush alloc] init];
    [push setQuery:pushQuery];
    [push setData:pushData];
    [push sendPushInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {
        if (error) {
            NSLog(@"Error: %@ %@", error, [error userInfo]);
            handler(NO, error);
        }
        else {
            handler(YES, nil);
        }
    }];

}

【问题讨论】:

  • 这听起来像是一个用户端问题,到目前为止,parse.com 已被证明忠于它的基础。显示一些有关如何发送它们的相关代码。你在定义渠道、用户等吗?
  • 在上面添加了我的代码、AppDelegate 方法和我的 notify 方法。现在用户可以向所有 iOS 设备发送推送(仅用于测试目的)。看起来还好吗?
  • 看起来不错。再说一次,并不是说它们是完美的,但出于某种原因,它们是最好的之一,而且它们在过去并没有被证明是不可靠的。如果问题仍然存在,您应该向他们提交票证,以便他们进行调查。但只要仔细看看你的应用程序,此时它仍然感觉像是一个用户端问题。您如何跟踪您的推送成功率?
  • 实际上可能已修复它....粘贴代码时,我注意到 userinfo 在新行上,而不是在 (NSDictionary*) 旁边,也许我不小心按了返回。不知道为什么 Xcode 让我编译它……也不知道为什么它会有所作为。反正我已经改正了。只需花 20 分钟测试到目前为止,成功率是 100%!不想肯定地说它已经修复可能只是侥幸,但这是一个巨大的变化。以前从未有过100%。手指交叉......奇怪的错误 -
  • 我通过查看 Parse.com 控制面板上的推送部分来跟踪成功率。有人说推送是否传递到设备。到目前为止一切顺利。

标签: ios xcode parse-platform push-notification


【解决方案1】:

过去,我在 Parse 的推送通知交付方面没有遇到任何重大问题。我的一个应用拥有大约 32,000 台注册设备,并且似乎接近 100% 交付。

我还有几个聊天应用程序使用 Parse 作为消息传递和推送后端。用户可以订阅特定的聊天室并通过分段获得推送通知。其中一款应用刚刚推出,到目前为止推送通知已达到 100%。我唯一注意到的是有时会有轻微的延迟。也许一两分钟,但我认为这可能是因为 wifi 连接速度较慢。

我还将 PushWoosh 用于一般广播推送通知。它们很棒,但有时 PushWoosh 需要更长的时间才能交付。 Parse 通常更快,所以我认为 Parse 的推送通知是可靠的。

【讨论】:

  • 这只是按照 Parse.com 描述的方式实现推送通知吗?没有特殊方法?我想知道这是否是由于 wifi 速度慢...
  • 您也是使用免费的 Parse 服务还是付费的?
  • 我正在使用免费的 Parse 服务。在达到 100 万用户之前,它现在是免费的。
  • 除了- (void)notifyFriendAtIndex:(NSInteger)index completionHandler:(userCompletionHandler)handler 之外,与我使用的代码相比,它看起来还不错。您在代码中的什么地方调用它?
  • 我再次查看了您的代码。尝试注释掉currentInstallation.channels = @[ @"global" ]; 看看是否有区别。看起来您正在设置一个频道,但没有使用 PFPush 推送到该频道。
【解决方案2】:

根据我的经验,我得出的结论是,大部分是由于主要的推送通知传递者(Apple for iOS,Google for Android)。我这么说是因为我们在 Parse 中有一个应用程序,它可以在 iOS 和 Android 上发送推送通知,有些日子我们没有收到任何推送通知,有些则只有一些或全部。所有这一切都没有改变任何实现。过去,我使用了另一个名为 Urban Airship 的推送通知服务(依赖于适当的推送通知传递者),并且存在同样的问题,有些日子“几乎”可以,有些则没有工作。

只需检查您的测试设备是否在“安装”表中正确注册并设置了正确的 deviceToken。我们通过渠道发送推送通知服务器端。我在这里写代码也许它可以帮助你:

   var dataStruct ={
                        alert: "Hi there!",                            
                        my_additional_info: "normal chat message"
                    };

    Parse.Push.send({
            channels: ["your_custom_registered_installation_channel_device"],
            data: dataStruct
        }).then(function() {
            promise.resolve();
        }, function(error) {
            promise.reject(error);        
    });

所以通常它取决于一天,但如果你有这个统计数据 (50%),当你的 iPhone 注册推送通知时,安装可能并不总是注册/更新

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{        
    PFInstallation *currentInstallation = [PFInstallation currentInstallation];
    // Save/update device tocken
    [currentInstallation setDeviceTokenFromData:deviceToken];
    // store your channel 
    [currentInstallation setChannels:@["channel_123"]];
    [currentInstallation saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {
        // Do your stuff
    }];
}

【讨论】:

  • 谢谢,有没有办法模拟推送通知?就是想。那个 YO 应用程序一直使用推送通知,它应该是一个在投资者中享有盛誉的应用程序,但如果有一半的时间通知甚至不会通过,这似乎很奇怪......
  • 我已经为 iOS 部分编辑了更多信息的答案。无论如何,从您的 Parse Web 仪表板中,转到顶部菜单并单击“推送”。然后在右上角有“发送推送”按钮。单击它,您应该能够向一个或多个查询他们的用户发送推送通知
  • @Kex 是的,这似乎是正确的,我想您正在支持 iOS8+,因为您使用的是“[应用程序 registerForRemoteNotifications]”。我从来没有从客户端发送过推送通知,所以我不知道您是否还需要使用 [push setChannel:@"global"]
  • 我实际上可能已经修复了它....粘贴代码时,我注意到 userinfo 在新行上,而不是在 (NSDictionary*) 旁边,也许我不小心按了返回。不知道为什么 Xcode 让我编译它……也不知道为什么它会有所作为。反正我已经改正了。只需花 20 分钟测试到目前为止,成功率是 100%!不想肯定地说它已经修复可能只是侥幸,但这是一个巨大的变化。以前从未有过100%。手指交叉......奇怪的错误
  • 侥幸...回落到 50% 左右...可能取决于一天中的时间,晚上更忙之类的..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-17
  • 1970-01-01
  • 1970-01-01
  • 2014-09-20
  • 2014-10-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多