2015-03-14 5 views
0

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

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

ответ

2

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

+0

Обычно это так. Но также можно установить установку непосредственно как adhoc-release с помощью сертификата adhoc. (Я сам отлаживаю объявление ad-hoc push таким образом. Быстрее, чем создание специальной публикации, загрузка на Apple и т. Д. Проблема заключается в том, что она не позволяет отлаживать, если она установлена ​​как ad-hoc напрямую. (Приложение закрывается через несколько секунд. Но опять же, я могу открывать Устройства и видеть выход консоли в любом случае). –

Смежные вопросы