use*_*098 19 notifications push-notification swift3 ios10
如何从iOS 10中的新xCode 8,Swift 3获取设备令牌?
这里注册通知的代码:
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()
}
}
Run Code Online (Sandbox Code Playgroud)
这里得到令牌,但是我收到错误"无法使用类型'(UnsafeRawPointer)'"的参数列表调用类型'UnsafePointer'的初始化程序:":
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)
}
Run Code Online (Sandbox Code Playgroud)
任何人都可以帮忙解决它吗?
谢谢
chi*_*hah 34
此方法可以解决您在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)
}
Run Code Online (Sandbox Code Playgroud)
小智 11
var pushToken = String(format: "%@", deviceToken as CVarArg)
pushToken = pushToken.trimmingCharacters(in: CharacterSet(charactersIn: "<>"))
pushToken = pushToken.replacingOccurrences(of: " ", with: "")
Run Code Online (Sandbox Code Playgroud)
Swift 3示例来自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)
}
Run Code Online (Sandbox Code Playgroud)
一条线:
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
let apnsDeviceToken = deviceToken.map {String(format: "%02.2hhx", $0)}.joined()
}
Run Code Online (Sandbox Code Playgroud)
或者模块化/封装/OOP方式:
extension Data {
var string: String {
return map {String(format: "%02.2hhx", $0)}.joined()
}
}
Run Code Online (Sandbox Code Playgroud)
然后你可以这样做:
let token = deviceToken.string
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
22970 次 |
最近记录: |