Swift iOS 13, не получает токен устройства APNS при использовании мобильной сети (4g / 3g) - PullRequest
2 голосов
/ 17 октября 2019

Я пытался получить APNS push-токен.

func configPushNotifications(_ application: UIApplication) {
    application.registerForRemoteNotifications()
}

Но я не получил токен от AppDelegate, если использую интернет-телефон My Phone Sim (4 г / 3 г).

func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) 

Но если я использую Wi-Fi, он работает нормально. Я проверил iOS 13.1.2 и 13.1.3. У обоих одна и та же проблема. Но более низкие версии вроде iOS 12 or 11 работают нормально. Это ошибка с яблоком? или мне нужно запросить токен с другим конфигом для мобильной сети?

1 Ответ

2 голосов
/ 17 октября 2019

Пожалуйста, проверьте код как это выглядит

сначала импортируйте локальное уведомление

import UserNotifications

, затем создайте метод

func settingPushNotification() {

    let app = UIApplication.shared

    if #available(iOS 10.0, *) {
        // For iOS 10 display notification (sent via APNS)
        UNUserNotificationCenter.current().delegate = self

        let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound]
        UNUserNotificationCenter.current().requestAuthorization(
            options: authOptions,
            completionHandler: {_, _ in })
    } else {
        let settings: UIUserNotificationSettings =
            UIUserNotificationSettings(types: [.alert, .badge, .sound], categories: nil)
        app.registerUserNotificationSettings(settings)
    }

    app.registerForRemoteNotifications()
}

, вы можете вызвать этот метод либо в appdelegate или viewcontroller таким образом.

self.settingPushNotification()

вам необходимо добавить методы делегата

func application(
    _ application: UIApplication,
    didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data
    ) {
    let tokenParts = deviceToken.map { data in String(format: "%02.2hhx", data) }
    let token = tokenParts.joined()

    if !token.isEmpty {

        let userDefaults = UserDefaults.standard
        userDefaults.set(token, forKey: Strings.DeviceToken.rawValue)

    }


    print("Device Token: \(token)")
}

func application(
    _ application: UIApplication,
    didFailToRegisterForRemoteNotificationsWithError error: Error) {
    print("Failed to register: \(error)")
}

Убедитесь, что вы добавили push-уведомление в подписи и возможностях.

enter image description here

Таким образом вы можете получить токен устройства APNS.

...