L'inscription pour les Notifications Push dans Xcode 8/Swift 3.0?
Que j'essaie de faire de mon appli de travail dans Xcode 8.0, et je suis en cours d'exécution dans une erreur. Je sais que ce code a bien fonctionné dans les versions précédentes de swift, mais je suis en supposant que le code est changé dans la nouvelle version. Voici le code que j'essaie de l'exécuter:
let settings = UIUserNotificationSettings(forTypes: [.Sound, .Alert, .Badge], categories: nil)
UIApplication.sharedApplication().registerUserNotificationSettings(settings)
UIApplication.shared().registerForRemoteNotifications()
L'erreur que j'obtiens est "l'Argument des étiquettes(forTypes: catégories:) "ne correspond pas à la disposition des surcharges"
Est-il une autre commande que j'ai pu essayer de le faire fonctionner?
- J'ai écrit un guide sur la façon de le faire: eladnava.com/...
Vous devez vous connecter pour publier un commentaire.
Demande à l'utilisateur l'autorisation
Arriver dispositif de jeton
En cas d'erreur
Dans le cas où si vous avez besoin de connaître les autorisations accordées
let center = UNUserNotificationCenter.current() center.requestAuthorization(options:[.badge, .alert, .sound]) { (granted, error) in // Enable or disable features based on authorization. } application.registerForRemoteNotifications()
à l'intérieur d'une méthode dans AppDelegate.Et d'appeler la méthode wrapper à partir de n'importe où par l'obtention de la référence de AppDelegate. Keepin ces méthodes surdidFinishLaunchingWithOptions
demande d'autorisation dès que lorsque l'application est lancée.Alors faites comme je l'ai dit priorlyapplication.registerForRemoteNotifications()
va d'abord, puis de demander l'autorisation. La première étape ne peut obtenir plusieurs à l'appel d'iOS système deAppDelegate
'sdidRegisterForRemoteNotificationsWithDeviceToken
si vous activez la notification allumer et éteindre plusieurs fois.application.isRegisteredForRemoteNotifications()
pour voir si elle est accordée, et utiliser une autre méthode du délégué dans le cas où vous avez eu un message d'erreur. Droit? Quelque chose d'autre?application.registerForRemoteNotifications()
après soncenter.requestAuthorization
notification.content.attachments = [UNNotificationAttachment(identifier: "png_identifier", url:imageURL , options: nil)]
ouUNNotificationAttachment(identifier: "audio_identifier", url:imageURL , options: [UNNotificationAttachmentOptionsTypeHintKey:kUTTypeMP3])
, etc.. par exemple.URL
du gif? ou il est envoyé commeData
?didReceiveRemoteNotification
AppDelegate méthode (et manuellement afficher quelque chose à l'utilisateur) ... un peu plus loin AFIN de lecture: stackoverflow.com/questions/14872088/...error
dansrequestAuthorization(options:completionHandler:)
est toujours nul à chaque fois que je refuse de recevoir la notification ou de ne pas fournir un aps-certificat. Comment obtenir une véritable erreur?application.registerForRemoteNotifications()
va d'abord, puis de demander l'autorisation. La première étape ne peut obtenir plusieurs à l'appel d'iOS système de AppDelegate de didRegisterForRemoteNotificationswithdevicetoken si vous activez la notification allumer et éteindre plusieurs fois.Ensuite, allez dans l'éditeur de projet pour votre cible, et dans l'onglet Général, recherchez Liés Cadres et la section des Bibliothèques.
Cliquez sur + et sélectionnez UserNotifications.cadre:
Utiliser Notification délégué méthodes
Pour la réception de notifications push
Découvrez ci-dessous le lien pour plus de Notification délégué méthodes
J'ai eu des problèmes avec les réponses ici dans la conversion de la deviceToken objet de Données dans une chaîne de caractères à envoyer à mon serveur avec la version bêta actuelle de Xcode 8. En particulier celui qui a été à l'aide de deviceToken.description en 8.0b6 qui serait de retour "32 Octets", ce qui n'est pas très utile 🙂
C'est ce qui a fonctionné pour moi...
Créer une extension sur les Données afin de mettre en œuvre un "hexString" méthode:
Puis utilisez-le lorsque vous recevoir le rappel de l'inscription à distance pour les notifications:
let deviceTokenString = deviceToken.reduce("", {$0 + String(format: "%02X", $1)})
Dans iOS10 à la place de votre code, vous devez demander une autorisation pour la notification par le suivant: (N'oubliez pas d'ajouter le
UserNotifications
Cadre)Aussi, le code correct pour vous est (utilisation dans le
else
de la condition précédente, par exemple):Enfin, assurez-vous
Push Notification
est activé soustarget
->Capabilities
->Push notification
. (réglez-le surOn
)application.isRegisteredForRemoteNotifications()
pour voir si elle est accordée, et utiliser une autre méthode du délégué dans le cas où vous avez eu un message d'erreur. Droit? Quelque chose d'autre?Bien ce travail pour moi.
D'abord dans AppDelegate
Alors:
Pour obtenir devicetoken:
Chefs, vous devriez être en utilisant le thread principal de cette action.
Première, écouter de la notification de l'utilisateur statut, c'est à dire,
registerForRemoteNotifications()
pour obtenir de l'Apn appareil jeton;Deuxième, demander l'autorisation. Lors de l'être autorisé par l'utilisateur, deviceToken sera envoyé à l'écoute, la
AppDelegate
;Troisième, rapport sur le dispositif de jeton à votre serveur.
La réponse de ast1 est très simple et utile. Il fonctionne pour moi, merci beaucoup.
Je veux juste poin ici, afin que les gens qui ont besoin de cette réponse peut le trouver facilement. Donc, voici mon code à partir de l'enregistrement local et à distance (push) de notification.
Simplement faire ce qui suit dans
didFinishWithLaunching:
:Rappeler au sujet de la déclaration d'importation:
registerForRemoteNotifications()
dans le gestionnaire d'achèvement derequestAuthorization()
. Vous désirez peut-être surroundregisterForRemoteNotifications()
avec unif granted
déclaration:center.requestAuthorization(options:[.badge, .alert, .sound]) { (granted, error) in if granted { UIApplication.shared.registerForRemoteNotifications() } }
Prendre un coup d'oeil à ce code commenté:
Laissez-moi savoir si il y a problème!!!!