Play Integrity for PC আপনাকে চেক করতে সাহায্য করে যে গেমের ইভেন্ট এবং সার্ভারের অনুরোধগুলি আসল পিসি ডিভাইসে PC-এর জন্য Google Play Games-এর প্রকৃত উদাহরণ থেকে আসছে। সম্ভাব্য ঝুঁকিপূর্ণ ডিভাইস এবং অজানা এমুলেটর সনাক্ত করে, আপনার গেমের ব্যাকএন্ড সার্ভার প্রতারণা, অননুমোদিত অ্যাক্সেস, প্রতারণামূলক ট্র্যাফিক এবং অপব্যবহার রোধ করতে যথাযথ পদক্ষেপের সাথে প্রতিক্রিয়া জানাতে পারে।
প্রাক-প্রয়োজনীয়
- SDK সেটআপ সম্পূর্ণ করুন।
- Integrity API নিরাপত্তা বিবেচনা পর্যালোচনা করুন।
- Integrity API পরিষেবার শর্তাবলী এবং ডেটা পরিচালনার তথ্য পড়ুন এবং বুঝুন৷
- আপনার Google ক্লাউড কনসোলে , একটি ক্লাউড প্রজেক্ট তৈরি করুন বা একটি বিদ্যমান ক্লাউড প্রজেক্ট বেছে নিন যা আপনি PC-এর জন্য Play Integrity-এর সাথে ব্যবহার করতে চান। APIs এবং পরিষেবাগুলিতে নেভিগেট করুন এবং Google Play Integrity API সক্ষম করুন ৷
- আপনি যদি প্রতিদিন পিসি অনুরোধের জন্য 10K প্লে ইন্টিগ্রিটি করার আশা করেন, তাহলে আপনার প্রতিদিনের সর্বোচ্চ বৃদ্ধি করার অনুরোধ করা উচিত।
ধাপ 1: আপনি কিভাবে আপনার গেমে PC এর জন্য Play Integrity ব্যবহার করবেন তা নির্ধারণ করুন
পরিবেশ সম্পর্কে একটি অখণ্ডতার রায় পেতে আপনি কখন PC এর জন্য Play Integrity-কে কল করবেন তা স্থির করুন৷ উদাহরণস্বরূপ, আপনি একটি রায়ের অনুরোধ করতে পারেন যখন গেমটি খোলা হয়, যখন একজন খেলোয়াড় সাইন ইন করে বা যখন একজন খেলোয়াড় একটি মাল্টিপ্লেয়ার গেমে যোগ দেয়। তারপর সিদ্ধান্ত নিন কিভাবে আপনি বিভিন্ন সততা প্রতিক্রিয়া পরিচালনা করবেন। উদাহরণস্বরূপ, আপনি পারেন:
- কোনো প্রয়োগকারী পদক্ষেপ ছাড়াই প্রতিক্রিয়া সংগ্রহ করুন এবং এটি অপব্যবহারের একটি দরকারী সংকেত কিনা তা বোঝার জন্য অভ্যন্তরীণভাবে ডেটা বিশ্লেষণ করুন।
- প্রতিক্রিয়া সংগ্রহ করুন এবং আপনার ব্যাকএন্ড সার্ভারে যুক্তি প্রয়োগ করুন যেগুলি সততার রায় পাস করে এমন ডিভাইসগুলিকে আপনার গেমটি স্বাভাবিকভাবে খেলার অনুমতি দেয়, যখন সন্দেহজনক পরিবেশ থেকে আসা ট্র্যাফিকের অ্যাক্সেসকে চ্যালেঞ্জ করে বা অস্বীকার করে৷
- প্রতিক্রিয়া সংগ্রহ করুন এবং আপনার ব্যাকএন্ডে যুক্তি প্রয়োগ করুন যাতে একত্রে সন্দেহজনক পরিবেশ থেকে আসা ট্র্যাফিকের সাথে মিলিত হওয়ার সময় একত্রে অখণ্ডতা পরীক্ষা পাস করে এমন ডিভাইসে খেলোয়াড়দের সাথে মিলিত হয়।
ধাপ 2: আপনার গেমে অখণ্ডতা টোকেন অনুরোধ করুন
পিসির জন্য প্লে ইন্টিগ্রিটি ওয়ার্ম আপ করুন
PC-এর জন্য প্লে ইন্টিগ্রিটি প্রস্তুত করুন (বা "ওয়ার্ম আপ") করুন, যা Google Play-কে বুদ্ধিমত্তার সাথে ডিভাইসে আংশিক প্রত্যয়ন তথ্য ক্যাশে করার অনুমতি দেয় যাতে আপনি যখন অখণ্ডতার রায়ের জন্য অনুরোধ করেন তখন জটিল পথে লেটেন্সি কমাতে পারে। আপনার গেমটি খোলার সাথে সাথে আপনি এটি অ্যাসিঙ্ক্রোনাসভাবে করতে পারেন যাতে আপনার যখন প্রয়োজন হয় তখন আপনি অন-ডিমান্ড অখণ্ডতার অনুরোধ করতে পারেন।
void PrepareIntegrityToken( const PrepareIntegrityTokenParams & params, PrepareIntegrityTokenContinuation continuation )
সফল হলে, ধারাবাহিকতাকে একটি PrepareIntegrityTokenResultValue সহ একটি RequestTokenData সম্বলিত কল করা হবে যা একটি অখণ্ডতা টোকেন অনুরোধ করতে ব্যবহার করা উচিত৷ RequestIntegrityToken- এ কল করার জন্য এই ডেটাটি মেমরিতে ক্যাশ করা উচিত এবং অ্যাপ্লিকেশনের সেশনের সময়কালের জন্য পুনরায় ব্যবহার করা উচিত।
শুধুমাত্র যদি আপনার আবেদন নির্ধারণ করে যে অখণ্ডতার রায় সম্পূর্ণরূপে পুনঃমূল্যায়ন করা প্রয়োজন PrepareIntegrityToken- এ একটি কল করা উচিত।
বিস্তারিত | |
---|---|
পরামিতি | params : একটি Google ক্লাউড প্রকল্প নম্বর ধারণকারী পরামিতি।continuation : অখণ্ডতা টোকেন প্রদানকারীকে ফেরত দিতে async কলব্যাক। |
PrepareIntegrityToken অ্যাকশন কীভাবে কল করা উচিত তা দেখানো একটি কোড স্নিপেট নিম্নরূপ প্রদান করা হয়েছে:
google::play::integrity::IntegrityClient client_;
google::play::integrity::PrepareIntegrityTokenResult
IntegrityInterface::PrepareIntegrityToken(int64_t cloud_project_number) {
google::play::integrity::PrepareIntegrityTokenParams params;
params.cloud_project_number = cloud_project_number;
auto promise = std::make_shared<
std::promise<google::play::integrity::PrepareIntegrityTokenResult>>();
client_.PrepareIntegrityToken(
params,
[promise](
google::play::integrity::PrepareIntegrityTokenResult result) {
promise->set_value(std::move(result));
});
return promise->get_future().get();
}
আপনার সততা টোকেন অনুরোধ করুন
ইন্টিগ্রিটি টোকেন হল আপনার গেমের একটি মেকানিজম যা যাচাই করার জন্য ডিভাইসটি টেম্পার করা হয়নি। যখনই আপনার গেমটি একটি সার্ভারের অনুরোধ করে যা আপনি আসল কিনা তা পরীক্ষা করতে চান, আপনি একটি অখণ্ডতা টোকেনের অনুরোধ করতে পারেন এবং তারপর ডিক্রিপশন এবং যাচাইকরণের জন্য এটি আপনার গেমের ব্যাকএন্ড সার্ভারে পাঠাতে পারেন৷
আপনি যখন PC-এর জন্য Play Integrity API-এর মাধ্যমে আপনার অ্যাপে ব্যবহারকারীর অ্যাকশন পরীক্ষা করছেন, তখন আপনি টেম্পারিং আক্রমণের বিরুদ্ধে প্রশমিত করতে RequestIntegrityTokenParams::request_hash ফিল্ড ব্যবহার করতে পারেন। উদাহরণস্বরূপ, আপনি আপনার গেমের ব্যাকএন্ড সার্ভারে প্লেয়ারের স্কোর রিপোর্ট করতে চাইতে পারেন, এবং আপনার সার্ভার যাচাই করতে চায় যে এই স্কোরটি কোনো প্রক্সি সার্ভার দ্বারা টেম্পার করা হয়নি। PC এর জন্য Play Integrity সাইন ইন ইন্টিগ্রিটি রেসপন্সের ভিতরে এই ফিল্ডে আপনার সেট করা মান ফিরিয়ে দিতে পারে। রিকোয়েস্টহ্যাশ ছাড়া, ইন্টিগ্রিটি টোকেন শুধুমাত্র ডিভাইসের সাথে আবদ্ধ হবে, কিন্তু নির্দিষ্ট অনুরোধের সাথে নয়, যা আক্রমণের সম্ভাবনা খুলে দেয়।
void RequestIntegrityToken( const RequestIntegrityTokenParams & params, RequestIntegrityTokenContinuation continuation )
আক্রমণের সম্ভাবনা প্রশমিত করতে, যখন আপনি একটি সততা রায়ের জন্য অনুরোধ করেন:
- ব্যবহারকারীর অ্যাকশন বা সার্ভারের অনুরোধ যা ঘটছে তা থেকে সমস্ত প্রাসঙ্গিক অনুরোধের প্যারামিটারের একটি ডাইজেস্ট গণনা করুন (যেমন একটি স্থিতিশীল অনুরোধ ক্রমিককরণের SHA256)।
- RequestIntegrityTokenParams::request_hash ক্ষেত্রটি ডাইজেস্টে সেট করুন।
বিস্তারিত | |
---|---|
পরামিতি | params : প্রস্তুত RequestTokenData এবং ইন্টিগ্রিটি চেক রিকোয়েস্ট হ্যাশ ধারণকারী প্যারামিটার।continuation : ডেটা ফেরত দেওয়ার জন্য async কলব্যাক। |
কিভাবে RequestIntegrityToken অ্যাকশন কল করা যেতে পারে তা দেখানো একটি কোড স্নিপেট নিম্নরূপ প্রদান করা হয়েছে:
absl::StatusOr<google::play::integrity::RequestIntegrityTokenResult>
IntegrityInterface::RequestIntegrityToken(
const google::play::integrity::PrepareIntegrityTokenResult&
prepare_integrity_token_result,
const std::string& request_hash) {
// Check if the prepare_integrity_token_result is OK
if (!prepare_integrity_token_result.ok()) {
return absl::FailedPreconditionError(
absl::StrCat("PrepareIntegrityTokenResult is not OK. Error code: ",
prepare_integrity_token_result.error_code));
}
google::play::integrity::RequestIntegrityTokenParams params{
.request_token_data =
prepare_integrity_token_result.request_token_data,
.request_hash = request_hash};
auto promise = std::make_shared<std::promise<
google::play::integrity::RequestIntegrityTokenResult>>();
client_.RequestIntegrityToken(
params,
[promise](google::play::integrity::RequestIntegrityTokenResult result) {
promise->set_value(std::move(result));
});
return promise->get_future().get();
}
ধাপ 3: পরবর্তীতে আপনার গেমের ব্যাকএন্ড সার্ভারে অখণ্ডতা টোকেনগুলি ডিক্রিপ্ট করুন এবং যাচাই করুন
একটি অখণ্ডতা টোকেন ডিক্রিপ্ট করুন
আপনি একটি অখণ্ডতা রায়ের অনুরোধ করার পরে, Play Integrity API একটি এনক্রিপ্ট করা প্রতিক্রিয়া টোকেন প্রদান করে৷ ডিভাইসের অখণ্ডতার রায় পেতে, আপনাকে অবশ্যই Google এর সার্ভারে অখণ্ডতা টোকেন ডিক্রিপ্ট করতে হবে:
- আপনার অ্যাপের সাথে লিঙ্ক করা Google ক্লাউড প্রকল্পের মধ্যে একটি পরিষেবা অ্যাকাউন্ট তৈরি করুন ।
আপনার অ্যাপের সার্ভারে, প্লেইনটেগ্রিটি স্কোপ ব্যবহার করে আপনার পরিষেবা অ্যাকাউন্টের শংসাপত্রগুলি থেকে অ্যাক্সেস টোকেন আনুন এবং নিম্নলিখিত অনুরোধ করুন:
playintegrity.googleapis.com/v1/<var>PACKAGE_NAME</var>:decodePcIntegrityToken -d \ '{ "integrity_token": "<var>INTEGRITY_TOKEN</var>" }'
JSON প্রতিক্রিয়া পড়ুন।
ফলস্বরূপ পেলোড হল একটি প্লেইন-টেক্সট টোকেন যাতে অখণ্ডতার রায় এবং বিকাশকারী-প্রদত্ত তথ্যের পাশাপাশি বিবরণ থাকে। একটি ডিক্রিপ্ট করা অখণ্ডতা টোকেন নিম্নরূপ দেখায়:
{
"requestDetails": {
"requestPackageName": "com.your.package.name",
"requestTime": "2025-08-29T13:10:37.285Z",
"requestHash": "your_request_hash_string"
},
"deviceIntegrity": {
"deviceRecognitionVerdict": [
"MEETS_PC_INTEGRITY"
]
},
}
অখণ্ডতা টোকেন যাচাই করুন
ডিকোডেড ইন্টিগ্রিটি টোকেনের requestDetails
ফিল্ডে রিকোয়েস্ট সম্পর্কে তথ্য থাকে, requestHash
ডেভেলপার-প্রদত্ত তথ্য সহ।
requestHash
এবং packageName
ক্ষেত্রগুলি মূল অনুরোধের সাথে মেলে। তাই, JSON পেলোডের requestDetails
অংশ যাচাই করে নিশ্চিত করুন যে requestPackageName
এবং requestHash
মূল অনুরোধে যা পাঠানো হয়েছে তার সাথে মেলে, যেমনটি নিম্নলিখিত কোড স্নিপেটে দেখানো হয়েছে:
const auto& request_details = json_payload["requestDetails"];
if (request_details.value("requestPackageName", "") != <YOUR_PACKAGE_NAME>) {
// Don't trust the verdicts.
}
// Check for the existence of the request_hash.
// If you set a request hash in the request and it's not present, you shouldn't
// trust the verdicts.
if (!request_details.contains("requestHash")) {
// Don't trust the verdicts.
}
// The requestHash from request_details needs to match the request hash your
// app provided.
if (request_details.value("requestHash", "") != <PROVIDED_REQUEST_HASH>) {
// Don't trust the verdicts.
}
// You can read the rest of payload's fields.
ধাপ 4: সততার রায়ের উপর ভিত্তি করে কি পদক্ষেপ নিতে হবে তা নির্ধারণ করুন
deviceIntegrity
ক্ষেত্রে একটি একক মান থাকতে পারে, deviceRecognitionVerdict
। প্লে ইন্টিগ্রিটি চেক (যা একটি MEETS_PC_INTEGRITY
প্রতিক্রিয়া) পাস করে এমন পিসিতে আপনার গেম চলছে কিনা তা নির্ধারণ করতে আপনি এই মানটি ব্যবহার করতে পারেন। আপনার গেমের ব্যাকএন্ড সার্ভার এই তথ্য সংগ্রহ করতে পারে এবং আপনার গেমটি কী পদক্ষেপ নেওয়া উচিত তা নির্ধারণ করতে এটি ব্যবহার করতে পারে, যেমন একটি গেম ইভেন্টকে এগিয়ে যাওয়ার অনুমতি দেওয়া বা ঝুঁকিপূর্ণ ট্র্যাফিকের অ্যাক্সেস অস্বীকার করা।
"deviceIntegrity": {
"deviceRecognitionVerdict": ["MEETS_PC_INTEGRITY"]
}
deviceRecognitionVerdict
নিম্নলিখিত মান থাকতে পারে:
-
MEETS_PC_INTEGRITY
- গেমটি একটি সত্যিকারের পিসি পরিবেশে চলছে, যেখানে কোনও অন-ডিভাইস টেম্পারিং ধরা পড়েনি।
- খালি (একটি ফাঁকা মান)
- গেমটি এমন একটি ডিভাইসে চলছে যেখানে আক্রমণের চিহ্ন রয়েছে (যেমন API হুকিং) বা সিস্টেম আপস করা হয়েছে (যেমন ডিভাইসটি একটি ট্যাম্পার করা Google ডেস্কটপ পরিষেবা সংস্করণ চালাচ্ছে), বা অ্যাপটি কোনও শারীরিক ডিভাইসে চলছে না (যেমন একটি এমুলেটর যা Google Play অখণ্ডতা পরীক্ষা পাস করে না)।
ধাপ 5: ত্রুটি কোডগুলি পরিচালনা করুন
যদি আপনার গেমটি PC অনুরোধের জন্য একটি Play Integrity করে এবং কলটি ব্যর্থ হয়, তাহলে আপনার গেম একটি ত্রুটি কোড পায়৷ এই ত্রুটিগুলি বিভিন্ন কারণে ঘটতে পারে, যেমন একটি দুর্বল নেটওয়ার্ক সংযোগের মতো পরিবেশগত সমস্যা, আপনার API ইন্টিগ্রেশনের সমস্যা, বা ক্ষতিকারক কার্যকলাপ এবং সক্রিয় আক্রমণ৷
পুনরায় চেষ্টাযোগ্য ত্রুটি কোড
এই ত্রুটিগুলির কারণ কখনও কখনও ক্ষণস্থায়ী অবস্থার কারণে হয়, এবং এইভাবে আপনার একটি সূচকীয় ব্যাক-অফ কৌশল সহ কলটি পুনরায় চেষ্টা করা উচিত।
সততা ত্রুটি | ত্রুটি বিবরণ | ত্রুটি কোড |
---|---|---|
kNetworkError | ডিভাইসে নেটওয়ার্ক সংযোগ সমস্যা। | 5 |
kTooManyRequests | ডিভাইস থেকে অনেক অনুরোধ করা হয়েছে. | 6 |
kClientTransientError | ক্লায়েন্টের সাথে একটি ক্ষণস্থায়ী সমস্যা। | 7 |
পুনরায় চেষ্টা করার কৌশল সম্পর্কে আরও সুপারিশের জন্য এখানে দেখুন।
অ-পুনরায় চেষ্টাযোগ্য ত্রুটি কোড
স্বয়ংক্রিয় পুনঃপ্রচার এই ক্ষেত্রে সাহায্য করার সম্ভাবনা কম। যাইহোক, একটি ম্যানুয়াল পুনঃপ্রচেষ্টা সাহায্য করতে পারে যদি ব্যবহারকারী সেই অবস্থার সমাধান করে যা সমস্যার সৃষ্টি করে।
সততা ত্রুটি | ত্রুটি বিবরণ | ত্রুটি কোড | প্রস্তাবিত কর্ম |
---|---|---|---|
kError | SDK অ্যাকশন চলাকালীন মারাত্মক ত্রুটি৷ | 1 | পুনরায় চেষ্টা করার আগে আপনার API বাস্তবায়ন যাচাই করুন। |
kCloudProjectNumberIsInvalid | ক্লাউড প্রকল্প নম্বরটি অবৈধ৷ | 2 | আপনার ক্লাউড প্রজেক্ট নম্বরটি Google ক্লাউড কনসোলে সঠিকভাবে কনফিগার করা হয়েছে এবং সঠিক ক্লাউড প্রজেক্ট নম্বর দিয়ে অনুরোধ করা হয়েছে তা যাচাই করুন। |
kRequestHashTooLong | অনুরোধ হ্যাশ খুব দীর্ঘ. | 3 | উত্পন্ন অনুরোধ হ্যাশ খুব দীর্ঘ. নিশ্চিত করুন যে সেগুলি 500 অক্ষরের কম। |
kNoValidPreparedTokenFound | টোকেন অনুরোধ করার আগে কোন প্রস্তুত টোকেন নেই। | 4 | [RequestIntegrityToken][request-integrity-token] কল করার আগে [PrepareIntegrityToken][prepare-token] অ্যাকশনে কল করুন। |
kSdkRuntimeUpdateRequired | প্লে ফর নেটিভ SDK-এর জন্য একটি আপডেট প্রয়োজন৷ | 8 | ডিভাইসে থাকা Google Play পরিষেবার ক্লায়েন্ট আপ টু ডেট এবং আপনি প্লে ফর নেটিভ PC SDK-এর সর্বশেষ সংস্করণ ব্যবহার করছেন কিনা তা নিশ্চিত করুন৷ |