Yayıncılar, öncelikli olarak okuyucuları ve
haklar. Esas olarak, yayıncılar güncelleme yapmak için UpdateReaderEntitlements
kullanıyor.
Google'ın PPID için Ürün Kimliği'nden yararlanma hakkı kaydı.
Google Cloud kurulumu
Google Cloud'da abonelik bağlamayı yapılandırmanın iki temel bileşeni vardır:
- Belirli bir proje için API'yi etkinleştirme
- API'ye erişmek için hizmet hesabı oluşturma
Subscription linking API'yi etkinleştirme
Hizmet hesabı kullanmak ve okuyucunun yararlanma haklarını yönetmek için Google Cloud
projesinde hem Subscription linking API'nin etkinleştirilmiş olması hem de
OAuth hizmet hesabını yapılandırdınız. Subscription Connectivity API'yi bir
, menüden gidin -> API'ler ve Hizmetler -> Kitaplık ve arama
Subscription Linking
veya sayfayı doğrudan ziyaret edin:
https://console.cloud.google.com/apis/library?project=gcp_project_id
Şekil 1. API Kitaplığı'nda gezinme ve Google Cloud projesi.
Hizmet Hesabı oluşturma
Hizmet hesapları, uygulamanızdan Subscription Connectivity API.
- Bir hizmet hesabı oluşturun konsolu.
- Hizmet hesabı için kimlik bilgileri oluşturun ve
credentials.json
dosyasını uygulamanızın erişebileceği güvenli bir konumda tutun. - "Abonelik Bağlama Yöneticisi" IAM rolünü verin değerini öğrenebilirsiniz. Gemini'ın işlevleri üzerinde ayrıntılı denetim hizmet hesabı için aşağıdaki tablodan uygun rolü atayabilirsiniz.
Kapasite / Rol | Abonelik Bağlama Yöneticisi | Abonelik Bağlama Görüntüleyicisi | Abonelik Bağlama Yararlanma Hakları Görüntüleyici |
---|---|---|---|
Okuyucudan yararlanma hakları al | |||
Okuyucu kazanın | |||
Okuyucu yararlanma haklarını güncelleyin | |||
Okuyucuları sil |
Subscription linking API ile hizmet hesaplarını kullanma
Subscription Connectivity API'ye yapılan çağrıların kimliğini doğrulamak için hizmet hesaplarını kullanın,
googleapis istemci kitaplığıyla veya imzalama isteği göndererek
ile başlayın. İstemci kitaplıkları,
REST API bir id_token
almayı gerektirirken uygun access_token
ve sonra bunu bir access_token
ile değiştiriyoruz.
Aşağıdaki istemci
kitaplığı ve REST API örnekleri, getReader()
uç noktasını kullanır. Canlı yayın için
görmek için bkz.
Abonelik Bağlama Demosu sitesine veya bu sitenin koduna bakın.
Node.js googleapis istemci kitaplığını içeren örnek istek
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}/entitlements`,
requestBody
});
};
REST API isteklerini manuel olarak imzalama
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
}