概要
- SwiftでPush通知受信処理を実装する
- houstonを使って、Push通知を送信する
参考記事
- iOSでプッシュ通知を実装する方法の超詳細まとめ(前編)
- iOSでプッシュ通知を実装する方法の超詳細まとめ(後編)
- iOS8のRemote Notificationの登録メソッドについて
- iOSでpush通知を受け取った後の起動とホーム画面のアイコンをタップした後の起動について
SwiftでPush通知受信処理を実装する
AppDelegate.swift
AppDelegate.swift
import UIKit
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
// Override point for customization after application launch.
// バッジ、サウンド、アラートをリモート通知対象として登録する
let settings = UIUserNotificationSettings(forTypes: [.Badge, .Sound, .Alert], categories: nil)
UIApplication.sharedApplication().registerForRemoteNotifications()
UIApplication.sharedApplication().registerUserNotificationSettings(settings)
if let userInfo = launchOptions?[UIApplicationLaunchOptionsRemoteNotificationKey] {
// アプリが起動していない時にpush通知が届き、push通知から起動した場合
}
}
// Push通知の登録が完了した場合、deviceTokenが返される
func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData ) {
print("deviceToken: \(deviceToken.description)")
}
// Push通知が利用不可であればerrorが返ってくる
func application(application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: NSError) {
NSLog("error: " + "\(error)")
}
// Push通知受信時とPush通知をタッチして起動したときに呼ばれる
func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject]) {
switch application.applicationState {
case .Inactive:
// アプリがバックグラウンドにいる状態で、Push通知から起動したとき
break
case .Active:
// アプリ起動時にPush通知を受信したとき
break
case .Background:
// アプリがバックグラウンドにいる状態でPush通知を受信したとき
break
}
}
}
RubyでPush通知を送信する
houstonというRubyのライブラリを使って、Push通知を送信します
Gemのインストール
$ gem install rake
$ gem install houston
Rakefileを作成して、push通知用のタスクを作成
server_certificates_sandbox.pemはiOSでプッシュ通知を実装する方法の超詳細まとめ(前編)で作成したものです。
# Rakefile:
require 'houston'
ROOT = File.expand_path(File.dirname(__FILE__))
task :push_notification do
# Environment variables are automatically read, or can be overridden by any specified options. You can also
# conveniently use `Houston::Client.development` or `Houston::Client.production`.
APN = Houston::Client.development
APN.certificate = File.read("#{ROOT}/pem/server_certificates_sandbox.pem")
# An example of the token sent back when a device registers for notifications
# token = "<ce8be627 2e43e855 16033e24 b4c28922 0eeda487 9c477160 b2545e95 xxxxxxx>"
token = ENV['DEVICE_TOKEN']
# Create a notification that alerts a message to the user, plays a sound, and sets the badge on the app
notification = Houston::Notification.new(device: token)
notification.alert = "Hello, World!"
# Notifications can also change the badge count, have a custom sound, have a category identifier, indicate available Newsstand content, or pass along arbitrary data.
notification.badge = 57
notification.sound = "sosumi.aiff"
notification.category = "INVITE_CATEGORY"
notification.content_available = true
notification.custom_data = {foo: "bar"}
# And... sent! That's all it takes.
APN.push(notification)
end
実行
$ DEVICE_TOKEN=<xxxx> rake push_notification
iPhoneに通知が届けば成功です