पब्लिशर, सर्वर-साइड इंटिग्रेशन का इस्तेमाल मुख्य रूप से उन पाठकों और उनके लेखों को मैनेज करने के लिए करते हैं
एनटाइटलमेंट. मुख्य तौर पर, पब्लिशर UpdateReaderEntitlements
का इस्तेमाल करके
किसी पीपीआईडी के लिए, प्रॉडक्ट आईडी के एनटाइटलमेंट से जुड़ा Google का रिकॉर्ड.
Google Cloud का सेटअप
Google Cloud में Subscription Linking API कॉन्फ़िगर करने की प्रक्रिया में दो अहम चरण शामिल हैं:
- दिए गए प्रोजेक्ट के लिए एपीआई चालू करना
- एपीआई ऐक्सेस करने के लिए, सेवा खाता बनाना
Subscription Linking API चालू करना
सेवा खाते का इस्तेमाल करने और लोगों के एनटाइटलमेंट मैनेज करने के लिए, Google Cloud
प्रोजेक्ट में Subscription Linking API चालू होना चाहिए और सही तरीके से
कॉन्फ़िगर किया गया OAuth सेवा खाता. किसी
प्रोजेक्ट के लिए, मेन्यू से नेविगेट करें -> API और सेवाएं -> लाइब्रेरी और इसके लिए खोजें
Subscription Linking
या सीधे इस पेज पर जाएं:
https://console.cloud.google.com/apis/library?project=gcp_project_id
पहला डायग्राम. एपीआई लाइब्रेरी पर जाना और Google के लिए एपीआई चालू करना Cloud प्रोजेक्ट शामिल है.
सेवा खाता बनाना
सेवा खातों का इस्तेमाल आपके ऐप्लिकेशन से Subscription Linking API.
- अपने प्रोजेक्ट के अंदर सेवा खाता बनाएं कंसोल.
- सेवा खाते के लिए क्रेडेंशियल बनाएं और स्टोर
credentials.json
फ़ाइल को किसी सुरक्षित स्थान पर रखें, जहां से आपका ऐप्लिकेशन इसे ऐक्सेस कर सके. - "सदस्यता लिंक करने वाले एडमिन" को आईएएम की भूमिका दें तक आपके बनाए गए सेवा खाते पर टैप करें. एडमिन की क्षमताओं पर बारीकी से कंट्रोल करने के लिए, सेवा खाते के तौर पर सेट अप किया है, तो नीचे दी गई टेबल से सही भूमिका असाइन की जा सकती है.
क्षमता / भूमिका | सदस्यता लिंक करने का एडमिन | सदस्यता लिंक करने वाला व्यूअर | सदस्यता लिंक करने के एनटाइटलमेंट व्यूअर |
---|---|---|---|
पढ़ने वाले लोगों के एनटाइटलमेंट पाना | |||
पाठक पाएं | |||
लोगों के एनटाइटलमेंट अपडेट करना | |||
पढ़ने वाले लोगों को मिटाएं |
Subscription Linking API के साथ सेवा खाते इस्तेमाल करना
Subscription Linking API की पुष्टि का अनुरोध करने के लिए, सेवा खातों का इस्तेमाल करना
googleapis क्लाइंट लाइब्रेरी से या अनुरोधों पर हस्ताक्षर करके
REST API के साथ काम करता है. क्लाइंट लाइब्रेरी
सही access_token
है, जबकि REST API को id_token
की ज़रूरत होती है
और फिर इसे access_token
के लिए एक्सचेंज करें.
नीचे दिए गए दोनों क्लाइंट
लाइब्रेरी और REST API के उदाहरणों में, getReader()
एंडपॉइंट का इस्तेमाल किया जाता है. लाइव स्ट्रीम के लिए
एपीआई के सभी तरीकों की जानकारी के साथ,
Subscription Linking Demo साइट या इसका कोड.
node.js googleapis क्लाइंट लाइब्रेरी वाले अनुरोध का नमूना
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
});
};
REST API के अनुरोधों पर, मैन्युअल तरीके से साइन करना
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
}