APNS推送通知已发送但未在iOS设备上收到

时间:2015-12-03 16:00:44

标签: ios objective-c iphone push-notification apple-push-notifications

经过大量研究后,我发现这是一个很受欢迎的问题,但是我发布了一个新问题,因为它们都没有帮助解决我的问题。

我正在关注this tutorial,以便为Push Notifications设备创建iOS

看起来一切正常,因为当我执行simplepush.php代码时,它会返回

  

连接到APNS

     

消息已成功发送

但设备没有收到任何推送消息。

一些关键点:

  • 是的,它是开发人员证书,正在与sandbox服务器进行通信。没有搞乱生产问题。
  • 使用Pusher对其进行测试时,会返回“APN Invalid Token”日志,但我认为令牌正确生成。

这就是我在AppDelegate.m文件上获取令牌的方式:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // Override point for customization after application launch.

    if ([[UIApplication sharedApplication] respondsToSelector:@selector(registerUserNotificationSettings:)])
    {
        [[UIApplication sharedApplication] registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge) categories:nil]];

    }
    else
    {
        [[UIApplication sharedApplication] registerForRemoteNotificationTypes:
         (UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert)];
    }

    return YES;
}

#ifdef __IPHONE_8_0
- (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings
{
    //register to receive notifications
    [application registerForRemoteNotifications];
}

- (void)application:(UIApplication *)application handleActionWithIdentifier:(NSString *)identifier forRemoteNotification:(NSDictionary *)userInfo completionHandler:(void(^)())completionHandler
{
    //handle the actions
    if ([identifier isEqualToString:@"declineAction"]){
    }
    else if ([identifier isEqualToString:@"answerAction"]){
    }
}
#endif

- (void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken
{
    NSLog(@"My token is: %@", deviceToken);
}

-(void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error
{
    NSLog(@"Failed to get Token, error: %@",error);
}

启动应用程序时的令牌响应(对我来说没问题):

  

2015-12-03 13:27:27.930 PushChat [598:246912]我的代币是:8a0b645c 46c0547a 3078be82 52b4a82d 9b579530 fb9a902d>

可能会发生什么?

1 个答案:

答案 0 :(得分:3)

刚刚解决了同样的问题。在我的情况下,问题与证书或私钥无关,而是与通配符App Id相关。我有一个应用程序包,我用于许多商业应用程序,所以我有一个通配符应用程序ID com.domain。* 和一组配置文件关联(开发,appstore,adhoc)。我知道为了使用Push Notifications,需要一个唯一的App Id,实际上XCode会自动生成来自通配符的唯一App ID。但这还不够:配置文件仍然连接到通配符App Id。我必须使用与 com.domain.appname 唯一应用ID直接关联的新唯一配置文件(我使用自动生成的XCode)来签署目标。当然,如果您想使用推送通知,则不能为多个应用程序使用一个配置文件,但您必须为每个应用程序ID创建配置文件。

  

如果您打算使用Game Center,In-App Purchase等服务   推送通知,或想要一个应用程序唯一的捆绑ID,使用   显式的App ID。