标签: apple-push-notifications

尝试进行推送通知时获取SSL Broken pipe错误

我们开发了一个iPhone应用程序,并为开发和临时版本提供推送通知.但是当我们尝试向我们数据库中的真实用户设备发送推送通知时,我们得到了SSL连接重置,然后是管道错误.我们认为我们的数据库中可能有太多设备(超过70000),因此无法同时发送所有消息.所以我们尝试将消息发送到1000个设备一次,但仍然有大约100条消息的"Broken pipe"错误.我们不确定邮件是否已发送.有什么建议吗?

iphone apple-push-notifications

18
推荐指数
2
解决办法
1万
查看次数

如果在iOS 8.0及更高版本中不支持registerForRemoteNotificationTypes:,则为iOS构建

如果设备注册通知的方式发生了重大变化,我们无法使用registerForRemoteNotificationTypes:如果我们不能使用Xcode 6 beta,我们如何构建新版本的应用程序以支持iOS 8?我们是否必须构建并提交Xcode 6 GM版本发布的日期,以便我们的用户继续获得推送通知?

xcode apple-push-notifications ios xcode6 ios8

18
推荐指数
4
解决办法
2万
查看次数

iPhone registerForRemoteNotificationTypes不会生成错误,但不会触发提供设备令牌的委托

我正在开发一个需要推送通知的iPhone应用程序.我按照说明创建了认证并修改了应用ID.我并不完全确定我这样做是正确的,但我的确遵循了指示.知道如何检查这是否正常?

当我在模拟器中运行时,我收到一条错误消息,指出模拟器不支持推送通知.这有点预期.

顺便说一下:我有几次看似这个问题.它总是似乎是一个破牢的手机.我的手机没有被囚禁.

但是当我在iPhone上调试时,didRegisterForRemoteNotificationsWithDeviceToken方法永远不会被触发.我真的很感激一些帮助.我的代码如下.

-(void)applicationDidFinishLaunching:(UIApplication *)application 
{    
   rootController.delegate = self;
   [window addSubview:rootController.view];
   [window makeKeyAndVisible];

   [[UIApplication sharedApplication] 
   registerForRemoteNotificationTypes:
   (UIRemoteNotificationTypeAlert | 
     UIRemoteNotificationTypeBadge | 
     UIRemoteNotificationTypeSound)];
}

- (void)application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken 
{ 
   NSString *str = 
    [NSString stringWithFormat:@"%@",deviceToken];
    NSLog(str);
}

- (void)application:(UIApplication *)app didFailToRegisterForRemoteNotificationsWithError:(NSError *)err 
{ 
    NSString *str = [NSString stringWithFormat: @"Error: %@", err];
    NSLog(str);    
}
Run Code Online (Sandbox Code Playgroud)

iphone apple-push-notifications devicetoken ios appdelegate

17
推荐指数
3
解决办法
2万
查看次数

无法连接到APNS:返回代码20(无法获得本地颁发者证书)

我正在尝试使用PyAPNS将推送通知发送到iPhone应用程序.我们已经完成了从Apple开发中心获取证书的过程,该工作正常; 但是,我们已经按照几个不同的教程来了解如何将证书和私钥组合到一个.pem文件中,并且对于所有这些文件,尝试使用结果证书从我们的Web服务器使用OpenSSL连接到APNS服务器这个错误:

$ openssl s_client -connect gateway.sandbox.push.apple.com:2195 -cert apns.pem
CONNECTED(00000003)
depth=1 C = US, O = "Entrust, Inc.", OU = www.entrust.net/rpa is incorporated by  reference, OU = "(c) 2009 Entrust, Inc.", CN = Entrust Certification Authority - L1C
verify error:num=20:unable to get local issuer certificate
verify return:0
[...certificate chain, server certificate, etc.]
Run Code Online (Sandbox Code Playgroud)

有时我们能够在所有这些内容中键入内容,并且在我们按Enter键之前连接不会关闭,有时不会(它立即关闭),但即使我们看起来有连接,PyAPNS也会在我们尝试时失败发送推送通知,给出错误"故障500:'无法建立到APNS服务器的连接'.",我只能假设与"无法获得本地颁发者证书"相同的原因 - 尽管我不知道那可能是什么原因.

我们一直关注的教程包括:

http://blog.serverdensity.com/how-to-build-an-apple-push-notification-provider-server-tutorial/

http://www.raywenderlich.com/3443/apple-push-notification-services-tutorial-part-12

http://www.nasoni.net/2010/12/02/apns-client-development-certificate/

http://thebirdytoldmeso.com/%28S%28l131v3jmvpdh5255u1jayp20%29%29/userActions/thread/Question.aspx?id=10302792

是的,我们一直在从私钥中删除密码,当我们尝试连接OpenSSL时它没有要求它,所以可能这部分工作正常.

我们不知道出了什么问题.令人生气的是,所有这些教程(以及Apple,显然)都认为你使用的是Mac,而我正在开发Windows,而服务器(我就是那个)正在使用Ubuntu; 我的同事在Mac上已经做了第一步的各种前缀,然后将结果文件发送给我上传到服务器并执行最后的步骤.不管怎样,这可能与它有关吗?或者是否有必要的服务器设置步骤到处都被省略?

ssl ssl-certificate push-notification apple-push-notifications

17
推荐指数
1
解决办法
4869
查看次数

Google/Apple推送通知服务(APNS/GCM)

我正在尝试为Android和iOS创建应用程序,我想在应用程序上使用推送通知.我将要有一个将发送通知的服务器应用程序.

我想弄清楚的是我们如何存储用户的设备,以便我知道哪些服务需要使用APNS或GCM.

其中一个方向是让应用程序设置手机类型并将此信息存储在服务器端,但如果用户将手机从iOS更改为Android,需要涉及用户的数据存储并收集信息会发生什么情况对于每个用户,不包括用户拥有Android平板电脑和iOS手机的情况.

使它更通用,同时将通知发送给服务APNS和GCM,其中一个会返回错误?

很想听听这种场景的最佳做法是什么?

android push-notification apple-push-notifications ios google-cloud-messaging

17
推荐指数
1
解决办法
3万
查看次数

iOS:生产推送通知,来自APNS服务器的无效令牌

我的应用程序现已在应用程序商店中提供,因此我已将其下载到我的设备中.推送通知在开发期间工作正常.我正在使用JavaPNS发送通知,我已将其切换为指向Apple的生产服务器.

但是,我现在从APNS服务器收到无效令牌错误.

我将Archive方案设置为"Release",并且我将Release set设置为使用此分发配置文件:

在此输入图像描述

在该配置文件中,您可以看到我正确设置了环境:

在此输入图像描述

但我仍然得到错误.当我查看我的数据库时,我认为应用程序返回给我的设备令牌与开发人员相同,因此可能是问题所在.但我不知道为什么它会返回,因为应用程序已正确签名.这是我用于测试的设备,这可能是个问题吗?关于这里发生了什么的任何其他想法?

谢谢!

编辑:我没有在我的代码中存储令牌,Eran的回答表明,唯一的其他可能性是我的数据库中的旧令牌,或者应用程序未被生产配置文件签名.我清理了我的数据库,所以我知道它不是前者,对于后者,我不知道情况会怎样,因为我只有一个分发配置文件,正如我上面所示,它正确设置"aps-environment"键.XCode甚至不允许我使用开发配置文件进行应用商店提交,是吗?其他一些可能性:

我通过通知发送的密钥出错可能会导致"无效令牌"吗?如果是,我可以为现有配置文件重新生成此密钥吗?

为推送通知,AppID中是否包含另一个配置文件?这可能导致无效令牌错误吗?

push-notification apple-push-notifications ios

17
推荐指数
2
解决办法
6万
查看次数

didRegisterForRemoteNotificationsWithDeviceToken从未在特定设备上调用过

首先,我在iPhone 6 Plus/iOS 8.1上,我已经在这里尝试了一切:为什么没有调用RegisterForRemoteNotificationsWithDeviceToken

仍然无济于事.总结一下:

  • 我已经检查了我的捆绑标识符与配置文件/开发门户中的标识符匹配
  • 我已经创建了一个新的开发推送APNS证书
  • 我已经创建了一个新的开发证书
  • 我为该开发证书创建了一个新的配置文件
  • 我已经下载了证书和配置文件,显然,双击它们进行安装
  • 我已经验证了Developer Portal上的一切正确:所有证书和配置文件都有效,推送已启用并配置了我的新APNS证书
  • 我已将我的新APNS证书上传到Parse(这一步与此无关,但无论如何)因为我正在使用Parse作为后端
  • 我确保在Xcode上使用正确的证书/配置文件对进行协同设置
  • 我已经检查了通知设置以防我的应用程序不允许接收推送,它不存在
  • 我已经尝试手动设置日期到明天,并尝试重新安装该应用程序
  • 我已从设备中删除了该应用
  • 我已从设备中删除了任何相关的配置文件
  • 我多次重启我的设备

application:didFinishLaunchingWithOptions:我打电话:

if([application respondsToSelector:@selector(registerUserNotificationSettings:)]){
        //iOS 8+
        [application registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge) categories:nil]];
    }else{
        //pre-iOS 8
        [[UIApplication sharedApplication] registerForRemoteNotificationTypes:
         (UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)];
    }
Run Code Online (Sandbox Code Playgroud)

application:didRegisterUserNotificationSettings:我打电话:

[application registerForRemoteNotifications];
Run Code Online (Sandbox Code Playgroud)

我用断点检查了它,它被调用了.我还实现了两种方法:

application:didRegisterForRemoteNotificationsWithDeviceToken:

application:didFailToRegisterForRemoteNotificationsWithError:

但是,它们都没有被称为.不是错误,没有.控制台也没有错误.(我今天早些时候遇到了有关权利的问题,但创建了新的证书/配置文件解决了这个问题)

可能是什么问题?

更新:这是一些东西.在application:didRegisterUserNotificationSettings:我检查的通知设置,这里是我得到了什么:

(lldb) po notificationSettings
<UIUserNotificationSettings: 0x170031cc0; types: (none);>
Run Code Online (Sandbox Code Playgroud)

更新2:我再次检查了通知,发现现在我的应用程序被添加到设置中的通知中,它已启用,具有权限.但是,仍然没有调用处理程序.类型是没有的.我99%肯定这与问题有关.

更新3:我已经在另一台设备上测试过(iPod touch,iOS 8.1),我没有遇到任何问题.它立即application:didRegisterForRemoteNotificationsWithDeviceToken:使用其令牌调用该方法.问题是我的iPhone特有的.

xcode push-notification apple-push-notifications ios provisioning-profile

17
推荐指数
2
解决办法
1万
查看次数

APNS + PHP"stream_socket_client():无法启用加密"

我在使用APNS和PHP时遇到问题,并收到以下消息:

stream_socket_client(): Failed to enable crypto
Run Code Online (Sandbox Code Playgroud)

这个问题有时只会发生,有时候实际上会发送推送.

由于我在10次迭代的循环上有测试脚本,我有时会得到这个:

stream_socket_client(): SSL: Connection reset by peer
Run Code Online (Sandbox Code Playgroud)

我正在使用沙盒服务器进行测试 tls://gateway.sandbox.push.apple.com:2195

这是我尝试过的:

  • 我试着重新发行PEM和所有证书.
  • 我玩了请求协议sslv3://tls://.
  • 我玩了密码(推文没有密码短信)
  • 我尝试搜索stackoverflow的解决方案,没有任何工作.
  • 检查pem文件权限 644
  • 检查pem父目录权限 755

似乎我在Google和SO上找到的所有解决方案都是人们完全没有问题.

我觉得这项服务的速度有限吗?因为我们等待了一段时间(大约15分钟)然后再次尝试,并且能够成功地推送大约100条消息,直到我再次开始收到该消息.

php push apple-push-notifications ios apns-php

17
推荐指数
2
解决办法
3万
查看次数

当从背景唤醒应用程序时,voip推和常规推送之间的区别

我有一个消息服务,我用它来定期推送通知.例如,当一个用户发送消息时,另一个用户接收带有该消息的推送通知.我注意到如果手机是wifi和3g/4g,应用程序被杀死(屏幕被锁定),将收到通知.如果设备仅在wifi上并且应用程序被杀死(并且屏幕被锁定),则不会收到通知.

我的假设是,为了节省电池,设备在一段时间后断开与wifi的连接,这就是没有收到推送通知的原因.

但是当我使用VOIP推送通知时,情况就不同了.即使应用程序被杀死且设备处于wifi状态(并且屏幕已锁定),也会收到通知.那么这是什么意思?如果手机与wifi断开连接,手机如何接收此通知?

我在这里错过了什么?

voip apple-push-notifications ios

17
推荐指数
2
解决办法
7621
查看次数

APNS生产和开发环境之间didReceiveRemoteNotification的差异行为

我注意到APNS生产和开发环境之间的didReceiveRemoteNotification的不同行为.

在开发模式(使用开发配置文件构建)中,当用户点击通知时,将调用此方法.在背景和活动状态.

但是在生产模式(使用adhoc配置配置文件构建)中,当用户点击通知时,如果应用程序处于后台或未处于活动状态,但当应用程序处于活动状态时,此方法在接收通知时会立即调用,则会调用此方法.

任何人都可以帮我理解这种不同的行为吗?

我希望我的用户在点击通知(处于活动状态)时重定向到不同的屏幕,但由于这种行为,他会自动重定向到其他屏幕.

push-notification apple-push-notifications ios remote-notifications

17
推荐指数
1
解决办法
414
查看次数