APNS не может получить DeviceToken

Мой код.

UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
        center.delegate                  = self;
        [center requestAuthorizationWithOptions:(UNAuthorizationOptionBadge | UNAuthorizationOptionSound | UNAuthorizationOptionAlert) completionHandler:^(BOOL granted, NSError * _Nullable error) {
            if (!error) {
                NSLog(@"~ios10-----");
                dispatch_async(dispatch_get_main_queue(), ^{
                    [[UIApplication sharedApplication] registerForRemoteNotifications];
                });

            }else{
                NSLog(@"~ios10---error--");
            }
        }];

Этот код в iPhone 5s ios 11.4.1 работает, вызывается метод didRegisterForRemoteNotificationsWithDeviceToken. А вот в iPhone 6s ios 13.5.0 не работает. После нескольких дней гугления в ошибке соединения с APNS нашел решение, исправление заключалось в том, чтобы изменить телефоны для использования альтернативный DNS, такой как Google (8.8.8.8) или Cloudflare (1.1.1.1) в настройках Wi-Fi. Но я не могу изменить DNS телефона пользователя.

Если у вас есть какие-либо идеи, пожалуйста, дайте мне знать. Спасибо


person joe_wang    schedule 21.05.2020    source источник


Ответы (1)


Вы можете попробовать это, я надеюсь, что это поможет вам.

if (floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_9_x_Max) {
          UIUserNotificationType allNotificationTypes =
          (UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge);
          UIUserNotificationSettings *settings =
          [UIUserNotificationSettings settingsForTypes:allNotificationTypes categories:nil];
          [application registerUserNotificationSettings:settings];
      } else {
          // iOS 10 or later
  #if defined(__IPHONE_10_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0
          // For iOS 10 display notification (sent via APNS)
          [UNUserNotificationCenter currentNotificationCenter].delegate = self;
          UNAuthorizationOptions authOptions =
          UNAuthorizationOptionAlert
          | UNAuthorizationOptionSound
          | UNAuthorizationOptionBadge;
          [[UNUserNotificationCenter currentNotificationCenter] requestAuthorizationWithOptions:authOptions completionHandler:^(BOOL granted, NSError * _Nullable error) {
          }];
  #endif
      }
person Vandana pansuria    schedule 21.05.2020