Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

📖 [AMP Story Paywall] amp-story-subscriptions documentation #38179

Merged
merged 11 commits into from
Jul 18, 2022
97 changes: 97 additions & 0 deletions extensions/amp-story-subscriptions/0.1/amp-story-subscriptions.md
@@ -0,0 +1,97 @@
---
$category@: presentation
formats:
- stories
teaser:
text: A configurable, templated subscriptions experience in AMP story pages.
tags:
- subscriptions
author: ychsieh
toc: true
$title: amp-story-subscriptions
version: '0.1'
versions:
- '0.1'
latest_version: '0.1'
$path: /documentation/components/amp-story-subscriptions.html
$localization:
path: '/{locale}/documentation/components/amp-story-subscriptions.html'
scripts:
- >-
<script async custom-element="amp-subscriptions"
src="https://cdn.ampproject.org/v0/amp-subscriptions-0.1.js"></script>
<script async custom-element="amp-subscriptions-google"
src="https://cdn.ampproject.org/v0/amp-subscriptions-google-0.1.js"></script>
<script async custom-element="amp-story"
src="https://cdn.ampproject.org/v0/amp-story-1.0.js"></script>
<script async custom-element="amp-story-subscriptions" src="https://cdn.ampproject.org/v0/amp-story-subscriptions-0.1.js"></script>
---

# amp-story-subscriptions

<amp-img alt="amp-story-subscriptions example UI" src="https://user-images.githubusercontent.com/1697814/167689085-94d9032f-e501-47cd-b06f-e40c8405b27f.png" layout="intrinsic" width="377" height="684"></amp-img>

# Summary

This component enables Web Stories to support paywalls and subscriptions in a manner following [`amp-subscriptions`](https://amp.dev/documentation/components/amp-subscriptions/) and [`amp-subscriptions-google`](https://amp.dev/documentation/components/amp-subscriptions-google/). It enables publishers to configure their Stories to feature paywalls and integrate into their backends via authorization URLs and other configurations.

The way to specify subscriptions configurations is the same for both a classic AMP page and a Web Story. See more details about configurations in [`amp-subscriptions` configuration](https://amp.dev/documentation/components/amp-subscriptions/#configuration).

The extension provides a simple UI and capabilities to surface a paywall bottomsheet, and manage blocking / unblocking locked content.

> **Important Note**: Please first read API docs for [`amp-subscriptions`](https://amp.dev/documentation/components/amp-subscriptions/) and (optionally) [`amp-subscriptions-google`](https://amp.dev/documentation/components/amp-subscriptions-google/) and ensure you are set up with those basic capabilities before integrating with this component.

# How it works

1. Publishers can configure a Web Story with the component to implement a paywall.
- Paywall cannot be triggered on the first two pages of a Story or on the last page or on a Story with fewer than 4 pages.
2. When the user navigates to the first paywalled page of the Story, <amp-story-subscriptions> will check if the user has access via <amp-subscriptions>. If yes, the user can consume the Story without any interruption.
3. If the access is not granted, a paywall bottomsheet is shown at the bottom of the page. The paywall only prevents users from accessing the remaining pages of the Story, the user can otherwise navigate as normal (tap to previous pages, or swipe to a different Story if available).
4. The paywall has a templated UX that allows for key messages to be customized by the publisher.
5. Depending on publisher configuration, the dialog can support three different ways to progress:
- Sign-in with publisher’s sign-in flow (i.e. publisher provided sign-in page).
- Subscribe directly via the publisher (i.e. via a publisher provided subscription page).
- If enabled by the publisher, subscribe via [Subscribe with Google](https://developers.google.com/news/subscribe).
6. If the user completes any of the above authentication flows, the user is returned to the Story page, the paywall is dismissed and the user can consume the rest of the Story.
7. If the user encounters a subsequent paywalled Story from this publisher, they will continue to retain access based on [amp-subscription mechanisms](https://amp.dev/documentation/components/amp-subscriptions/#combining-the-amp-reader-id-with-publisher-cookies).

# `amp-story` and `amp-story-subscriptions` attributes

```html
<amp-story publisher-logo-src='https://publisher-domain.com/logo.jpg'>
<amp-story-page>...</amp-story-page>
...
<amp-story-subscriptions subscriptions-page-index='3' price='$0.50/week' headline='Culture at your fingertips' description='Subscribe for unlimited access.' additional-description='Cancel anytime.'>
</amp-story-subscription>
</amp-story>
```

### `publisher-logo-src` {string} required
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we get it from the amp-story metadata? https://github.com/ampproject/amphtml/blob/main/extensions/amp-story/amp-story.md#publisher-logo-src-guidelines
Do publishers need to repeat it?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It is from amp-story's attribute. I was trying to express that this amp-story attribute is mandatory for this extension to work. But yes, this attribute is already mandatory. We don't need to repeatedly saying that here. Removed this entirely.


A URL to the story publisher's logo in square format (1x1 aspect ratio). This logo would be shown on the publisher's subscribe button. For example `publisher-logo-src="https://example.com/logo/1x1.png"`, where 1x1.png is a 96x96 px logo. See the guidelines at [`amp-story` dev document](https://amp.dev/documentation/components/amp-story/?format=stories#publisher-logo-src-guidelines).

### `subscriptions-page-index` {number} optional
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Plz sort by required first, then optional

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done.


The index of the `amp-story-page` that displays the subscriptions dialog. The `amp-story-page` index in `amp-story` starts from 0, e.g. the first `amp-story-page` has index of 0. If not specified, it defaults to 2, which is the 3rd `amp-story-page` of the story.

Note that this specified page cannot be the first two pages nor the last page of the story.

### `price` {string} required
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please give one or two examples (e.g. $10 or 10€) so people see how they can specify currencies

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done.

Btw I never noticed that it is 10€ instead of €10. nice to know : )


Subscription/offer price. This can be any arbitrary string that describe any offers like free trial, monthly, annually, etc. Note that it would be omitted with ellipsis at the end if too long, which is determined by the view width.

### `headline` {string} optional

A headline string that describes the subscription/offer. If not provided, the line would be removed, e.g. the dialog would get shorter since the content is one line less.

### `description` {string} required

One line of description for the subscription/offer.

### `additional-description` {string} optional

Additional line of description for the subscription/offer. If not provided, the line would be removed, e.g. the dialog would get shorter since the content is one line less.

# Validation

See validation rules in [amp-story-subscriptions validator](https://github.com/ampproject/amphtml/blob/main/extensions/amp-story-subscriptions/validator-amp-story-subscriptions.protoascii).