毎回コピペするので。
AppDelegate.swift
class AppDelegate: UIResponder, UIApplicationDelegate {
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
registerForRemoteNotifications(application)
if let userInfo = launchOptions?[UIApplicationLaunchOptionsRemoteNotificationKey] {
// アプリが起動していない時にpush通知が届き、push通知から起動した場合
}
//...
}
//...
}
AppDelegate+RemoteNotifications.swift
import Foundation
extension AppDelegate {
func registerForRemoteNotifications(application: UIApplication) {
// 通知登録
if #available(iOS 8.0, *) {
let settings = UIUserNotificationSettings(forTypes: [.Badge, .Sound, .Alert], categories:nil)
application.registerUserNotificationSettings(settings)
application.registerForRemoteNotifications()
} else {
application.registerForRemoteNotificationTypes([.Badge, .Sound, .Alert])
}
}
// Push通知登録完了
func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData ) {
print("deviceToken: \(deviceToken.description)")
let deviceTokenString: String = deviceToken.description
.stringByTrimmingCharactersInSet(NSCharacterSet(charactersInString: "<>"))
.stringByReplacingOccurrencesOfString(" ", withString: "")
print("deviceTokenString \(deviceTokenString)")
}
// Push通知利用不可
func application(application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: NSError) {
print("devideToken register error: " + "\(error)")
}
func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject]) {
switch application.applicationState {
case .Active:
// アプリ起動中にPush通知を受信したとき
break
default:
// アプリがバックグラウンドにいる状態で、Push通知から起動したとき
break
}
}
}
参考
[iOS8以降]Push通知の実装とテスト(swift) - Qiita
http://qiita.com/k-yamada@github/items/258aec32a0d5b514f1cf
SwiftでPush通知 - Qiita
http://qiita.com/sawapi/items/feba100851de47fbe412