【问题标题】:Swift iOS 13, Not getting APNS Device token while using Mobile Network (4g/3g)Swift iOS 13,使用移动网络时未获取 APNS 设备令牌(4g/3g)
【发布时间】:2020-02-13 23:41:08
【问题描述】:

我试图获取 APNS 推送令牌。

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

但如果我使用的是 My Phone Sim Internet (4g/3g),我没有从 AppDelegate 收到任何令牌。

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

但如果我使用 Wifi,它工作正常。 我检查了iOS 13.1.213.1.3。两者都有同样的问题。但是像iOS 12 or 11 这样的较低版本工作正常。是苹果虫吗?或者我必须为移动网络请求具有不同配置的令牌?

【问题讨论】:

  • 终止条款,可能是 Apple 没有收到 APNS 推送令牌请求。可能是被some 网络运营商阻止了。我改变了我当前的网络运营商,它又开始工作了。并且应用程序成功接收了 APNS 推送令牌。如果有人知道这个问题的任何解决方案?如何确保 Apple 在没有任何阻塞的情况下收到 APNS 令牌请求?
  • 面临同样的问题。你能指导我,如何解决这个问题??
  • 遇到同样的问题,iOS 13.4.1,无法获取设备令牌,没有错误,如何获取设备令牌?
  • 你可以尝试发布 ipa 吗?这对我来说很有趣,我没有在开发版本中获得推送令牌,但是在使用发布配置文件和发布 ipa 时,我确实收到了推送令牌而没有问题。
  • 我现在也有同样的问题。有人在使用开发者资料吗?

标签: ios swift apple-push-notifications devicetoken


【解决方案1】:

请验证代码如下所示

先导入本地通知

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

您可以通过这种方式在appdelegateviewcontroller 中调用此方法。

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

确保您在签名和功能中添加了推送通知。

这样你就可以获得APNS设备令牌。

【讨论】:

  • UserNotifications 请求按原样完成。正如我所说,它通常适用于较旧的 iOS 版本。只有当我连接到移动互联网 (4g/3g) 时,才会在更新的 iOS 13.1.2 和 13.1.3 中出现问题。如果我没有在Signing & Capabilities 中添加远程通知,那么旧的 iOS 也应该无法正常工作。
  • 面临同样的问题。你能指导我,如何解决这个问题?
  • @McDonal - 使用开发构建,我没有为少数网络运营商获得推送令牌。但是当我检查发布版本时,推送令牌确实从 APNS 收到,没有任何问题。你能检查一下吗?或者对于开发构建测试,您可以尝试使用 wi-fi 网络。
  • 我了解你的 cmets 。但我的情况是我只有一台测试设备 iOS 13.1.3 。现在,我无法使用该设备开发推送通知。我也尝试过网络运营商和wifi。没用。有没有办法解决这个问题?
  • @McDonal_11 你找到解决办法了吗?我一直无法确定为什么推送通知会在 ios 13 或以下设备上随机停止工作的原因:/
猜你喜欢
  • 2020-02-04
  • 2021-12-21
  • 2011-08-14
  • 2020-01-21
  • 1970-01-01
  • 2016-08-21
  • 2017-04-19
  • 2018-07-25
  • 1970-01-01
相关资源
最近更新 更多