Implicit personalization
Implicit personalization is available for Moments and Stories.
Implicit personalization is the For you path in Concepts: the service learns from viewer behavior and returns a ranked list the SDK serves to the viewer. You configure the Recommendations data source with the For you type.
Trending also uses the Recommendations data source in the SDK, but it ranks global popularity. Trending is not implicit personalization. See Content recommendations for how Trending and Personalization (explicit and implicit) fit under the recommendations umbrella. To fetch the trending ranking server-side rather than through the SDK, see Recommendations.
Implicit personalization implementation
Implicit personalization ranks Moments and Stories using viewer behavior and machine learning. Point a widget or player source at the Recommendations data source with For you. There is no need for you to interpret or remap viewer signals to labels or content IDs.
Until a viewer reaches the interaction threshold, For you serves cold start content instead of full recommendations-engine ranking. See Cold start for For you below.
See Recommendations data source and Player sources for availability.
For you parameters
When you configure For you, you can use two optional label parameters. They have different purposes:
| Parameter | What it does | When it applies |
|---|---|---|
anyLabelFilter | Limits For you to content that has at least one of these labels. The recommendations engine still ranks the results. | Always, for new and returning viewers. |
coldStartLabels | Sets the cold-start labels for viewers who don't have enough interactions yet. | Only below the interaction threshold. Ignored after the viewer reaches the threshold. |
The For you cold start parameter was renamed from promotedLabels to coldStartLabels in Web SDK 0.35.6, iOS SDK 1.20.0, Android SDK 1.20.3, React Native SDK 1.20.0, and Flutter SDK 1.20.0. There's no alias, so update any For you data source that still passes promotedLabels. On earlier SDK versions, use promotedLabels.
Use anyLabelFilter when For you should stay inside a content category, like soccer. Use coldStartLabels when you want to control the starter content for new viewers before the recommendations engine has enough viewer behavior.
Cold start for For you
For you uses an interaction threshold. The WSC Sports team sets the threshold per app (default 100). Views, likes, shares, and similar interactions count toward that total. The count is kept per content type, so a viewer can be above the threshold for Moments and below it for Stories.
Recommendation feed journeys
The following determine which feed a viewer gets: whether the viewer is identified (the SDK has a viewer ID that interactions accumulate against), and whether their interaction count has reached the threshold.
| Viewer | Below the threshold | At or above the threshold |
|---|---|---|
Identified A viewer ID is set, and interactions accumulate against it. | Cold start. With coldStartLabels set, viewers see label-based content matching those labels, newest first. Without it, viewers see the Trending feed. | For you. The recommendations engine ranks content from the viewer's own behavior. coldStartLabels has no effect. |
Unidentified No viewer ID, or the viewer is anonymous. | Cold start, exactly as above: label-based content when coldStartLabels is set, otherwise Trending. | Typically cold start. With no persistent ID, interaction history isn't carried across visits, so the viewer typically starts back in cold start each time they return. |
If a cold start feed doesn't return enough content on its own, the rest is backfilled from the recommendations engine, cold start content first, though still fairly generic below the threshold.
coldStartLabels applies to For you only. It doesn't affect Trending.
See Recommendations data source for the parameter on the For you type.
Check whether a viewer is in cold start
The mobile SDKs report whether the current viewer's For you feed for a content type is served cold start content (true) or personalized content (false). Use it, for example, to show onboarding until the feed is personalized.
// iOS (call it on the main thread)
let isColdStart: Bool? = Blaze.shared.isInColdStart(for: .moments)// Android
val isColdStart: Boolean? = BlazeSDK.isInColdStart(BlazePlayerType.MOMENTS)The result is nil (iOS) or null (Android) when the status is unknown, for example for an anonymous viewer (no external user ID set) or before the viewer's activity is fetched in the current session. The status refreshes when the SDK initializes, when the app returns to the foreground, and when the user changes. It doesn't change mid-session as the viewer interacts.
Privacy considerations for implicit personalization
For implicit personalization (For you), ranking is handled by the recommendations service based on viewer behavior. For the recommendations service to work, the SDK passes the viewer ID and viewer behavior signals to the service. The service then provides you with a ranked list of content relevant to the viewer.
A For you data source still works when the viewer has do-not-track on. Without a viewer ID they count as unidentified. See Recommendation feed journeys.
Updated about 9 hours ago
