我使用本教程为推送通知制作了一个示例 PushTest 应用程序。
使用上面的教程,我收到“PushTest”想向您发送推送通知(仅一次)的消息,之后我从 iPhone 中删除了该应用程序,重新启动 iPhone,但无法再次收到相同的消息。
我已运行脚本 sample.php(更新建议的更改)并收到消息“已连接到 APNS”和“您的消息发送”。
但我没有收到任何推送通知。
请指导我哪里错了?
或者我尝试接收推送通知的内容。
我使用本教程为推送通知制作了一个示例 PushTest 应用程序。
使用上面的教程,我收到“PushTest”想向您发送推送通知(仅一次)的消息,之后我从 iPhone 中删除了该应用程序,重新启动 iPhone,但无法再次收到相同的消息。
我已运行脚本 sample.php(更新建议的更改)并收到消息“已连接到 APNS”和“您的消息发送”。
但我没有收到任何推送通知。
请指导我哪里错了?
或者我尝试接收推送通知的内容。
仅在 2 种情况下您不会收到推送
1.) 如果您的应用程序在前台。
2.)您的设备令牌对于接收推送通知无效,如果您仍然没有收到推送,请检查两个条件,请告诉我。谢谢
确保您使用的是启用推送通知的配置文件。然后检查您是否正在向服务器发送令牌。
除非手机已充满电,否则切勿在开发模式(连接手机)下开始测试推送。
https://developer.apple.com/library/archive/technotes/tn2265/_index.html
如果您的通知负载包含内容可用密钥,则如果 iOS 或 OS X 确定这样做是节能的,您的应用程序将收到通知。如果超出设备的能源或数据预算,您的应用将不会再收到任何带有内容可用密钥的通知,直到预算被重置。这每天发生一次,并且不能由用户或开发人员操作更改。
一般来说,关于手机电池状态的通知(特别是当你被拴住时)非常不稳定。(此外,那篇文章中提到的一些非常古老的东西是完全错误的。)基本上,如果您的手机进入“由于电池而不会收到通知”模式,您通常永远不会收到通知 - 它可以去连续几天。
在 iOS 上,推送通知会尽可能使用蜂窝数据网络,即使设备当前正在使用 Wi-Fi 进行其他网络活动,例如网页浏览或电子邮件。但是,如果蜂窝数据服务不可用,推送服务将退回到 Wi-Fi。
这在不同的 iOS 版本中发生了很大变化,但这是一个巨大的麻烦。
不要忘记:
构建到系留电话。您只会收到“沙盒、开发”推送通知。 但是那些几乎没有工作 - 他们很晚才到达,不在某些地区工作,等等。它们太脆弱了,通常不值得尝试。
增加内部版本号,为试飞正常构建,发送到试飞,然后从试飞安装。您现在将获得正确、正常的 APPLE PUSH 通知。
非常令人困惑你!做!获得有关开发测试飞行构建的真实推送通知。
也就是说 - 当您构建到 TestFlight 时,您确实会获得与在应用商店上发布并由您的公共用户使用的实际应用程序完全相同的“真实”推送通知- 真实、真实的 APNS 推送通知。
令人难以置信的令人困惑的“开发、沙盒”推送通知仅适用于“系留电话构建”。(而且,为了增加混乱,“开发,沙盒”推送通知非常不可靠,所以你永远不知道它们是否有效。)
我遵循了相同的教程。
确保您的应用程序列在通知中心,并且它的警报类型是任何但不是无。
您需要在 3 个条件下检查您的通知,
当您的应用程序打开、在后台和关闭时。
为此,您需要检查这些方法
// To Register your device token
- (void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken
//If your app is not able to register
- (void)application:(UIApplication*)application didFailToRegisterForRemoteNotificationsWithError:(NSError*)error
{}
//Your app receives push notification.
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
UIApplicationState state = [application applicationState];
// If your app is running
if (state == UIApplicationStateActive)
{
//You need to customize your alert by yourself for this situation. For ex,
NSString *cancelTitle = @"Close";
NSString *showTitle = @"Get Photos";
NSString *message = [[userInfo valueForKey:@"aps"] valueForKey:@"alert"];
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@""
message:message
delegate:self
cancelButtonTitle:cancelTitle
otherButtonTitles:showTitle, nil];
[alertView show];
[alertView release];
}
// If your app was in in active state
else if (state == UIApplicationStateInactive)
{
}
}
如果应用程序的通知已打开,请检查您设备的设置,并确保通知中心的通知类型不是“无” 。
并且您的应用程序已最小化。如果应用程序没有最小化使用
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
NSLog(@"info %@", userInfo);
}
有关问题的其他有用信息。
对于 TESTING 推送,您可以使用APN Tester Free。 注意:插入带有空格的标记。
我没有得到任何东西:
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any])
但是我的编译器在断点处停止
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void)
我遇到了类似的问题。一切都在代码中正确完成。我正在使用开发配置文件运行该应用程序,并在指向生产的服务器(iOS)上推送通知。确保您的配置文件与服务器设置匹配(沙盒与生产)。您还可以确保您的设备正确注册。