APPLINK BEST PRACTICES ELIZABETH HALASH PRODUCT DEVELOPMENT ENGINEER

APPLINK BEST PRACTICES ELIZABETH HALASH PRODUCT DEVELOPMENT ENGINEER Static Buttons Voice Commands Soft Buttons Additional considerations • Dete...
40 downloads 4 Views 2MB Size
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?