使用移动网络(4G/3G)时,Swift iOS 13无法获取APNS设备令牌。

6
我正在尝试获取APNS推送令牌。
func configPushNotifications(_ application: UIApplication) {
    application.registerForRemoteNotifications()
}

但是如果我使用手机数据网络(4G/3G),则无法从AppDelegate中收到任何令牌。

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

但如果我使用Wifi,它就工作正常。 我检查过iOS 13.1.213.1.3。两个版本都有同样的问题。但比如iOS 12或11这样的低版本工作正常。这是苹果的一个bug吗?还是我需要针对移动网络请求不同配置的令牌?


术语上来说,也许苹果没有收到APNS推送令牌请求。也许它被某些网络运营商屏蔽了。我更换了当前的网络运营商,它又开始正常工作了。应用程序成功接收到APNS推送令牌。如果有人知道这个问题的解决方案,请告诉我。怎样可以确保苹果在没有任何阻挡的情况下收到APNS令牌请求? - Anjan Majumder
遇到同样的问题。您能指导我如何解决这个问题吗? - McDonal_11
1
遇到同样的问题,iOS 13.4.1,无法获取设备令牌,没有错误信息,如何获取设备令牌? - Tanto
你能试着使用发布版的ipa文件吗?这对我很有趣,因为在开发版本中我没有收到推送令牌,但是在使用发布版的配置文件和ipa文件时,我成功地收到了推送令牌。 - Anjan Majumder
我现在也遇到了同样的问题。有谁和开发者配置文件一起工作吗? - Sascha Wolff
14.4出现了同样的问题,无法注册。而在iOS 12上相同的构建是正常的。我之前花了几天时间在iOS 12上尝试过,但还没有解决方案(( - djdance
1个回答

3

请确认代码看起来像这样

首先导入本地通知

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

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

enter image description here

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


2
UserNotifications 请求已按原样完成。正如我所说,它在旧版 iOS 上正常工作。唯一的问题是在更新的 iOS 13.1.2 和 13.1.3 中,只有当我连接到移动互联网(4G/3G)时才会出现问题。如果我没有在 Signing & Capabilities 中添加远程通知,则旧版 iOS 也不应该正常工作。 - Anjan Majumder
遇到了同样的问题。你能指导我如何解决这个问题吗? - McDonal_11
@McDonal - 使用开发版本时,我没有收到某些网络运营商的推送令牌。但是当我使用发布版本进行检查时,推送令牌可以正常从APNS接收。请您帮忙检查一下吗?或者您可以尝试使用Wi-Fi网络进行开发版本测试。 - Anjan Majumder
1
我理解您的评论。但我的情况是,我只有一个测试设备iOS 13.1.3。现在,我无法使用该设备开发推送通知。我已经尝试过使用网络运营商和WiFi,但都没有用。有没有什么办法可以解决这个问题? - McDonal_11
@McDonal_11 你找到任何解决方案了吗?我一直无法确定为什么推送通知在iOS 13或以下设备上会随机停止工作 :/ - NightFury
不好意思,我还没有找到。 - McDonal_11

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接