我使用以下代码获取用户对Apple的推送通知令牌:
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
if (KeychainWrapper.hasValueForKey("logged_in")){
if (KeychainWrapper.stringForKey("logged_in") == "true"){
self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let rootViewController: RootViewController = mainStoryboard.instantiateViewControllerWithIdentifier("RootViewController") as! RootViewController
self.window?.rootViewController = rootViewController
self.window?.makeKeyAndVisible()
}
}
registerForPushNotifications(application)
return true
}
func registerForPushNotifications(application: UIApplication) {
let notificationSettings = UIUserNotificationSettings(
forTypes: [.Badge, .Sound, .Alert], categories: nil)
application.registerUserNotificationSettings(notificationSettings)
}
func application(application: UIApplication, didRegisterUserNotificationSettings notificationSettings: UIUserNotificationSettings) {
if notificationSettings.types != .None {
application.registerForRemoteNotifications()
}
}
func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) {
let tokenChars = UnsafePointer<CChar>(deviceToken.bytes)
var tokenString = ""
for i in 0..<deviceToken.length {
tokenString += String(format: "%02.2hhx", arguments: [tokenChars[i]])
}
if (KeychainWrapper.hasValueForKey("push_token")){
KeychainWrapper.removeObjectForKey("push_token")
}
Constant.pushToken = tokenString
print("Device Token:", tokenString)
}
稍后在我的应用中创建帐户时,我将Constant.pushToken发布到我的后端
当我在自己的手机上运行时,它工作正常。我在我的数据库中收到了自己的Push令牌。也许这是因为我自己的手机在我的Apple Developer控制台(?)中注册了。
但是,当我的TestFlight用户安装应用程序并授予其发送推送通知的权限时,我最终不会在我的数据库中收到他们的推送令牌。
我已经在这2天内苦苦挣扎,似乎无法使其发挥作用。昨天我撤销了所有证书和配置文件,并重新创建了所有证书和配置文件。仍然没有运气。
上传到AppStore时我也收到此消息:
缺少推送通知权利 - 您的应用包含Apple推送通知服务的API,但应用程序的签名中缺少aps-environment权利。要解决此问题,请确保在Provisioning Portal中为推送通知启用了App ID。然后,使用包含aps-environment权利的分发配置文件为您的应用签名。这将创建正确的签名,您可以重新提交您的应用程序。请参阅&#34;供应和开发&#34;有关详细信息,请参阅“本地和推送通知编程指南”。如果您的应用不使用Apple推送通知服务,则无需执行任何操作。您可以从将来的提交中删除API以停止此警告。如果您使用第三方框架,则可能需要与开发人员联系以获取有关删除API的信息。
但是,我已经在能够将推送令牌注册到我的数据库的应用程序上收到了该消息。
以下是Apple Developer Consolde + Xcode的一些截图: