2009-07-03 97 views
48

是否可以在没有iPhone应用程序的情况下测试Apple推送通知服务? (在Windows上创建模拟器?)如何在没有iPhone的情况下测试Apple推送通知服务?

如果不是,我该如何测试?是否有免费的示例应用程序编译来做到这一点?

我创建了服务器提供程序,但我需要测试功能性。

+0

它的时间来更新最好的答案。我的答案中的图书馆非常有用,感谢'acoomans'! – kaspartus 2013-07-25 05:32:34

回答

64

很抱歉地说,但您需要找一些硬件来测试此功能。

推送通知在模拟器中不可用。它们需要iTunes Connect的配置文件,因此需要安装在设备上。这也意味着你可能不得不被苹果iPhone开发者计划接受,并支付99美元。

在iPhone OS 3.0更新中,您可以在任何设备(包括第一代iPhone)上测试此功能。

+2

我跑到同样的问题,你回答不清楚谈论问题的第二部分: `如果不是,我该如何测试?是否有免费的示例应用程序编译来做到这一点? 我创建了服务器提供程序,但我需要测试函数的所有权。' – JackLeo 2011-03-22 11:20:04

+16

很明显。你需要一个设备来测试。 – 2012-05-15 17:37:17

5

该模拟器不会执行推送通知。

而要从服务器推送,您必须让设备以及您的应用在该设备上推送。

该令牌包含应用程序标识以及设备标识。

43

您无法测试真正的推送通知。 但是,你可以测试你的应用程序的响应通过创建一个编程和手动触发你的AppDelegate的方法的模拟推送通知。

从不同的类(如一个UIViewController)触发此:

[[[UIApplication sharedApplication] delegate] 
        application:[UIApplication sharedApplication] 
    didReceiveRemoteNotification:testNotification]; 

的testNotification应具有相同的格式,作为一个真正的通知,即一个NSDictionary包含属性列表对象加NSNull。

下面是如何提供testNotification上面的例子:

NSMutableDictionary *notification = [[NSMutableDictionary alloc] init]; 
[notification setValue:@"Test" forKey:@"alert"]; 
[notification setValue:@"default" forKey:@"sound"]; 

NSMutableDictionary *testNotification = [[NSMutableDictionary alloc] init]; 
[testNotification setValue:notification forKey:@"aps"]; 

应该是一个以合理通知的NSDictionary的工作。

26

如今,我们可以用this library测试推送通知。

这是很容易通过终端发送推送:

echo -n '{"message":"message"}' | nc -4u -w1 localhost 9930 

echo -n '{"aps":{"alert" : "message","badge" : 99,"sound" : "default"}, "myField" : 54758}' | nc -4u -w1 localhost 9930 
3

,你必须使用

NSString *notificationString = @"{\"aps\":{\"alert\":\"Test alert\",\"sound\":\"default\"}}"; 

NSData *notificationData = [notificationString dataUsingEncoding:NSUTF8StringEncoding]; 

NSDictionary *testNotification = [NSJSONSerialization JSONObjectWithData:notificationData options:0 error:&error]; 

[[[UIApplication sharedApplication] delegate] application:[UIApplication sharedApplication] didReceiveRemoteNotification:testNotification fetchCompletionHandler:nil]; 
相关问题