2016-09-19 27 views
16

Cách nhận mã thông báo thiết bị từ xCode 8 mới, Swift 3 trong iOS 10?Nhận mã thông báo đẩy - iOS 10, Swift 3

Đây mã để đăng ký thông báo:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 

     DispatchQueue.main.async { 
      let settings = UIUserNotificationSettings(types: [.badge, .sound, .alert], categories: nil) 
      UIApplication.shared.registerUserNotificationSettings(settings) 
     } 
     return true 
    } 

func application(_ application: UIApplication, didRegister notificationSettings: UIUserNotificationSettings) { 
     if notificationSettings.types != UIUserNotificationType() { 
      application.registerForRemoteNotifications() 
     } 
    } 

đây để có mã thông báo, nhưng tôi nhận được lỗi "Không thể gọi initializer cho loại 'UnsafePointer' với một danh sách đối số kiểu '(UnsafeRawPointer)'" :

func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) { 
     let chars = UnsafePointer<CChar>((deviceToken as NSData).bytes) 
     var token = "" 

     for i in 0..<deviceToken.count { 
      token += String(format: "%02.2hhx", arguments: [chars[i]]) 
     } 

     print("Registration succeeded!") 
     print("Token: ", token) 
    } 

Có ai giúp giải quyết nó không?

Cảm ơn

+0

trùng lặp có thể xảy ra của http://stackoverflow.com/questions/37956482/registering-for-push-notifications-in-xcode-8-swift-3-0 – Moritz

+0

Bạn có thể đi theo liên kết này của mình trong mục tiêu C nhưng bạn có thể nhận được một số ý tưởng http://stackoverflow.com/questions/39572897/ios-10-push-notification-issue-solved –

Trả lời

11
var pushToken = String(format: "%@", deviceToken as CVarArg) 
pushToken = pushToken.trimmingCharacters(in: CharacterSet(charactersIn: "<>")) 
pushToken = pushToken.replacingOccurrences(of: " ", with: "") 
0

Nó có thể làm việc:

let chars = UnsafePointer<CChar>((deviceToken as NSData).bytes.assumingMemoryBound(to:CChar.self)) 

Cảm ơn!

26

Phương pháp này có thể giải quyết vấn đề của bạn trong iOS 10:

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(token) 
} 
+0

Tại sao bạn nên downvote? Vui lòng cung cấp lý do –

1

Các snnipet dưới đây đang làm việc với Eric Aya giải pháp:

let token = deviceToken.reduce("", {$0 + String(format: "%02X", $1)}) 

Cảm ơn tất cả sự giúp đỡ :)

3

Phải đối mặt với cùng một vấn đề, đây là điều duy nhất đã giúp tôi:

func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) { 
    let token = String(format: "%@", deviceToken as CVarArg) 
     .trimmingCharacters(in: CharacterSet(charactersIn: "<>")) 
     .replacingOccurrences(of: " ", with: "") 
} 
2

Ví dụ về Swift 3 lấy từ raywenderlich.com.

func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data){ 
    let tokenParts = deviceToken.map { data -> String in 
     return String(format: "%02.2hhx", data) 
    } 
    let token = tokenParts.joined() 
    print(token) 
} 
Các vấn đề liên quan