Car App — 車載インフォテインメントシステム向けアプリケーションで、Apple CarPlayおよびAndroid Autoと統合されます。CarPlayはAppleの技術で、iPhoneのインターフェースを車の画面に投影し、Siri、タッチスクリーン、またはステアリングホイールのボタンで操作します。Android AutoはAndroidスマートフォン向けのGoogleの類似技術です。Car Appの開発には、iOS向けのSwiftでのCarPlay frameworkとSiriKitを使用したアプリケーション、およびAndroid向けのKotlinでのCar App Library、MediaBrowserService、NavigationManagerを使用したアプリケーションの作成が含まれます。Car Appのサポートは現代の自動車の標準になりつつあります — Appleによると、米国の新車の98%がCarPlayをサポートし、Android Autoは200以上のモデルで利用可能です。
重要なポイント
Car App — スマートフォンの投影を介して車載インフォテインメントシステム(IVI)で動作するアプリケーションです — iOS向けApple CarPlay、Android向けAndroid Auto。Android Automotive OS(車に組み込まれたOS)とは異なり、CarPlayとAndroid Autoはモバイルアプリケーションの拡張機能であり、電話上で実行され、インターフェースを車の画面に投影します。Car Appは、CarPlayまたはAndroid Autoのプロトコルを実装する既存のiOS/Androidアプリです。
Car Appの主要カテゴリ: ナビゲーション(Apple Maps、Google Maps、Waze、Sygic)、オーディオ(Spotify、Apple Music、YouTube Music、Audible、Castbox)、メッセージング(Siri/Google Assistantによる読み上げとディクテーション)、自動車機能(EV充電、駐車、車両状態)、VOIP通話(WhatsApp、Zoom)。各カテゴリには独自のインターフェーステンプレートがあります — ListTemplate、MapTemplate、AudioTemplate。システム自体が、登録されたIntentsに基づいてアプリケーションがどのカテゴリをサポートするかを決定します。
Car Appの制限: AppleとGoogleは安全性のためにUXを厳格に管理しています — 最小限の要素数、大きなボタン(最小48x48 pt)、テキスト入力なし(音声のみ)、運転中の自動インターフェース調光、動画禁止。押下時の応答時間は100 ms未満である必要があります。すべてのアプリケーションは必須の審査を受けます(CarPlayの場合はApp Review、Android Autoの場合はGoogle Play Console + CTS)。
CarPlay framework(旧CPKit) — SwiftでCarPlayアプリケーションを作成するためのAppleのフレームワーク。主要なクラスはCPInterfaceControllerで、テンプレートナビゲーションを管理します。CPInterfaceControllerにはテンプレートスタックが含まれています:CPListTemplate(リスト)、CPMapTemplate(ナビゲーション)、CPNowPlayingTemplate(オーディオ)、CPVoiceControlTemplate(音声制御)。CPListTemplateにはCPListItemが含まれています — アイコン、テキスト、アクション付きのリストアイテムです。
CarPlay向けSiriKit — 車内でのアプリケーションの音声制御のためのSiriKit拡張機能。アプリケーションはIntentsを登録します(INPlayMediaIntent — 再生、INStartWorkoutIntent — ワークアウト、INSendMessageIntent — メッセージ)。CarPlay接続時にSiriが自動的に有効になり、ステアリングホイールの音声制御ボタンから利用可能です。SiriKit CarPlayはCarPlay Dashboardをサポートしています — CarPlayホーム画面にアプリケーションからの情報(目的地、現在のトラック)を表示するウィジェットです。
CarPlay接続プロセス: iPhoneはLightning/USB-Cケーブルまたはワイヤレス(CarPlay Wireless、iOS 9以降)で車に接続します。接続後、アプリケーションがCPApplicationDelegateを実装している場合、iOSは自動的にCarPlayセッションを開始します。開発者は接続のタイミングを制御しません — システムはセッションの開始時と終了時にdelegateメソッドを呼び出します。CarPlayはマルチタスキングをサポートしています:音楽に切り替えてもナビゲーションはバックグラウンドで動作し、音声ガイダンスは鳴り続けます。
Android Car App Library — Android Autoと互換性のあるアプリケーションを作成するためのAndroidライブラリ。基本コンポーネント:CarAppService — Android Autoのエントリポイント;Session — セッションのライフサイクル管理;Screen — アプリケーションの各画面;CarScreenManager — 表示管理。アプリケーションはメディアコンテンツ用のMediaBrowserServiceとナビゲーション指示用のNavigationManagerをサポートします。
MediaBrowserService — オーディオアプリケーションの主要コンポーネント。アプリケーションは再生を管理するためにMediaBrowserServiceとMediaSessionを実装します。Android Autoは自動的にコントロール(再生/一時停止、次へ、前へ)とトラックリストを表示します。NavigationManagerはナビゲーションアプリケーションに使用されます — 曲がり角の指示、ルートステータス、アラートを中継します。NavigationManagerはAndroid Autoのステータスバーにナビゲーション指示を表示するためのCarNotificationをサポートしています。
Android Autoの要件: アプリケーションのマニフェストにcategory="android.intent.category.APP_AUTO"が必要です;AndroidXと最小SDK 26+の使用が必須;ダークテーマ(DayNight)のサポート;タッチおよび音声制御のサポート;Android Auto Compatibility Test Suite(CTS)への準拠。Google PlayはセキュリティとUX要件への準拠について各アプリケーションをチェックします。認証プロセスには1〜4週間かかります。
CarPlay frameworkを使用したSwiftでのCarPlay向けナビゲーションアプリケーションの例。
import CarPlay
class CarPlaySceneDelegate: CPTemplateApplicationSceneDelegate {
func templateApplicationScene(
_ templateApplicationScene: CPTemplateApplicationScene,
didConnect interfaceController: CPInterfaceController
) {
let searchItem = CPListItem(
text: "住所を検索",
detailText: "目的地を入力"
)
searchItem.handler = { _, completion in
// 検索画面を開く
completion()
}
let favoritesItem = CPListItem(
text: "お気に入り",
detailText: "保存済み住所"
)
favoritesItem.handler = { _, completion in
showFavorites()
completion()
}
let section = CPListSection(items: [searchItem, favoritesItem])
let listTemplate = CPListTemplate(
title: "ナビゲーション",
sections: [section]
)
interfaceController.setRootTemplate(listTemplate, animated: true)
}
func showFavorites() {
// お気に入り住所のリストを表示
}
}
// 音声制御用のSiriKit Intent
class NavigationIntentHandler: NSObject, INSearchForMessagesIntentHandling {
func handle(intent: INSearchForMessagesIntent,
completion: @escaping (INSearchForMessagesIntentResponse) -> Void) {
// Siriを介した音声コマンドの処理
let response = INSearchForMessagesIntentResponse(
code: .success, userActivity: nil
)
completion(response)
}
}
重要なポイント:CPTemplateApplicationSceneDelegate — CarPlayセッションのエントリポイント;CPInterfaceControllerがテンプレートスタックを管理;CPListTemplateとCPListItem — 基本UIコンポーネント;.handler — 各リストアイテムのクリックハンドラ。
Car App Libraryを使用したKotlinでのAndroid Auto向けナビゲーションアプリケーションの例:
// CarAppService — Android Autoのエントリポイント
class NavigationCarAppService : CarAppService() {
override fun createSession(): Session = NavigationSession()
}
// Session — セッションのライフサイクル管理
class NavigationSession : Session() {
override fun onCreateScreen(manager: ScreenManager): Screen {
return MainScreen(carContext)
}
}
// MainScreen — ナビゲーション付きメイン画面
class MainScreen(carContext: CarContext) : Screen(carContext) {
override fun onGetTemplate(): Template {
val searchAction = Action.Builder()
.setTitle("住所を検索")
.setOnClickListener { showSearchScreen() }
.build()
val favoritesAction = Action.Builder()
.setTitle("お気に入り")
.setOnClickListener { showFavorites() }
.build()
return ListTemplate.Builder()
.setTitle("ナビゲーション")
.setHeaderAction(Action.APP_ICON)
.addAction(searchAction)
.addAction(favoritesAction)
.build()
}
private fun showSearchScreen() {
screenManager.push(SearchScreen(carContext))
}
private fun showFavorites() {
screenManager.push(FavoritesScreen(carContext))
}
}
// AndroidManifest — サービスの登録
<service
android:name=".NavigationCarAppService"
android:exported="true">
<intent-filter>
<action
android:name="androidx.car.app.action.NAVIGATION" />
</intent-filter>
<category
android:name="android.intent.category.APP_AUTO" />
</service>
重要なポイント:CarAppService — Android Autoのエントリポイント;Session — ライフサイクル管理;Screen — アプリケーションの各画面、Templateを返す;ListTemplate — Action付きリスト用テンプレート;category.APP_AUTO — マニフェストの必須カテゴリ。
Apple CarPlayの要件: アプリケーションはCarPlay Distraction Design Guidelinesに準拠する必要があります — 最小ボタンサイズ48x48 pt、テキストコントラスト4.5:1、アニメーションや動画なし、VoiceOverサポート。公開 — App Store Connectを介して、アプリケーションは標準のApple審査を受けます。App Store ConnectでCarPlayサポートを指定し、CarPlayインターフェースのスクリーンショットを添付する必要があります。CarPlayアプリケーションは広告なしで無料にすることはできません — Appleはアプリ内購入に対して30%(小企業は15%)の手数料を課します。
Android Autoの要件: アプリケーションはAndroid Auto Design Guidelinesに準拠し、Android Auto Compatibility Test Suite(CTS)に合格する必要があります。公開 — Google Play Consoleを介して、互換デバイスリストに「Android Auto」カテゴリを指定する必要があります。Google Playは以下をチェックします:ダークテーマ(DayNight)のサポート、接続喪失時の正しい動作、画面回転の処理、Google Assistantを介した音声制御のサポート。Android Autoアプリケーションに追加の手数料は必要ありません — 標準のGoogle Playモデル(15-30%)。
| パラメータ | Apple CarPlay | Android Auto |
|---|---|---|
| フレームワーク | CarPlay framework(CPInterfaceController) | Car App Library(CarAppService) |
| 言語 | Swift | Kotlin |
| 音声アシスタント | SiriKit | Google Assistant |
| インターフェース | CPListTemplate、CPMapTemplate | ListTemplate、MapTemplate |
| メディア | MPNowPlayingInfoCenter | MediaBrowserService |
| ナビゲーション | CPNavigationSession | NavigationManager |
| 公開 | App Store Connect | Google Play Console |
| 手数料 | 15–30% | 15–30% |
| 審査 | App Review(1〜3日) | CTS + Google Play(1〜4週間) |
ワイヤレス接続サポート: CarPlay WirelessはiOS 9以降で利用可能で、Wi-Fi + Bluetoothが必要です。Android Auto WirelessはAndroid 11以降で利用可能です。ワイヤレス接続には、車が対応する標準をサポートしている必要があります。開発者は追加のコードを書く必要はありません — OSが自動的に接続を処理します。
よくある質問
Car Appは運転中の使用に最適化されています:最小限の要素、大きなボタン、音声制御、テキスト入力なし。アプリケーションは安全性要件に準拠する必要があります — AppleとGoogleのDistraction Design Guidelines。
CarPlayは以下のカテゴリをサポートしています:ナビゲーション(Apple Maps、Google Maps、Waze)、オーディオ(Spotify、Apple Music)、メッセージング(Siriによる読み上げとディクテーション)、自動車機能(EV充電、駐車)、VOIP通話。
Android Car App Libraryを使用します:エントリポイントとしてCarAppService、ライフサイクル管理にSession、各画面にScreenを実装します。アプリケーションはメディア用にMediaBrowserService、ナビゲーション用にNavigationManagerをサポートする必要があります。
はい、両方のプラットフォームで審査が必要です。AppleはApp Reviewを通じてCarPlayアプリケーションを審査します。Android AutoはAndroid Auto Compatibility Test Suite (CTS)に合格し、Google Play Consoleでの確認が必要です。
CarPlay — SwiftとCarPlayフレームワーク(CPInterfaceController、CPTemplate、CPListItem)およびSiriKit。Android Auto — KotlinとCar App LibraryおよびMediaBrowserService。
まとめ
ターンキー方式のモバイルアプリケーションを開発します
IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。