Push notification 如何测试推送通知反馈服务?

Push notification 如何测试推送通知反馈服务?,push-notification,apple-push-notifications,Push Notification,Apple Push Notifications,您将如何在沙箱中测试APNS反馈服务?或者换句话说,您如何强制设备进入反馈?如果您从设备中删除应用程序,您只需尝试向该设备发送一个通知,下次连接到反馈服务器时,它将返回该设备。在您尝试向该设备发送另一个通知之前,它不会再次返回该设备 此外,如果在与反馈服务器的连接之间向设备发送多个通知,每次收到通知时,设备都会被返回。我知道已经接受了答案,但为了进行第一轮测试,而不必不断地从我的手机/ipod上安装和删除我的应用程序,我创建了一个非常简单的ruby脚本作为反馈服务器。我将ruby APNS类配置

您将如何在沙箱中测试APNS反馈服务?或者换句话说,您如何强制设备进入反馈?

如果您从设备中删除应用程序,您只需尝试向该设备发送一个通知,下次连接到反馈服务器时,它将返回该设备。在您尝试向该设备发送另一个通知之前,它不会再次返回该设备


此外,如果在与反馈服务器的连接之间向设备发送多个通知,每次收到通知时,设备都会被返回。

我知道已经接受了答案,但为了进行第一轮测试,而不必不断地从我的手机/ipod上安装和删除我的应用程序,我创建了一个非常简单的ruby脚本作为反馈服务器。我将ruby APNS类配置为连接到此服务器(localhost:2196)并从中读取。我没有初始化SSL连接,所以我只使用了基本套接字。下面是我用来“托管”服务器的脚本

#!/usr/bin/env ruby

require 'socket'

puts 'Opening server'
server = TCPServer.open(2196)

loop {
    puts 'Waiting for connection'
    client = server.accept

    puts 'Connected preparing data'
    data = [1, 2, 3, 4, 0, 32, ['d41c3767074f541814c2207b78f72e538569cb39eae60a8c4a8677549819e174']]
    puts 'Data for delivery: ' + data.inspect

    begin
        data[6] = data[6].pack('H*')
        data = data.pack('c6a*')

        loop {
            puts 'Writing Data'
            client.write data

            puts 'Sleeping for 5 seconds'
            sleep 5
        }
    rescue
    end
    puts 'Done writing, closing'
    client.close
}
此脚本将侦听,当它每5秒收到一个连接时,向套接字写入一个数据包。如果连接套接字关闭(例如,您终止了反馈进程),则此脚本将重置并等待新连接


记住,不要只使用标准的ruby套接字来使用SSL连接。祝你好运

我认为,从第一轮的问题“是的,但是你如何让一些东西出现在那里?”实际上来自这样一个事实,即他的测试没有返回任何设备,即,尽管他可能已经成功地将通知发送到iPhone/iPad,但每当他查询FB服务器时,都没有返回任何信息,正是因为该应用程序从未从设备中删除,因此服务器同样乐意继续回答“找到0个设备”(例如),因为没有设备无法接收通知

因此,当从设备中删除应用程序时,通知服务器才会提供反馈,即,它最终会回答删除应用程序的设备列表

本地服务器的想法也很好

-亚历克斯

============== 苹果建议至少保留一款推送应用程序,这有一个令人讨厌的副作用。以下是我对贴在帖子上的文档的建议:

关于“反馈服务器的问题”,有两种情况值得注意: 1) 应用程序以生产模式部署到真实设备; 2) 将应用程序部署到开发设备、沙箱中

在1)的提示留下最后一个应用程序(我希望它是正确的),应该工作的描述;这里没有问题

在2)中,必须确保最后一个应用程序也是开发应用程序。或者换句话说,为了让事情变得更简单,有第二个“沙盒应用程序”,只在那里按“最后一个人开关”

我遇到的问题是,一旦我删除我的开发应用程序,沙盒反馈服务器上就不会发生任何事情,即使设备上还有其他支持推送的应用程序,但它们都是生产应用程序,因此,它们会向生产反馈服务器“报告”(如果可以这么说的话)

您的应用程序的第二个副本(沙盒应用程序)是我们想要的,因此它可以保持与沙盒服务器的持久连接。。。然后,当您删除“正在测试的应用程序”时,您的沙盒应用程序将有希望向沙盒报告,您可以进行实际测试


希望这是正确的。。。将测试tonite。

我可以确认您确实需要在使用沙盒服务器的设备上安装第二个应用程序,以便获得您正在测试的应用程序的反馈。这可以是一个简单的应用程序,其行为:[[UIApplication sharedApplication]registerForRemoteNotificationTypes:UIRemoteNotificationTypeAlert];在应用程序委托的didFinishLaunchingWithOptions方法中。@DougC如何创建第二个应用程序。如果使用相同的证书创建并更改应用程序的名称,则第二个证书将取代第一个证书。您能给我一些建议吗。非常感谢你!苹果在哪里注意到了这两种情况?这是一个令人惊讶的答案,但是您在哪里找到了这个源代码?c:\telnet localhost 2196->works。c:\telnet 127.0.0.1 2196->不正常工作,。为什么会这样?另外,Indy TcpClient给了我一个被拒绝的连接。@T.S该错误意味着服务器没有监听127.0.0.1
localhost
不一定只引用127.0.0.1,通过
gethostbyname()
getaddrinfo()
的查找查询可以将其解析为实际的本地IP,而
telnet
将尝试连接到该IP,直到成功。但Indy只将
localhost
视为127.0.0.1,而不尝试动态解析它。当Indy解析主机名时,它不会尝试连接到所有报告的IP。这是一个todo项。通过替换以下行进行修复:“server=TCPServer.open”(“127.0.0.1”,2196)”