Skip to main content

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.

  1. Verify the Song Title is displayed.
  2. Verify the Artist Name is displayed.
  3. Verify the Album Title is displayed.
  4. Verify Powered by Feed.fm or the Feed.fm logo is displayed.
tip

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​

  1. Select and play all stations.
  2. Verify the stations selected are the correct mapped stations and songs played.
  3. 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).

  1. Verify the user can select the Play button.
  2. Verify user can select the Pause button.
  3. Verify the user can select the Like button.
  4. 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:

  1. Verify the default additional/music volume.
  2. Verify the low/high master volume.

If you are using faders to independently control the music and additional video/audio volumes:

  1. Verify the low/high music volume (if applicable).
  2. Verify the low/high additional video/audio volume (if applicable).

Logs​

To help diagnose any future issues we recommend:

  1. Collect users clientId so it will be possible to identify them.
  2. 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_id is persisted across restarts and is 23 characters or fewer. Longer values are silently truncated.
  • Use one client_id per 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: start then complete, or invalidate when 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_skip and can_like.
  • Backoff is implemented for throttled (code 22).
  • If an audio file is unretrievable, ensure any Expires parameter in the URL is the future before marking the audio file as 'invalid'. If a URL has expired, then make a new call to POST /play to generate a new audio file with an updated URL.
  • The app is tested against the test credentials: demo, counting, crossfader, and badgeo for the case where a listener has no music available.