2016-05-08 2 views
2

Я хочу реализовать уведомления VoIP в моем приложении iOS, но метод didUpdatePushCredentials никогда не вызывался, я не могу получить токен устройства.didUpdatePushCredentials не получится вызвано

Я реализовал APNS в приложении, могут ли эти две службы конфликтовать?

Вот мои AppDelegate коды

- (void)application:(UIApplication *)application 
    didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings { 
    LOGI(@"%@", NSStringFromSelector(_cmd)); 

    //register for voip notifications 
    self->pushRegistry = [[PKPushRegistry alloc] initWithQueue:dispatch_get_main_queue()]; 
    [self->pushRegistry setDelegate:self]; 
    [self->pushRegistry setDesiredPushTypes:[NSSet setWithObject:PKPushTypeVoIP]]; 

    NSLog(@"VoIP push registered"); 

} 

#pragma mark - VoIP push methods 

- (void)pushRegistry:(PKPushRegistry *)registry didUpdatePushCredentials:(PKPushCredentials *)credentials forType:(NSString *)type { 
    NSLog(@"voip token: %@", credentials.token); 
} 

- (void)pushRegistry:(PKPushRegistry *)registry didReceiveIncomingPushWithPayload:(PKPushPayload *)payload forType:(NSString *)type { 
    NSDictionary *payloadDict = [payload.dictionaryPayload valueForKey:@"aps"]; 
    NSString *message = (NSString *)[payloadDict valueForKey:@"alert"]; 

    if ([UIApplication sharedApplication].applicationState == UIApplicationStateBackground) { 
     UILocalNotification *localNotification = [[UILocalNotification alloc] init]; 
     localNotification.alertBody = [message stringByAppendingString:@" - voip"]; 
     localNotification.applicationIconBadgeNumber = 1; 
     localNotification.soundName = @"notes_of_the_optimistic.caf"; 

     [[UIApplication sharedApplication] presentLocalNotificationNow:localNotification]; 
    } else { 
     dispatch_async(dispatch_get_main_queue(), ^{ 
      UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"VoIP notification" message:message delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil]; 
      [alert show]; 
     }); 
    } 


    NSLog(@"incoming voip notfication: %@", payload.dictionaryPayload); 
} 

- (void)pushRegistry:(PKPushRegistry *)registry didInvalidatePushTokenForType:(NSString *)type { 
    NSLog(@"Voip token invalidate"); 
} 
  • Я включил удаленные уведомления, сертификат и профили обеспечения установлены.
  • Я могу использовать стандартные уведомления, используя APNS.

Любое решение, чтобы заставить его работать?

ответ

1

Был проблемы с сертификатами ,

Регенерированные и реимпортированные сертификаты и исправление выпуска.

+0

Я уже регенерировал его. Но все тот же вопрос. –

+0

@KishanVyas Когда вы создаете сертификат push, ему нужен сертификат, вы уверены, что выбрали правильный сертификат? –

+0

Я уже создал правильный сертификат. –

2

Используйте приведенный ниже код и убедитесь в следующих вещах.

**`**// Register for VoIP notifications**`** 

- (void) voipRegistration { 
    dispatch_queue_t mainQueue = dispatch_get_main_queue(); 
    // Create a push registry object 
    _voipRegistry = [[PKPushRegistry alloc] initWithQueue: mainQueue]; 
    // Set the registry's delegate to self 
    [_voipRegistry setDelegate:(id<PKPushRegistryDelegate> _Nullable)self]; 
    // Set the push type to VoIP 
    _voipRegistry.desiredPushTypes = [NSSet setWithObject:PKPushTypeVoIP]; 
} 

вызова Ниже метода в didFinishLaunchingWithOptions

Другой метод deleget, как следовать

- (void)pushRegistry:(PKPushRegistry *)registry didUpdatePushCredentials: (PKPushCredentials *)credentials forType:(NSString *)type { 
    // Register VoIP push token (a property of PKPushCredentials) with server 

    if([credentials.token length] == 0) { 
     NSLog(@"voip token NULL"); 
     return; 
    } 
    NSLog(@"%@",credentials.token); 
} 

// Убедитесь, что об этом в возможностях проекта

1) Фоновый режим ON

2) VOIP

3) История Fetch

4) remotenotification

5) Dont забыл импортировать делегат

в фоновом режиме

+0

я следовал за одни и те же шаги, и эти шаги также упоминается Sinch. Но по-прежнему стоит одна и та же проблема. –

5

Если вы используете новый xcode (я нахожусь на xcode 9), то VOIP не находится в разделе «Фон» на вкладке «Возможности». Это предотвратит вызов didUpdatePushCredentials!

Трюк вам нужно зайти в ваш plist, а в Required Background Modes вам нужно добавить App provides Voice over IP services.

Я не могу поверить, что Apple сделала это с нами. Я потратил 8-часовой рабочий день на поиск этого простого исправления.

enter image description here

+0

Я уже добавил это в файл info.plist. Но все же я получаю это. –

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