【问题标题】:APNS device token is getting generated incorrectAPNS 设备令牌生成不正确
【发布时间】:2015-03-14 08:56:04
【问题描述】:

我已经集成了苹果推送通知,但在我的应用程序中遇到了一个奇怪的问题。当我通过 USB 连接通过 Xcode 直接安装应用程序时,设备令牌正在生成正确存储在数据库中,并且推送通知工作正常。但是当我创建 IPA 并通过在同一设备中创建的 ipa 安装应用程序时,设备令牌生成错误并且推送通知不起作用。以下是我的代码:

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

application.applicationIconBadgeNumber = 0;

#ifdef __IPHONE_8_0
- (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings
        *)notificationSettings {
    [application registerForRemoteNotifications];
}
#endif


- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData
    *)deviceToken {
      const unsigned *tokenData = deviceToken.bytes;
                    NSString *deviceTokenString = [NSString stringWithFormat:@"%08x%08x%08x%08x%08x%08x%08x%08x", ntohl(tokenData[0]),ntohl(tokenData[1]),ntohl(tokenData[2]),ntohl(tokenData[3]),ntohl(tokenData[4]),ntohl(tokenData[5]),ntohl(tokenData[6]),ntohl(tokenData[7])];
     [[NSUserDefaults standardUserDefaults]setObject:deviceTokenString forKey:@"devicetoken"];
      NSLog(@"Device Token = %@", deviceTokenString);
}

//Failed to Register for Remote Notifications
- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {
    NSLog(@"Error in registration. Error: %@", error);
}

【问题讨论】:

    标签: ios apple-push-notifications devicetoken


    【解决方案1】:

    设备令牌取决于您签署应用程序时使用的证书。如果您直接安装,它是开发证书,而在为 AdHoc 签名时,它是分发证书。对于推送,您需要在您的服务器上打包相应的发行版或开发证书。

    【讨论】:

    • 通常是这样。但也可以设置为使用临时证书直接安装为临时版本。 (我自己以这种方式调试临时推送通知。比创建临时发布、上传到苹果等更快。问题是如果直接安装为临时推送,它不允许调试。(应用程序几秒钟后关闭。但话又说回来,我可以打开设备并看到控制台输出)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多