APPLINK BEST PRACTICES ELIZABETH HALASH PRODUCT DEVELOPMENT ENGINEER
Static Buttons
Voice Commands
Soft Buttons
Additional considerations • Detecting different displays and graphics support • Performance in-vehicle – How to best initialize app – Options for loading voice commands • Providing feedback regarding current app status – Display vs. voice – Ideally near instant acknowledgment to any user input • Navigating AppLink in vehicle • Language Considerations – Changing app language to match SYNC (19 languages) – Regional languages 3
Buttons • onButtonPress() notification – Sent to app from SYNC whenever any button is pressed (steering wheel, center stack, touch screen, softbutton) • LONG vs SHORT Press // BUTTONDOWN vs. BUTTONUP Modes – Example: SEEK button • Skip, Thumbs up, Fast forward • Presets – Up to 10 (0-9) buttons – Often used to mimic radio presets with hold & save • Which hard buttons are available? – Response to proxy.subscribeButton(ButtonName.PRESET_9, CorrId); – SYNC will return NOT_SUPPORTED 4
Softbuttons App can write text, icon (static or dynamic), or both • MFD displays (3-5 in, color, nontouch)
• Touch screen display implementation:
same
4 dynamic fields 5
Using Voice with SYNC • How to use it: – Register commands you want SYNC to recognize by loading grammars onto the system via either a string of text or phonemes (phonetic sounds, i.e. read vs reed) • How it works: – SYNC does the recognition on behalf of the app – If unsure of what the user said, it will provide an N-best list for the user to choose their command. – If no match is found, it will ask the user to repeat the utterance. • Upon successful recognition: – Positive chime is played – onCommand() notification is sent to app using a commandID
6
App Commands and SYNC System Commands • SYNC itself comes with embedded, system voice commands that cannot be re-used by an app, such as ‘help,’ ‘exit,’ ‘cancel’ • SYNC executes these commands on behalf of an app • For example: “ Help”: – Option 1: 1 setGlobalProperties() – app populates the help prompt • App can sent this at any time for contextual help – Option 2: Let sync populate this for you with the first few voice grammar you load onto the system. • Not ideal: the list of commands in the help prompt may vary.
7
Choosing Which Commands to Load Q: What are the major features/functions of my app? A: Top-level voice commands (AddCommands()). Q: Do I use shortcuts, favorites, presets, etc. within my app? A: Preset buttons in vehicle. Q: Is there long list(s) of items to select from within your application? A: Load these as items in a ChoiceSet – 300 items take about 15-25 seconds to load and slightly slows SYNC’s response to user input during loading. – Ability to concatenate ChoiceSets during a single PerformInteraction(). Q: What AddCommands() should my audio streaming application use? 8
A: Play, Pause or Stop, Resume, Skip, Skip back
Utilizing the In-Vehicle Display • Current SYNC displays offer 2-4 lines of text, media clock timer, media track field
Lines 1&2 Media clock Media Track
9
Utilizing the In-Vehicle Display • Update meta data • Provide simple information to the user • Update status information of the app, such as “Buffering” • No scrolling/flashing text • Determine which display is currently connected if (currentDisplay == DisplayType.MFD4 || currentDisplay == DisplayType.MFD5 || currentDisplay == DisplayType.MFD3)
{…setup} else if( currentDisplay == DisplayType.CID)
{…setup} else if (currentDisplay == DisplayType.8-INCH)
{…setup}
10
Performance in-vehicle • If your app loads many commands: – Send a small number of the most important requests immediately, including: • button subscriptions • custom prompts (SetGlobalProperties()) • 4 or 5 of the most important commands. • Using a timer or background thread, send the remaining AddCommand() requests in batches of 5 or every second or so. • SYNC will disconnect on these conditions: – More than 200 RPC requests in 2 seconds. – Mobile application sends more than 5 requests within 5 seconds in HMILevel NONE. 11
Alert vs PerformInteraction • Alerts(): short, informative messages that can be: – Similar to push notifications on your phone – Dismissed by: • User closing • Time out • User input via softbuttons • PerformInteractions(): dedicated one-time question and answer sessions that require a user’s response from a set of choices. – Example: • App initial prompt: “Please select a state.” • User: “Michigan” (1 of 50 items in the choiceSet of states) • If your application requires the user to choose from muttiple options (more than 2), you should use the PerformInteraction() API. 12
Providing Feedback to the User • Instant acknowledgment to any user input • Providing updates during buffering or other delays • How to provide feedback? – Display vs. voice • When designing your voice tree, be aware that you can trigger up to 3 voice prompts in a row using PerformInteraction. This is due to both driver distraction rules as well as ease-of-use. The following is an example: – SYNC®: “Please select a country.” – User: “USA” – SYNC®: “USA, please select a state.” – User: “Michigan” – SYNC®: “Michigan, please select a city.” – User: “Detroit.” 13
Finding Mobile Apps In Vehicle: setAppIcon()
14
Different Languages • What is SYNC’s language? – The “RegisterAppInterface” RPC will report SYNC’s language to you Or – proxy.getSyncLanguage() • Changing app language to match SYNC (19 languages) – ChangeRegistration() – If this is not possible to change, SYNC will inform the user that the App’s language differs from SYNC and that Voice commands will not work as expected • Ensure SYNC pronounces AppName correctly.
15
Final considerations • Keep it Simple, want it to “Just Work” in the car • Consumption vs. Discovery • Focus on using voice instead of the display. – Driver distraction rules prevent traversing through submenus
16
QUESTIONS?