SlideShare a Scribd company logo
1 of 49
Notification
Watch WatchKit勉強会 in 東京
2015/04/25
自己紹介
• 金田浩明
• 株式会社ブリリアントサービス勤務
• 著書:基礎からのAndroidプログラミング
• www.facebook.com/hiroaki.kaneda
• emboss369
Notificationの出し方
• アプリに通知機能がない場合
• →アプリにNotificationを実装する
• アプリに通知機能がある場合
• →何もしない
以上
ありがとうございました。
というわけにもいかないので
• Notificationの作り方からおさらい
• ついでにToday Extensionの作り方
• Apple WatchでのNotificationのカスタマイズ
サンプルアプリ
Notificationには2種類ある
• Local Notification(ローカル通知)
– アプリがバックグラウンド時にユーザーに情報を伝え
る仕組み。
– アプリ自身が発信し、iOSが配信する
• Remote Notification(リモート通知)
– いわゆるプッシュ通知。
– リモートサーバーで発信し、iOSが配信する
• 見た目としてはどちらも一緒
バックグラウンドモード有効
最小フェッチ間隔設定
// AppDelegate.swift
func application(application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
〜
let interval:NSTimeInterval = 60 * 60 // 1時間
UIApplication.sharedApplication().setMinimumBackgroundFetchInterval(interval)
〜
return true
}
バックグラウンド処理を書く
func application(application: UIApplication,
performFetchWithCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) {
〜なんらかの処理〜
// 処理結果を通知するNotification生成
let myNotification: UILocalNotification = UILocalNotification()
// タイトルを設定
myNotification.alertTitle = message
// メッセージを設定
myNotification.alertBody = detailStr
// Timezoneを設定をする.
myNotification.timeZone = NSTimeZone.defaultTimeZone()
// Notificationを表示する.
UIApplication.sharedApplication().scheduleLocalNotification(myNotification)
// バックグラウンドフェッチ結果を通知
completionHandler(UIBackgroundFetchResult.NewData)
}
Notification
Today
• Notificationの作り方からおさらい
• ついでにToday Extensionの作り方
• Apple WatchでのNotificationのカスタマイズ
新規ターゲット作成
Today Extensionを追加
アプリとExtension間のデータ共有
適当なグループ名をつける。
group.PM25Extension
とした。
Today Extension側も同じように
アプリ側
// PM2.5の値をウィジェットと共有
let sharedDefaults:NSUserDefaults = NSUserDefaults(suiteName: "group.PM25Extension")!
sharedDefaults.setObject("【東京都】PM2.5観測情報 : "
+ self.statusLabel.text!, forKey: "pm25info")
sharedDefaults.synchronize()
Extension側
class TodayViewController: UIViewController, NCWidgetProviding {
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
// 初期化時にNSUserDefaultsDidChangeNotificationで変更を検知して
// userDefaultsDidChangeメソッドを呼び出す
NSNotificationCenter.defaultCenter().addObserver(self, selector: "userDefaultsDidChange:",
name: NSUserDefaultsDidChangeNotification, object: nil)
}
/// アプリ側でテキストが変更されたらウィジェットに反映する関数
func userDefaultsDidChange(notification: NSNotification) {
updateLabel()
}
/// ラベルを更新する関数
func updateLabel() {
let defaults:NSUserDefaults = NSUserDefaults(suiteName: "group.PM25Extension")!
self.pm25StatusLabel.text = defaults.stringForKey("pm25info”)
}
}
WatchKitもExtensionだから
同じようにNSUserDefaultsでデータ共有ができます。
こんな感じになります
お待たせしました
• Notificationの作り方からおさらい
• ついでにToday Extensionの作り方
• Apple WatchでのNotificationのカスタマイズ
ようやくWatchKit
WatchKit Appを追加
Notification Sceneを含める
Static とDynamic
シミュレータでのNotification実行
Remote Notificationしかテストできない?
PushNotificationPayload.apnsファイルの内容(JSONファイル)
{
"aps": {
"alert": {
"body": "【東京都】PM2.5観測情報:非常に多い",
"title": "PM2.5情報"
},
"badge" : 1,
"category": "very_high"
},
"WatchKit Simulator Actions": [
{
"title": "最初のボタン",
"identifier": "firstButtonAction"
},
{
"title": "2番目のボタン",
"identifier": "secondButtonAction"
}
],
"pm2.5status": "very high"
}
Dynamic Interface
軽くはまった
何故か空欄になってる。
WatchKit Extensinを
指定する。
NotificationController
class NotificationController: WKUserNotificationInterfaceController {
override func didReceiveRemoteNotification(
remoteNotification: [NSObject : AnyObject],
withCompletion completionHandler: (WKUserNotificationInterfaceType) -> Void) {
var aps = remoteNotification["aps"] as! [NSObject : AnyObject]
var alert = aps["alert"] as! [NSObject : AnyObject]
var body = alert["body"] as! String
self.label.setText(body)
completionHandler(.Custom)
}
}
.Customで Dynamic Interfaceが呼ばれる。
.Defaultとすると、Static Interfaceが呼ばれる。
PushNotificationPayload.apnsファイルの内容(JSONファイル)
{
"aps": {
"alert": {
"body": "【東京都】PM2.5観測情報:非常に多い",
"title": "PM2.5情報"
},
複数の.apnsでテスト
Notification Interfaceは複数作成可能
使用するNotificationはCategoryで指定
使用するNotificationはCategoryで指定
使用するNotificationはCategoryで指定
// 通知を表示する
// Notification生成
let myNotification: UILocalNotification = UILocalNotification()
// タイトルを設定
myNotification.alertTitle = "PM2.5情報"
// メッセージを設定
myNotification.alertBody = "【東京都】PM2.5観測情報:多い"
// Timezoneを設定をする.
myNotification.timeZone = NSTimeZone.defaultTimeZone()
myNotification.soundName = UILocalNotificationDefaultSoundName;
// カテゴリー名を指定する
myNotification.category = "high"
// Notificationを表示する.
UIApplication.sharedApplication().scheduleLocalNotification(myNotification)
アクション可能Notification
• 通知を見て、1タップでアクションできる
便利機能
• メールソフトなら「既読」「削除」「アー
カイブ」を1タップで
• TODO管理ソフトなら「完了」「1時間後に
再通知」を1タップで
• 通知を見てその場でアクションを選択でき
る
アクション可能Notification
識別子で区別する
アクション可能Notification
InterfaceController.swift
class InterfaceController: WKInterfaceController {
〜
override func handleActionWithIdentifier(identifier: String?,
forRemoteNotification remoteNotification: [NSObject : AnyObject]) {
if identifier == "firstButtonAction" {
self.label.setText("1番目のボタンが選択された")
}
else if identifier == "secondButtonAction" {
self.label.setText("2番目のボタンが選択された")
}
}
}
カスタマイズ
アイコン
多すぎ
アイコン1個作って全サイズ作成
サッシの色
イメージ
テキストの折り返し
背景イメージ
今日のまとめ
• コーディングなしでもアプリが通知対応し
ていれば通知は表示される
• 通知のデザインはカテゴリに応じて複数作
成可能
• 通知のアクションはユーザーの手間を減ら
すために使う
実機で試した感想
• JSONを用いたNotificationの実機デバッグ実行はうまく
いかなかった
– 実際のPush通知を試す必要あり?
– サーバ用意とかPHPでコーディんとか色々面倒そう)
• Local NotificationでDynamicインタフェースにならない。
– Staticインタフェースになってしまう
• iPhoneがロックされていないとWatchにNotificatonは表
示されない
Watchの書籍
• www.facebook.com/hiroaki.kaneda
• emboss369
質疑応答

More Related Content

Similar to AppleWatch発売!Apple Watch WatchKit勉強会-Notification

iPhoneアプリ開発の歩き方〜Swift編〜
iPhoneアプリ開発の歩き方〜Swift編〜iPhoneアプリ開発の歩き方〜Swift編〜
iPhoneアプリ開発の歩き方〜Swift編〜Yusuke SAITO
 
App extension for iOS
App extension for iOSApp extension for iOS
App extension for iOStoyship
 
20120413 nestakabaneworkshop
20120413 nestakabaneworkshop20120413 nestakabaneworkshop
20120413 nestakabaneworkshopYoichiro Sakurai
 
非エンジニアのためのIT勉強会 ハイブリッドフレームワーク
非エンジニアのためのIT勉強会 ハイブリッドフレームワーク非エンジニアのためのIT勉強会 ハイブリッドフレームワーク
非エンジニアのためのIT勉強会 ハイブリッドフレームワークKaz Furukawa
 
㉙iPhoneアプリ開発の基礎知識を覚えよう
㉙iPhoneアプリ開発の基礎知識を覚えよう㉙iPhoneアプリ開発の基礎知識を覚えよう
㉙iPhoneアプリ開発の基礎知識を覚えようNishida Kansuke
 
Amazon SNS Mobile Push を使ってみる
Amazon SNS Mobile Push を使ってみるAmazon SNS Mobile Push を使ってみる
Amazon SNS Mobile Push を使ってみる崇之 清水
 
第1回 コデアルiOSアプリ勉強会
第1回 コデアルiOSアプリ勉強会第1回 コデアルiOSアプリ勉強会
第1回 コデアルiOSアプリ勉強会codeal
 
小さく早い改善がスマホのサービス開発を変える
小さく早い改善がスマホのサービス開発を変える小さく早い改善がスマホのサービス開発を変える
小さく早い改善がスマホのサービス開発を変えるHiroto Igarashi
 
20120316 designerworkshoppublished
20120316 designerworkshoppublished20120316 designerworkshoppublished
20120316 designerworkshoppublishedYoichiro Sakurai
 
iOS 8 App Extension
iOS 8 App ExtensioniOS 8 App Extension
iOS 8 App ExtensionTakeo Nanba
 
Device Farm を使ったスマホアプリの自動テスト
Device Farm を使ったスマホアプリの自動テストDevice Farm を使ったスマホアプリの自動テスト
Device Farm を使ったスマホアプリの自動テスト健一 辰濱
 
Swiftビギナーズ倶楽部 vol.2
Swiftビギナーズ倶楽部 vol.2Swiftビギナーズ倶楽部 vol.2
Swiftビギナーズ倶楽部 vol.2Kanako Kobayashi
 
Unity5.3をさわってみた
Unity5.3をさわってみたUnity5.3をさわってみた
Unity5.3をさわってみたKeizo Nagamine
 
【Halo】スマホアプリ3つの法則 ボケてをアプリ化するときにやったこと121210
【Halo】スマホアプリ3つの法則 ボケてをアプリ化するときにやったこと121210【Halo】スマホアプリ3つの法則 ボケてをアプリ化するときにやったこと121210
【Halo】スマホアプリ3つの法則 ボケてをアプリ化するときにやったこと121210Osamu Ise
 
福井スマートフォンハッカソン Titanium Mobileの紹介
福井スマートフォンハッカソン Titanium Mobileの紹介福井スマートフォンハッカソン Titanium Mobileの紹介
福井スマートフォンハッカソン Titanium Mobileの紹介Mori Shingo
 
自作アプリを Apple Watch対応した話 〜FastCheckin編〜
自作アプリを Apple Watch対応した話 〜FastCheckin編〜自作アプリを Apple Watch対応した話 〜FastCheckin編〜
自作アプリを Apple Watch対応した話 〜FastCheckin編〜Kosuke Ogawa
 
Xcode7時代のアプリ配布
Xcode7時代のアプリ配布Xcode7時代のアプリ配布
Xcode7時代のアプリ配布toyship
 

Similar to AppleWatch発売!Apple Watch WatchKit勉強会-Notification (20)

iPhoneアプリ開発の歩き方〜Swift編〜
iPhoneアプリ開発の歩き方〜Swift編〜iPhoneアプリ開発の歩き方〜Swift編〜
iPhoneアプリ開発の歩き方〜Swift編〜
 
Tmcn Leap Motion
Tmcn Leap MotionTmcn Leap Motion
Tmcn Leap Motion
 
App extension for iOS
App extension for iOSApp extension for iOS
App extension for iOS
 
iOS豆知識ver0.0.5
iOS豆知識ver0.0.5iOS豆知識ver0.0.5
iOS豆知識ver0.0.5
 
20120413 nestakabaneworkshop
20120413 nestakabaneworkshop20120413 nestakabaneworkshop
20120413 nestakabaneworkshop
 
非エンジニアのためのIT勉強会 ハイブリッドフレームワーク
非エンジニアのためのIT勉強会 ハイブリッドフレームワーク非エンジニアのためのIT勉強会 ハイブリッドフレームワーク
非エンジニアのためのIT勉強会 ハイブリッドフレームワーク
 
㉙iPhoneアプリ開発の基礎知識を覚えよう
㉙iPhoneアプリ開発の基礎知識を覚えよう㉙iPhoneアプリ開発の基礎知識を覚えよう
㉙iPhoneアプリ開発の基礎知識を覚えよう
 
Amazon SNS Mobile Push を使ってみる
Amazon SNS Mobile Push を使ってみるAmazon SNS Mobile Push を使ってみる
Amazon SNS Mobile Push を使ってみる
 
第1回 コデアルiOSアプリ勉強会
第1回 コデアルiOSアプリ勉強会第1回 コデアルiOSアプリ勉強会
第1回 コデアルiOSアプリ勉強会
 
小さく早い改善がスマホのサービス開発を変える
小さく早い改善がスマホのサービス開発を変える小さく早い改善がスマホのサービス開発を変える
小さく早い改善がスマホのサービス開発を変える
 
20120316 designerworkshoppublished
20120316 designerworkshoppublished20120316 designerworkshoppublished
20120316 designerworkshoppublished
 
iOS 8 App Extension
iOS 8 App ExtensioniOS 8 App Extension
iOS 8 App Extension
 
Device Farm を使ったスマホアプリの自動テスト
Device Farm を使ったスマホアプリの自動テストDevice Farm を使ったスマホアプリの自動テスト
Device Farm を使ったスマホアプリの自動テスト
 
Swiftビギナーズ倶楽部 vol.2
Swiftビギナーズ倶楽部 vol.2Swiftビギナーズ倶楽部 vol.2
Swiftビギナーズ倶楽部 vol.2
 
Unity5.3をさわってみた
Unity5.3をさわってみたUnity5.3をさわってみた
Unity5.3をさわってみた
 
【Halo】スマホアプリ3つの法則 ボケてをアプリ化するときにやったこと121210
【Halo】スマホアプリ3つの法則 ボケてをアプリ化するときにやったこと121210【Halo】スマホアプリ3つの法則 ボケてをアプリ化するときにやったこと121210
【Halo】スマホアプリ3つの法則 ボケてをアプリ化するときにやったこと121210
 
福井スマートフォンハッカソン Titanium Mobileの紹介
福井スマートフォンハッカソン Titanium Mobileの紹介福井スマートフォンハッカソン Titanium Mobileの紹介
福井スマートフォンハッカソン Titanium Mobileの紹介
 
自作アプリを Apple Watch対応した話 〜FastCheckin編〜
自作アプリを Apple Watch対応した話 〜FastCheckin編〜自作アプリを Apple Watch対応した話 〜FastCheckin編〜
自作アプリを Apple Watch対応した話 〜FastCheckin編〜
 
Xcode7時代のアプリ配布
Xcode7時代のアプリ配布Xcode7時代のアプリ配布
Xcode7時代のアプリ配布
 
Softlayer勉強会#2
Softlayer勉強会#2Softlayer勉強会#2
Softlayer勉強会#2
 

More from Hiroaki Kaneda

SwiftUI宣言型Swift構文によるUI構築のパラダイムシフト
SwiftUI宣言型Swift構文によるUI構築のパラダイムシフトSwiftUI宣言型Swift構文によるUI構築のパラダイムシフト
SwiftUI宣言型Swift構文によるUI構築のパラダイムシフトHiroaki Kaneda
 
Android ThingsとKotlinで作るIoT
Android ThingsとKotlinで作るIoTAndroid ThingsとKotlinで作るIoT
Android ThingsとKotlinで作るIoTHiroaki Kaneda
 
Turtlebot3とrealsenseで作るお手軽移動ロボットros japan ug #23 関西勉強会
Turtlebot3とrealsenseで作るお手軽移動ロボットros japan ug #23 関西勉強会Turtlebot3とrealsenseで作るお手軽移動ロボットros japan ug #23 関西勉強会
Turtlebot3とrealsenseで作るお手軽移動ロボットros japan ug #23 関西勉強会Hiroaki Kaneda
 
Rosとgazeboを使った3d空間での3次元畳み込みニューラルネットによる物体認識
Rosとgazeboを使った3d空間での3次元畳み込みニューラルネットによる物体認識Rosとgazeboを使った3d空間での3次元畳み込みニューラルネットによる物体認識
Rosとgazeboを使った3d空間での3次元畳み込みニューラルネットによる物体認識Hiroaki Kaneda
 
Ros,gazeboとchainerを用いた畳込みニューラルネットワークによる3次元形状の学習
Ros,gazeboとchainerを用いた畳込みニューラルネットワークによる3次元形状の学習Ros,gazeboとchainerを用いた畳込みニューラルネットワークによる3次元形状の学習
Ros,gazeboとchainerを用いた畳込みニューラルネットワークによる3次元形状の学習Hiroaki Kaneda
 
ディープラーニングとROSで作る自動運転ロボット
ディープラーニングとROSで作る自動運転ロボットディープラーニングとROSで作る自動運転ロボット
ディープラーニングとROSで作る自動運転ロボットHiroaki Kaneda
 

More from Hiroaki Kaneda (6)

SwiftUI宣言型Swift構文によるUI構築のパラダイムシフト
SwiftUI宣言型Swift構文によるUI構築のパラダイムシフトSwiftUI宣言型Swift構文によるUI構築のパラダイムシフト
SwiftUI宣言型Swift構文によるUI構築のパラダイムシフト
 
Android ThingsとKotlinで作るIoT
Android ThingsとKotlinで作るIoTAndroid ThingsとKotlinで作るIoT
Android ThingsとKotlinで作るIoT
 
Turtlebot3とrealsenseで作るお手軽移動ロボットros japan ug #23 関西勉強会
Turtlebot3とrealsenseで作るお手軽移動ロボットros japan ug #23 関西勉強会Turtlebot3とrealsenseで作るお手軽移動ロボットros japan ug #23 関西勉強会
Turtlebot3とrealsenseで作るお手軽移動ロボットros japan ug #23 関西勉強会
 
Rosとgazeboを使った3d空間での3次元畳み込みニューラルネットによる物体認識
Rosとgazeboを使った3d空間での3次元畳み込みニューラルネットによる物体認識Rosとgazeboを使った3d空間での3次元畳み込みニューラルネットによる物体認識
Rosとgazeboを使った3d空間での3次元畳み込みニューラルネットによる物体認識
 
Ros,gazeboとchainerを用いた畳込みニューラルネットワークによる3次元形状の学習
Ros,gazeboとchainerを用いた畳込みニューラルネットワークによる3次元形状の学習Ros,gazeboとchainerを用いた畳込みニューラルネットワークによる3次元形状の学習
Ros,gazeboとchainerを用いた畳込みニューラルネットワークによる3次元形状の学習
 
ディープラーニングとROSで作る自動運転ロボット
ディープラーニングとROSで作る自動運転ロボットディープラーニングとROSで作る自動運転ロボット
ディープラーニングとROSで作る自動運転ロボット
 

AppleWatch発売!Apple Watch WatchKit勉強会-Notification

Editor's Notes

  1. ブリリアントサービスでシニアエンジニアを務めております。元々Androidクラスターな人なんですけども、会社内ではどうもiOSの人と思われているようで、最近はiOSのお仕事ばかりやってます。
  2. では、Notificationのサンプルアプリの動作について見ていただくことにします。(実機)
  3. ※Apple Developerの有料のほうが必要です。
  4. カテゴリー名を指定しておく
  5. Identifierに先ほどのidentiferが入っている。 remoteNotificationには
  6. これだけでだいぶ雰囲気かわります。
  7. これだけでだいぶ雰囲気かわります。