Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.
CarPlayの対応方法と
日本での現状
iOSDC Japan 2016
Yuji Hato
About me
Yuji Hato
CyberAgent, Inc. / AbemaTV, Inc.
dekatotoro
@dekatotoro
Contributed service
What is CarPlay
対応状況
対応方法
UI
実装
iOS10 新機能
まとめ
What is CarPlay
• 2014年3月3日にCarPlayが正式発表
• iPhone端末をカーナビ等の車載機器に連動させる
システム
• Maps、Music、Phone、Messages、Podcastsなどの
iOSアプリやS...
http://www.apple.com/jp/ios/carplay/
What is CarPlay
対応状況
対応方法
UI
実装
iOS10 新機能
まとめ
対応 Device
対応 Device
• iPhone5以上
• iPad、iPodには対応していない
http://www.apple.com/jp/ios/carplay/
対応 iOS
対応 iOS
• iOS7.1以上
• iOS8.4、iOS9.0でAPIに少し変更あり
• iOS10でUI、APIに変更が入る
対応 アプリ
対応 アプリ
• Tuneln Radio
• MLB.com At Bat
• NHK WORLD TV ? • Audible
• VOX
• Audio Books
• Spotify
• AWA
日本 海外
etc…
対応 ナビ
対応 ナビ
純正ナビ 対応ナビ 対応車種
トヨタ
-
-
スズキ 多機能メモリーナビゲーション
イグニス、ソリオ、スペーシア、ハス
ラー
日産 プレミアムナビ 選択ナビ次第
ホンダ スタンダードナビ以上 選択ナビ次第、Accord、Legend...
What is CarPlay
対応状況
対応方法
UI
実装
iOS10 新機能
まとめ
対応方法
1. 開発したい旨を申請する
下記から自分のアプリでCarPlayに対応したい旨を申請する
https://developer.apple.com/contact/carplay/
対応方法
2. Agreementの送付
1の申請がOKの場合、Agreementが送られてくるので内容を確認し
て記入・署名して返送
対応方法
3. TeamIDの確認
Agreementが問題なければ、TeamIDを聞かれるのでAppleに伝える
※このタイミングでProgramingガイドも送られてきます
対応方法
4. Provisioning Profileの再作成
AppleによりCarPlay開発の設定が有効にされると、Porvisioning
Profile作成時にCarPlayのEntitlements設定が出てくるようにな
ります。
対応方法
5. Simulator
CarPlay用のSimulatorを使って開発をすることができます
What is CarPlay
対応状況
対応方法
UI
実装
iOS10 新機能
まとめ
UI
• リスト表示
• 階層構造
• 再生表示
• エラー表示
UI
リスト表示/階層構造
第1階層 第2階層 第3階層
UI
再生表示
UI
エラー表示
What is CarPlay
対応状況
対応方法
UI
実装
iOS10 新機能
まとめ
実装
• MPPlayableContentManager
• MPPlayableContentDataSource
• MPPlayableContentDelegate
リスト表示・階層構造
実装
MPPlayableContentManager
class CarPlayDemo: NSObject,
MPPlayableContentDataSource,
MPPlayableContentDelegate {
static l...
実装
MPPlayableContentDataSource
func numberOfChildItemsAtIndexPath(indexPath: NSIndexPath) -> Int {
// indexPathに応じたリストの件数を...
実装
MPPlayableContentDelegate
func playableContentManager(contentManager: MPPlayableContentManager,
initiatePlaybackOfConte...
実装
補足 NSIndexPath
let indexPath = NSIndexPath(indexes: [1,4,3,2], length: 4)
print(indexPath.length) // 4
print(indexPath....
実装
• MPNowPlayingInfoCenter
• MPRemoteCommandCenter
再生表示/制御
実装
MPNowPlayingInfoCenter
var trackInfo: [String: AnyObject] = [:]
trackInfo[MPMediaItemPropertyTitle] = "trackName"
track...
実装
MPRemoteCommandCenter
let remoteCommandCenter = MPRemoteCommandCenter.sharedCommandCenter()
remoteCommandCenter.nextTra...
実装
エラー表示
// MPPlayableContentDataSource
func beginLoadingChildItemsAtIndexPath(indexPath: NSIndexPath, completionHandler:
...
実装
• リストの生成は一度に件数分MPContentItemが生成される
• MPContentItemのidentifierが同じだとitemが再利用される
• dataSource、delegateはメインスレッドでこない
• iOS8....
What is CarPlay
対応状況
対応方法
UI
実装
iOS10 新機能
まとめ
iOS10 新機能
• タブナビゲーションのサポート
• シャッフルとリピート表示など
• 再生中メディアのマーク表示
Audio apps
• Siriサポート
Automaker apps
Messaging apps
• Siriサポート
What is CarPlay
対応状況
対応方法
UI
実装
iOS10 新機能
まとめ
まとめ
• UIはシンプル
• 開発コストは低い
• 日本での普及はこれから
ナビの付帯機能としてのCarPlay
ナビとしてのCarPlay
CarPlayのナビ精度改善/機能
拡充と対応アプリの増加
Thank you
参考資料
http://www.apple.com/jp/ios/carplay/
https://developer.apple.com/carplay/
https://developer.apple.com/video...
Nächste SlideShare
Wird geladen in …5
×

CarPlayの対応方法と日本での現状

iOSDC Japan 2016

  • Loggen Sie sich ein, um Kommentare anzuzeigen.

CarPlayの対応方法と日本での現状

  1. 1. CarPlayの対応方法と 日本での現状 iOSDC Japan 2016 Yuji Hato
  2. 2. About me Yuji Hato CyberAgent, Inc. / AbemaTV, Inc. dekatotoro @dekatotoro Contributed service
  3. 3. What is CarPlay 対応状況 対応方法 UI 実装 iOS10 新機能 まとめ
  4. 4. What is CarPlay • 2014年3月3日にCarPlayが正式発表 • iPhone端末をカーナビ等の車載機器に連動させる システム • Maps、Music、Phone、Messages、Podcastsなどの iOSアプリやSiriを車載ディスプレイで直接操作できる • サードパーティのAudioアプリも対応可能 • 本体アプリの一部として動作する
  5. 5. http://www.apple.com/jp/ios/carplay/
  6. 6. What is CarPlay 対応状況 対応方法 UI 実装 iOS10 新機能 まとめ
  7. 7. 対応 Device
  8. 8. 対応 Device • iPhone5以上 • iPad、iPodには対応していない http://www.apple.com/jp/ios/carplay/
  9. 9. 対応 iOS
  10. 10. 対応 iOS • iOS7.1以上 • iOS8.4、iOS9.0でAPIに少し変更あり • iOS10でUI、APIに変更が入る
  11. 11. 対応 アプリ
  12. 12. 対応 アプリ • Tuneln Radio • MLB.com At Bat • NHK WORLD TV ? • Audible • VOX • Audio Books • Spotify • AWA 日本 海外 etc…
  13. 13. 対応 ナビ
  14. 14. 対応 ナビ 純正ナビ 対応ナビ 対応車種 トヨタ - - スズキ 多機能メモリーナビゲーション イグニス、ソリオ、スペーシア、ハス ラー 日産 プレミアムナビ 選択ナビ次第 ホンダ スタンダードナビ以上 選択ナビ次第、Accord、Legend等は× マツダ - - 三菱 - 欧州向けパジェロ。日本はまだ未対応 スバル 次期インプレッサ ベンツ A,B,CLA,CLS,GLA,GLE、今後順次 BMW - Audi - A4, Q7。今後順次 VW Composition-media New Polo,Tiguanなど。今後順次 GM 2016年以降発売の全モデル対応 Ford 2016年発売の全モデル対応 Volvo XC90/2016 S90,V90/2017 サードパーティ 対応ナビ 対応車種 パイオニア SPH-DA700 アルパイン iLX-007 日本では未発売 メーカーホームページなどからの独自調べ 2016/08/14現在
  15. 15. What is CarPlay 対応状況 対応方法 UI 実装 iOS10 新機能 まとめ
  16. 16. 対応方法 1. 開発したい旨を申請する 下記から自分のアプリでCarPlayに対応したい旨を申請する https://developer.apple.com/contact/carplay/
  17. 17. 対応方法 2. Agreementの送付 1の申請がOKの場合、Agreementが送られてくるので内容を確認し て記入・署名して返送
  18. 18. 対応方法 3. TeamIDの確認 Agreementが問題なければ、TeamIDを聞かれるのでAppleに伝える ※このタイミングでProgramingガイドも送られてきます
  19. 19. 対応方法 4. Provisioning Profileの再作成 AppleによりCarPlay開発の設定が有効にされると、Porvisioning Profile作成時にCarPlayのEntitlements設定が出てくるようにな ります。
  20. 20. 対応方法 5. Simulator CarPlay用のSimulatorを使って開発をすることができます
  21. 21. What is CarPlay 対応状況 対応方法 UI 実装 iOS10 新機能 まとめ
  22. 22. UI • リスト表示 • 階層構造 • 再生表示 • エラー表示
  23. 23. UI リスト表示/階層構造 第1階層 第2階層 第3階層
  24. 24. UI 再生表示
  25. 25. UI エラー表示
  26. 26. What is CarPlay 対応状況 対応方法 UI 実装 iOS10 新機能 まとめ
  27. 27. 実装 • MPPlayableContentManager • MPPlayableContentDataSource • MPPlayableContentDelegate リスト表示・階層構造
  28. 28. 実装 MPPlayableContentManager class CarPlayDemo: NSObject, MPPlayableContentDataSource, MPPlayableContentDelegate { static let shared = CarPlayDemo() func setup() { MPPlayableContentManager.sharedContentManager().delegate = self MPPlayableContentManager.sharedContentManager().dataSource = self } … } func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { … CarPlayDemo.shared.setup() … }
  29. 29. 実装 MPPlayableContentDataSource func numberOfChildItemsAtIndexPath(indexPath: NSIndexPath) -> Int { // indexPathに応じたリストの件数を返す return 4 } func contentItemAtIndexPath(indexPath: NSIndexPath) -> MPContentItem? { // indexPathに応じたMPContentItemを返す let contentItem = MPContentItem(identifier: "container1") contentItem.title = “container1" contentItem.artwork = CarPlayArtwork.Home.artwork contentItem.container = true contentItem.playable = false return contentItem }
  30. 30. 実装 MPPlayableContentDelegate func playableContentManager(contentManager: MPPlayableContentManager, initiatePlaybackOfContentItemAtIndexPath indexPath: NSIndexPath, completionHandler: (NSError?) -> Void) { // indexPathに応じたコンテンツを再生 … completionHandler(nil) }
  31. 31. 実装 補足 NSIndexPath let indexPath = NSIndexPath(indexes: [1,4,3,2], length: 4) print(indexPath.length) // 4 print(indexPath.indexAtPosition(0)) // 1 print(indexPath.indexAtPosition(1)) // 4 print(indexPath.indexAtPosition(2)) // 3 print(indexPath.indexAtPosition(3)) // 2 // Get with pointer var indexesPtr = UnsafeMutablePointer<Int>.alloc(indexPath.length) indexPath.getIndexes(indexesPtr) let indexes = [Int](UnsafeBufferPointer(start: indexesPtr, count: indexPath.length)) indexes.forEach { value in print(value) // 1 4 3 2 }
  32. 32. 実装 • MPNowPlayingInfoCenter • MPRemoteCommandCenter 再生表示/制御
  33. 33. 実装 MPNowPlayingInfoCenter var trackInfo: [String: AnyObject] = [:] trackInfo[MPMediaItemPropertyTitle] = "trackName" trackInfo[MPMediaItemPropertyArtist] = "artistName" trackInfo[MPMediaItemPropertyAlbumTitle] = "albumName" trackInfo[MPMediaItemPropertyPlaybackDuration] = 60 trackInfo[MPNowPlayingInfoPropertyElapsedPlaybackTime] = 10 trackInfo[MPNowPlayingInfoPropertyPlaybackRate] = isPlaying ? 1 : 0 trackInfo[MPMediaItemPropertyArtwork] = MPMediaItemArtwork(image: UIImage(asset: .ArtworkDemo)) MPNowPlayingInfoCenter.defaultCenter().nowPlayingInfo = trackInfo
  34. 34. 実装 MPRemoteCommandCenter let remoteCommandCenter = MPRemoteCommandCenter.sharedCommandCenter() remoteCommandCenter.nextTrackCommand.addTarget(self, action: #selector(RemoteCommand.next)) remoteCommandCenter.previousTrackCommand.addTarget(self, action: #selector(RemoteCommand.previous)) remoteCommandCenter.playCommand.addTarget(self, action: #selector(RemoteCommand.play)) remoteCommandCenter.pauseCommand.addTarget(self, action: #selector(RemoteCommand.pause)) remoteCommandCenter.togglePlayPauseCommand.addTarget(self, action: #selector(RemoteCommand.playOrPause)) …
  35. 35. 実装 エラー表示 // MPPlayableContentDataSource func beginLoadingChildItemsAtIndexPath(indexPath: NSIndexPath, completionHandler: (NSError?) -> Void) { // Error completionHandler(CarPlayErrorType.NoData.error()) } // MPPlayableContentDelegate func playableContentManager(contentManager: MPPlayableContentManager, initiatePlaybackOfContentItemAtIndexPath indexPath: NSIndexPath, completionHandler: (NSError?) -> Void) { // Error completionHandler(CarPlayErrorType.PlaybackError.error()) }
  36. 36. 実装 • リストの生成は一度に件数分MPContentItemが生成される • MPContentItemのidentifierが同じだとitemが再利用される • dataSource、delegateはメインスレッドでこない • iOS8.4からはMPPlayableContentManagerContextが利用できる 注意点
  37. 37. What is CarPlay 対応状況 対応方法 UI 実装 iOS10 新機能 まとめ
  38. 38. iOS10 新機能 • タブナビゲーションのサポート • シャッフルとリピート表示など • 再生中メディアのマーク表示 Audio apps • Siriサポート Automaker apps Messaging apps • Siriサポート
  39. 39. What is CarPlay 対応状況 対応方法 UI 実装 iOS10 新機能 まとめ
  40. 40. まとめ • UIはシンプル • 開発コストは低い • 日本での普及はこれから ナビの付帯機能としてのCarPlay ナビとしてのCarPlay CarPlayのナビ精度改善/機能 拡充と対応アプリの増加
  41. 41. Thank you 参考資料 http://www.apple.com/jp/ios/carplay/ https://developer.apple.com/carplay/ https://developer.apple.com/videos/play/wwdc2016/722/ https://developer.apple.com/videos/play/wwdc2016/723/ http://www.soumu.go.jp/johotsusintokei/whitepaper/ja/h26/html/nc141320.html http://news.mynavi.jp/articles/2016/01/17/carplay_androidauto_ces/

×