Токен устройства APNS генерируется неправильно

Я интегрировал push-уведомление Apple и столкнулся со странной проблемой в своем приложении. когда я напрямую устанавливаю приложение через Xcode через USB-соединение, то токен устройства правильно генерируется, хранится в базе данных, и push-уведомление работает нормально. но когда я создаю IPA и устанавливаю приложение через созданный ipa на том же устройстве, токен устройства генерируется неправильно, и push-уведомление не работает. Ниже мой код:

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);
}

person vijay    schedule 14.03.2015    source источник


Ответы (1)


Токен устройства зависит от сертификата, которым вы подписали свое приложение. Если вы устанавливаете напрямую, это сертификат разработчика, а при подписке для AdHoc — сертификат распространения. Для push вам понадобится соответствующий дистрибутив или сертификат разработки, упакованный на вашем сервере.

person Christian    schedule 14.03.2015
comment
Обычно это так. Но также можно настроить прямую установку в качестве специальной версии с специальным сертификатом. (Я сам отлаживаю специальное push-уведомление таким образом. Быстрее, чем создание специального выпуска, загрузка в Apple и т. Д. Проблема в том, что оно не позволяет отлаживать, если оно установлено как специальное напрямую. (приложение закрывается через несколько секунд.Но опять же, я все равно могу открыть «Устройства» и увидеть вывод консоли). - person Guntis Treulands; 14.03.2015