私はこのコードを使用してデバイストークンを取得していますSwift 3で機能していましたが、Swift 4で機能していませんでした。解決にご協力ください。
if #available(iOS 10.0、*){ let center = UNUserNotificationCenter.current() center.requestAuthorization(options:[。badge、.alert 、.sound]){(許可、エラー)in } }
func application(_ application:UIApplication、didRegisterForRemoteNotificationsWithDeviceToken deviceToken:Data){ let deviceTokenString = deviceToken.reduce( ""、{$ 0 + String(format: "%02X" 、$ 1)}) print(deviceTokenString) }
コードに基づいてすべてが正しく設定されていることをすでに確認していると仮定すると、それは正常に機能するはずです。適切な16進文字列を取得するには、フォーマットを%02.2hhx
ではなく%02X
に変更するだけです。したがって、有効なものを取得する必要があります。
文字列を取得するために、プロジェクトに data extension を追加することをお勧めします。
import Foundation
extension Data {
var hexString: String {
let hexString = map { String(format: "%02.2hhx", $0) }.joined()
return hexString
}
}
使用法:
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
let deviceTokenString = deviceToken.hexString
print(deviceTokenString)
}
deviceTokenを取得するための作業コード-iOS 11以降、Swift 4
ユーザー権限のリクエスト
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
let notificationTypes: UIUserNotificationType = [UIUserNotificationType.alert,UIUserNotificationType.badge, UIUserNotificationType.sound]
let pushNotificationSettings = UIUserNotificationSettings(types: notificationTypes, categories: nil)
application.registerUserNotificationSettings(pushNotificationSettings)
application.registerForRemoteNotifications()
return true
}
デバイストークンを取得しています
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
let token = deviceToken.map { String(format: "%02.2hhx", $0) }.joined()
print(token)
}
エラーの場合
func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) {
print("i am not available in simulator :( \(error)")
}
デバイストークンを取得するには
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
// Convert token to string
let deviceTokenString = deviceToken.reduce("", {$0 + String(format: "%02X", $1)})
}
これがあなたを助けることを願っています
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data)
{
let tokenChars = (deviceToken as NSData).bytes.bindMemory(to: CChar.self, capacity: deviceToken.count)
var tokenString = ""
for i in 0..<deviceToken.count {
tokenString += String(format: "%02.2hhx", arguments: [tokenChars[i]])
}
print("tokenString: \(tokenString)")
}
次のようにデバイストークンを取得できます。
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
let token = deviceToken.reduce("", {$0 + String(format: "%02X", $1)})
print("Device Token : ",token)
}
次のように使用できます
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
let hexString = deviceToken.map { String(format: "%02.2hhx", $0) }.joined()
print(hexString)
}
デバイストークンを取得するには、以下のコードを使用します。
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
var token = ""
for i in 0..<deviceToken.count {
token = token + String(format: "%02.2hhx", arguments: [deviceToken[i]])
}
print("Device Token = \(token)")
}