web-dev-qa-db-ja.com

Swift 4でdeviceTokenを取得するにはどうすればよいですか?

私はこのコードを使用してデバイストークンを取得しています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)
} 
6
Sandip Gill

コードに基づいてすべてが正しく設定されていることをすでに確認していると仮定すると、それは正常に機能するはずです。適切な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)
}
28
Ahmad F

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)")
}
11
Nikunj Kumbhani

デバイストークンを取得するには

func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
        // Convert token to string
        let deviceTokenString = deviceToken.reduce("", {$0 + String(format: "%02X", $1)})
}

これがあなたを助けることを願っています

1
Ganesh Manickam
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)")
}
1
Uma Madhavi

次のようにデバイストークンを取得できます。

func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
    let token = deviceToken.reduce("", {$0 + String(format: "%02X", $1)})
    print("Device Token : ",token)
}
0
Vinoth Vino

スウィフト5

次のように使用できます

func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
    let hexString = deviceToken.map { String(format: "%02.2hhx", $0) }.joined()
    print(hexString)
}
0

デバイストークンを取得するには、以下のコードを使用します。

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



}
0
Pankaj Jangid