Penerbit terutama menggunakan integrasi sisi server untuk mengelola pembaca dan
yang sama. Pada dasarnya, penayang menggunakan UpdateReaderEntitlements
untuk memperbarui
Data Google tentang hak ID Produk untuk PPID.
Penyiapan Google Cloud
Mengonfigurasi Penautan Langganan di Google Cloud mencakup dua komponen utama:
- Mengaktifkan API untuk project tertentu
- Membuat akun layanan untuk mengakses api
Mengaktifkan Subscription Linking API
Untuk menggunakan akun layanan dan mengelola hak pembaca, Google Cloud
project harus mengaktifkan Subscription Linking API dan
akun layanan OAuth yang dikonfigurasi. Untuk mengaktifkan Subscription Linking API untuk
project, buka dari menu -> API & Layanan -> Perpustakaan dan telusuri
Subscription Linking
, atau kunjungi halaman secara langsung:
https://console.cloud.google.com/apis/library?project=gcp_project_id
Gambar 1. Membuka Library API, dan mengaktifkan API untuk API project Google Cloud.
Membuat Akun Layanan
Akun layanan digunakan untuk mengizinkan akses dari aplikasi Anda ke Subscription Linking API.
- Buat akun layanan dalam nama project Anda konsol.
- Buat kredensial untuk akun layanan, lalu simpan
file
credentials.json
di lokasi aman yang dapat diakses oleh aplikasi Anda. - Memberikan peran IAM "Admin Penautan Langganan" ke akun layanan yang telah dibuat. Untuk kontrol terperinci atas kemampuan Anda dapat menetapkan peran yang sesuai dari tabel berikut.
Kemampuan / Peran | Admin Penautan Langganan | Pengakses Penautan Langganan | Pengakses Hak Penautan Langganan |
---|---|---|---|
Dapatkan hak pembaca | |||
Dapatkan pembaca | |||
Perbarui hak pembaca | |||
Hapus pembaca |
Menggunakan akun layanan dengan Subscription Linking API
Menggunakan akun layanan untuk mengautentikasi panggilan ke Subscription Linking API,
dengan library klien googleapis atau dengan menandatangani permintaan
dengan REST API. Library klien secara otomatis menangani permintaan
access_token
yang sesuai, sedangkan REST API memerlukan pengambilan id_token
lalu menukarnya dengan access_token
.
Kedua klien berikut
contoh library dan REST API menggunakan endpoint getReader()
. Untuk video live
yang menunjukkan semua metode API, lihat
Demo Penautan Langganan, atau kodenya.
Contoh permintaan dengan library klien googleapis node.js
import {readerrevenuesubscriptionlinking_v1, Auth} from 'googleapis';
const subscriptionLinking = readerrevenuesubscriptionlinking_v1.Readerrevenuesubscriptionlinking;
class SubscriptionLinking {
constructor() {
this.auth = new Auth.GoogleAuth({
keyFile: process.env.KEY_FILE,
scopes: [
'https://www.googleapis.com/auth/readerrevenue.subscriptionlinking.manage'
],
})
}
init() {
return new subscriptionLinking(
{version: 'v1', auth: this.auth})
}
}
const api = new SubscriptionLinking();
const client = api.init();
async function getReader(ppid) {
const publicationId = process.env.PUBLICATION_ID;
return await client.publications.readers.get({
name: `publications/${publicationId}/readers/${ppid}`,
});
};
async function updateEntitlements(ppid) {
const publicationId = process.env.PUBLICATION_ID;
const requestBody = {
/*
Refer to
https://developers.google.com/news/subscribe/subscription-linking/appendix/glossary#entitlements_object
*/
entitlements : [{
product_id: `${publicationId}:basic`,
subscription_token: 'abc1234',
detail: 'This is our basic plan',
expire_time: '2025-10-21T03:05:08.200564Z'
}]
};
return await client.publications.readers.updateEntitlements({
name: `publications/${publicationId}/readers/${ppid}`,
requestBody
});
};
Menandatangani permintaan REST API secara manual
import fetch from 'node-fetch'
import jwt from 'jsonwebtoken'
function getSignedJwt() {
/*
Either store the credentials string in an environmental variable
Or implement logic to fetch it.
*/
const key_file = process.env.CREDENTIALS_STRING
const issueDate = new Date()
const expireMinutes = 60
const offsetInSeconds = issueDate.getTimezoneOffset() * 60000
const expireDate = new Date(issueDate.getTime() + (expireMinutes * 60000))
const iat = Math.floor((issueDate.getTime() + offsetInSeconds) / 1000)
const exp = Math.floor((expireDate.getTime() + offsetInSeconds) / 1000)
const token = {
iss: key_file.client_email,
iat,
exp,
aud: 'https://oauth2.googleapis.com/token',
scope:'https://www.googleapis.com/auth/readerrevenue.subscriptionlinking.manage',
}
return jwt.sign(token, key_file.private_key, {
algorithm: 'RS256',
keyid: key_file.private_key_id,
})
}
async function getAccessToken(signedJwt) {
let body = new URLSearchParams();
body.set('grant_type', 'urn:ietf:params:oauth:grant-type:jwt-bearer')
body.set('assertion', signedJwt)
const request = await fetch('https://oauth2.googleapis.com/token', {
method: 'POST',
headers: {'Content-Type': 'application/x-www-form-urlencoded'},
body
})
const accessResponse = await accessFetch.json()
return accessResponse.access_token
}
async function getReader(ppid) {
const publicationId = process.env.PUBLICATION_ID
const base_url = 'https://readerrevenuesubscriptionlinking.googleapis.com/v1'
const endpoint = `${base_url}/publications/${publicationId}/readers/${ppid}`
const signedJwt = await getSignedJwt()
const accessToken = await getAccessToken(signedJwt)
const reader = await fetch(endpoint, {
method: 'GET',
headers: {
Authorization: `Bearer ${accessToken}`,
},
}).then((response) => {
return response.json()
})
return reader
}