我正在我的应用中实现推送通知,一切似乎都很好,但我的设备没有收到推送通知。
我从上面的网址发出通知后得到了回复;
“连接到APNS消息已成功发送”。
但之后我的设备上没有通知。请建议我如何解决这个问题。
答案 0 :(得分:0)
首先查看有效负载,其中描述了推送通知的性质,这意味着它应该是应用图标上的短信或警告还是徽章。所以我们需要在 JSON的格式中正确设置它。先检查一下,
然后
阅读Ray Wenderlich论坛的精彩教程, 当然,你会发现一些错过的领域或步骤,
http://www.raywenderlich.com/3443/apple-push-notification-services-tutorial-part-12
答案 1 :(得分:0)
我收到同样的错误,因为我写错了设备令牌,请检查您的设备令牌@“< XXx XXXX xxx ..>”已更改为@“XXX XXX ..” 或者只需按照步骤
在app delegate中
in didlaunch
// Register for sound and alert push notifications.
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:
(UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)];
// Check if the app was launched in response to the user tapping on a
// push notification. If so, we add the new message to the data model.
if (launchOptions != nil)
{
NSDictionary* dictionary = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
if (dictionary != nil)
{
NSLog(@"Launched from push notification: %@", dictionary);
// [self addMessageFromRemoteNotification:dictionary updateUI:NO];
}
}
#pragma mark -
#pragma mark Apple Push notifications
- (void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken
{
// We have received a new device token. This method is usually called right
// away after you've registered for push notifications, but there are no
// guarantees. It could take up to a few seconds and you should take this
// into consideration when you design your app. In our case, the user could
// send a "join" request to the server before we have received the device
// token. In that case, we silently send an "update" request to the server
// API once we receive the token.
NSString* oldToken = [self deviceToken];
NSString* newToken = [deviceToken description];
newToken = [newToken stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"<>"]];
newToken = [newToken stringByReplacingOccurrencesOfString:@" " withString:@""];
NSLog(@"My token is: %@", newToken);
[self setDeviceToken:newToken];
// If the token changed and we already sent the "join" request, we should
// let the server know about the new device token.
// if ([dataModel joinedChat] && ![newToken isEqualToString:oldToken])
// {
// [self postUpdateRequest];
// }
}
- (void)application:(UIApplication*)application didFailToRegisterForRemoteNotificationsWithError:(NSError*)error
{
// If we get here, the app could not obtain a device token. In that case,
// the user can still send messages to the server but the app will not
// receive any push notifications when other users send messages to the
// same chat room.
NSLog(@"Failed to get token, error: %@", error);
}
- (void)application:(UIApplication*)application didReceiveRemoteNotification:(NSDictionary*)userInfo
{
// This method is invoked when the app is running and a push notification
// is received. If the app was suspended in the background, it is woken up
// and this method is invoked as well. We add the new message to the data
// model and add it to the ChatViewController's table view.
NSLog(@"Received APNS notification: %@", userInfo);
[self log:[NSString stringWithFormat:@"Received APNS notification: %@", userInfo]];
UIAlertView* nofity = [[ UIAlertView alloc]initWithTitle:@"APNS" message:@"Test Successfull" delegate:nil
cancelButtonTitle:@"ok" otherButtonTitles: nil];
[nofity show];
// [self addMessageFromRemoteNotification:userInfo updateUI:YES];
}
- (NSString*)deviceToken
{
return [[NSUserDefaults standardUserDefaults] stringForKey:@"DeviceTokenKey"];
}
- (void)setDeviceToken:(NSString*)token
{
[[NSUserDefaults standardUserDefaults] setObject:token forKey:@"DeviceTokenKey"];
}
- (NSString*)udid
{
UIDevice* device = [UIDevice currentDevice];
return [device.uniqueIdentifier stringByReplacingOccurrencesOfString:@"-" withString:@""];
}
从上面的代码中获取设备令牌。
<强>测试强> 将设备令牌传递给Push me baby app
答案 2 :(得分:0)
检查以下
您是否获得了推送令牌?如果是,请删除空格,然后&lt;,&gt;来自推送令牌。
检查设备是否已连接到互联网
检查设置 - &gt;中是否启用了通知(横幅广告或弹出广告)通知 - &gt;您的申请 - &gt;选择横幅或提醒(弹出窗口)。
最有可能的是,任何这都是一个问题。
答案 3 :(得分:0)
一个简单的伎俩: 我遇到了同样的问题,双重检查了所有内容,重新创建了pem等,但是在我的上一次开发模式超时并且我重新创建它之后无法完成它。在应用程序运行数月之前。
最终帮助真正从手机上擦除并重新安装它。 似乎某些存储的数据有点腐败......
请记住,应用程序将注册一个新令牌。