[SWIFT] Le problème que la fenêtre contextuelle d'autorisation de notification push n'apparaît pas sur iOS14

Détails de l'erreur

Cela semble être un problème propre à iOS14, mais si le ProductName de l'application contient un caractère spécifique (probablement autre que l'alphabet), il sera utilisé lors de la mise en œuvre de la notification Push ʻUNUserNotificationCenter.current (). RequestAuthorization (options:, completionHandler :) `La méthode est retournée avec une erreur et le pop-up demandant à l'utilisateur l'autorisation de notifier disparaît.

Dans mon cas, j'ai mis un pseudonyme plat dans le nom du produit (pourquoi je l'ai mis ...), et j'en étais accro car le pop-up n'apparaissait pas, donc je vais décrire les détails de l'erreur et la solution.

Vous pouvez trouver tous les détails de ce problème dans les forums des développeurs Apple. Si vous êtes d'accord avec l'anglais, je pense qu'il est plus rapide de lire le lien. https://developer.apple.com/forums/thread/660715

Détails du code et de l'erreur

AppDelegate


import UIKit
import UserNotifications

    ***

class AppDelegate: UIResponder, UIApplicationDelegate {

    ***

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { 
        
        UNUserNotificationCenter.current().delegate = self
        let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound]
        UNUserNotificationCenter.current().requestAuthorization(options: authOptions, completionHandler: { granted, error in
            print(error)
            guard error == nil else { return }
            if granted {
                DispatchQueue.main.async {
                    application.registerForRemoteNotifications()
                }
            }
        })

        return true
    }
    
}

Lors de l'envoi d'une notification push à un utilisateur, utilisez la méthode requestAuthrization () de ʻUNUserNotificationCenter pour demander la permission, mais s'il y a un problème avec ProductName, il sera joué avec une erreur dans completionHandleretregisterForRemoteNotifications ()` sera exécuté. L'affichage contextuel n'est pas exécuté.

Si vous vérifiez le contenu avec print (error), il sera affiché sur la console comme indiqué ci-dessous.

Error Domain=UNErrorDomain Code=1 "Notifications are not allowed for this application"

Solutions

  1. Changez le ProductName dans l'élément TARGETS-> BuildSettings-> Packaging en quelque chose qui fonctionne (dit officiellement de simples caractères ASCII). Le nom du produit est invisible pour l'utilisateur, vous n'avez donc pas à trop y penser.

  2. Si vous souhaitez utiliser un kana plat ou un kanji dans un endroit que l'utilisateur peut voir (tel que le nom de l'application sous l'icône de l'application), ajoutez un élément appelé Nom d'affichage de l'ensemble à Info.plist et entrez le nom de l'application que vous souhaitez y afficher. Faire.

  3. Le pop-up s'est affiché sans aucun problème. 3E638F8B-D27B-4E31-9FFF-522DB5D96F0F_1_201_a.jpeg

c'est tout.

Recommended Posts

Le problème que la fenêtre contextuelle d'autorisation de notification push n'apparaît pas sur iOS14
Recevoir des notifications PUSH paramétrées sur iOS
Uri Components Builder n'encode pas "+" selon la version de spring