Going live QA checklist
Before going live with Feed.fm in your app, please perform the following quality assurance checks using the same device (or closest equivalent) as your end users.
The first part applies to every integration. The two sections after it cover what is specific to an SDK integration and to a direct REST API integration.
Every integration
API credentials
Ensure the correct API keys are used that correspond to your development and production apps. Using the development API key for your production app can cause issues with analytics. See Apps and Credentials for where each pair comes from.
The consumer secret never reaches a device. Mint access credentials server-side and hand those to your clients.
Metadata
Song metadata needs to display for 5 seconds each time a new song starts playing. It must be no more than one click from the music experience.
- Verify the
Song Titleis displayed. - Verify the
Artist Nameis displayed. - Verify the
Album Titleis displayed. - Verify Powered by Feed.fm or the Feed.fm logo is displayed.
Consider the following UX patterns to save space:
- Progressive Disclosure: show only the song title or artist and allow users to click for more info
- Popover: show a music icon and allow users to click for more info
- Marquee: text scrolls horizontally and in a loop
In-app disclaimer
The in-app disclaimer should be no more than two user clicks from the music experience. Click on Powered by Feed.fm or the Feed.fm logo and verify the in-app disclaimer:
There is no affiliation, connection, association or endorsement of the products, goods or services displayed on this page by the copyright owners, featured recording artists and authors of the sound recordings (and the musical works embodied therein) transmitted through the Feed.fm player.
Testing stations and regions
- Select and play all stations.
- Verify the stations selected are the correct mapped stations and songs played.
- Confirm your app functions properly when no or slow Internet connection is available, or when your user isn't eligible for music playback.
We recommend using a VPN to test ineligibility in different regions. The
test credentials cover some of
this without one: badgeo is a client with no music available, and counting
plays short clips, which makes song transitions fast to test. Please contact
your Customer Success Manager, who can provide you with further test
credentials.
Play/pause
Users can select play and pause and like/dislike (if applicable).
- Verify the user can select the Play button.
- Verify user can select the Pause button.
- Verify the user can select the Like button.
- Verify user can select the Dislike button.
Like, dislike and skip are not available for every song or in every country. Show each control only when the song currently playing allows it, and hide it otherwise.
Volume
When playing music alongside additional video/audio, ensure that the station volume is playing at a suitable volume in the following cases:
- Verify the default additional/music volume.
- Verify the low/high master volume.
If you are using faders to independently control the music and additional video/audio volumes:
- Verify the low/high music volume (if applicable).
- Verify the low/high additional video/audio volume (if applicable).
Logs
To help diagnose any future issues we recommend:
- Collect users
clientIdso it will be possible to identify them. - If possible, have a system to retrieve console logs of a session for a given
clientId.
SDK integrations
The SDKs report playback, request skip permission and manage client credentials for you. What is left to your app is the UI and the logging.
- Feed logging is turned on for all clients.
-
player.logEvent(..)sends events to Feed.fm with additional info on a user's actions. This can be called either before or after an error. You may send what you think is about to be played, message and code, version of client app, timestamp user joining, if user joined live/OD, station is First play, Replay, and anything else of importance.
Direct API integrations
Calling the REST API directly makes your app responsible for the work an SDK would otherwise do. These checks are in addition to the ones above.
-
client_idis persisted across restarts and is 23 characters or fewer. Longer values are silently truncated. - Use one
client_idper device at a time. No two devices make calls under the same client id at the same time. - Every response is checked for
success, not just the HTTP status. Four error codes arrive as HTTP 200. - Every play is reported:
startthencomplete, orinvalidatewhen the song never played. - No song is skipped without a granted skip from
POST /play/{id}/skip. - API requests are not proxied on behalf of listeners.
- Skip and like controls are driven by
can_skipandcan_like. - Backoff is implemented for
throttled(code 22). - If an audio file is unretrievable, ensure any
Expiresparameter in the URL is the future before marking the audio file as 'invalid'. If a URL has expired, then make a new call toPOST /playto generate a new audio file with an updated URL. - The app is tested against the
test credentials:
demo,counting,crossfader, andbadgeofor the case where a listener has no music available.