How to use PushMeBaby sample to send Apple Push Notifications?
I am trying to use PushMeBaby sample APN Server application to send push notifications to m开发者_开发技巧y device. I have adhoc distribution application. For my application ID I have created both ssl certificates for development and production. It seems to be not sending push notifications from PushMeBaby application, I have alread installed Push SSL certificates to the tool chain.. still it seems to be not working..
2010-02-01 07:20:49.578 PushMeBaby[7193:a0f] MakeServerConnection(): 0
2010-02-01 07:20:49.613 PushMeBaby[7193:a0f] SSLNewContext(): 0
2010-02-01 07:20:49.614 PushMeBaby[7193:a0f] SSLSetIOFuncs(): 0
2010-02-01 07:20:49.614 PushMeBaby[7193:a0f] SSLSetConnection(): 0
2010-02-01 07:20:49.615 PushMeBaby[7193:a0f] SSLSetPeerDomainName(): 0
2010-02-01 07:20:49.631 PushMeBaby[7193:a0f] SecKeychainOpen(): 0
2010-02-01 07:20:49.648 PushMeBaby[7193:a0f] SecCertificateCreateFromData(): 0
2010-02-01 07:20:49.655 PushMeBaby[7193:a0f] SecIdentityCreateWithCertificate(): 0
2010-02-01 07:20:49.656 PushMeBaby[7193:a0f] SSLSetCertificate(): 0
2010-02-01 07:20:52.353 PushMeBaby[7193:a0f] SSLHandshake(): 0
2010-02-01 07:20:57.954 PushMeBaby[7193:a0f] SSLWrite(): 0 144
Above is the log of PusheBaby xcode application.
OK - Figured this out.
The device token I was passing in (which I got from UrbanAirship) had no spaces. I used the device token from the console from the iPhone app per this great tutorial (http://mobiforge.com/developing/story/programming-apple-push-notification-services) which has spaces between every 8 chars in the string. That did the trick.
The device token should look like this - 38c866dd bb323b39 ffa73487 5e157ee5 a85e0b7c e90d56e9 fe145bcc 6c2c594b
Later - when you look at the NSLog from PushMeBaby - you will see the "processed" count in the SSLWrite call increased by 1 (mine went from 104 to 105) e.g. 2011-04-28 11:21:41.543 PushMeBaby[49218:903] SSLWrite(): 0 105
Hope this helps somebody else who struggled like me for days...
Just thought I'd add my two cents here since this got me too. If you realized that the device token should have had spaces, then to never have this problem again replace this section of code:
// Validate input.
if(self.deviceToken == nil || self.payload == nil) {
return;
}
with this:
// Validate input.
if(self.deviceToken == nil || self.payload == nil) {
return;
}
else if(![self.deviceToken rangeOfString:@" "].length)
{
//put in spaces in device token
NSMutableString* tempString = [NSMutableString stringWithString:self.deviceToken];
int offset = 0;
for(int i = 0; i < tempString.length; i++)
{
if(i%8 == 0 && i != 0 && i+offset < tempString.length-1)
{
//NSLog(@"i = %d + offset[%d] = %d", i, offset, i+offset);
[tempString insertString:@" " atIndex:i+offset];
offset++;
}
}
NSLog(@" device token string after adding spaces = '%@'", tempString);
self.deviceToken = tempString;
}
yes for Push me baby the device token should be
45f62964 06523099 b66017f7 0eb3ea7d 14140c11 af6f14a0 c24145d1 90005763
not
<45f62964 06523099 b66017f7 0eb3ea7d 14140c11 af6f14a0 c24145d1 90005763>
or
45f6296406523099b66017f70eb3ea7d14140c11af6f14a0c24145d190005f9c
if you include the <> it goes into an infinite loop in an NSScanner
Though officially the device token should include <> and spaces as thats what you get when you RegisterDevice if you use it in other apps such as APN TESTER on MAC APP STORE
<45f62964 06523099 b66017f7 0eb3ea7d 14140c11 af6f14a0 c24145d1 90005763>
Just add this before
// Convert string into device token data.
to -(IBAction)push:(id)sender;
in ApplicationDelegate.h
.
if (![self.deviceToken rangeOfString:@" "].length) {
NSMutableString *string = [self.deviceToken mutableCopy];
for (int i = 8; i < string.length; i+=8) {
[string insertString:@" " atIndex:i];
}
self.deviceToken = string;
}
And now you it is supported the "spaceless" format.
精彩评论