Я пытаюсь внедрить PlayIntegrity API
в свое приложение для Android, но не знаю, как расшифровать и проверить токен с помощью серверов Google.
Я следил за документация до этого момента:
И теперь я застрял на отправке запроса на декодирование googleapis
. Я не понимаю, как работает эта инструкция.
Я создаю учетную запись службы, загружаю файл учетных данных json
и помещаю его в свой проект laravel, затем я попробовал этот фрагмент кода:
$client = new Client();
$client->setAuthConfig(storage_path('app/integrity_check_account.json'));
$client->addScope(PlayIntegrity::class);
$httpClient = $client->authorize();
$result = $httpClient->request('POST', 'https://playintegrity.googleapis.com/v1/my.package.name', [
'headers' => ['Content-Type' => 'application/json'],
'body' => "{ 'integrity_token': 'token' }"
]);
dd($result);
Итак, у меня две проблемы с этим кодом:
Заранее спасибо.
Наконец-то я нашел решение своей проблемы, просматривая источник PlayIntegrity API
из Клиентская библиотека API Google для PHP.
После импорта необходимых зависимостей:
composer require google/apiclient:^2.12.1
Это мой контроллер:
<?php
namespace App\Http\Controllers;
use Google\Client;
use Google\Service\PlayIntegrity;
use Google\Service\PlayIntegrity\DecodeIntegrityTokenRequest;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller as BaseController;
class Controller extends BaseController {
use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
public function performCheck(Request $request) {
$client = new Client();
$client->setAuthConfig(path/to/your/credentials/json/file.json);
$client->addScope(PlayIntegrity::PLAYINTEGRITY);
$service = new PlayIntegrity($client);
$tokenRequest = new DecodeIntegrityTokenRequest();
$tokenRequest->setIntegrityToken("TOKEN_HERE");
$result = $service->v1->decodeIntegrityToken('PACKGE_NAME_HERE', $tokenRequest);
//check result logic here
}
}
Да, у меня это работает нормально. INVALID_ARGUMENT может возникнуть, если вы забудете указать свой токен или имя пакета. Это также произойдет, если ваш токен плохо отформатирован. Также одноразовый номер должен быть закодирован в base64 с NO_PADDING, NO_WRAPPING и URL_SAFE.
Спасибо за этот пост, я нашел его очень полезным.
Несмотря на это, у меня все еще были некоторые проблемы с расшифровкой вердикта. Вот две проблемы, с которыми я столкнулся, и я не был уверен, была ли проблема связана с тем, как я вызывал Play Integrity API на устройстве, или с тем, как я расшифровывал токен ответа.
Если при декодировании токена вердикта вы получите исключение с кодом ошибки 400/Запрос содержит недопустимый аргумент, вам, вероятно, потребуется установить номер облачного проекта с помощью IntegrityTokenRequest_setCloudProjectNumber()
(C++).
Если вы получили исключение при декодировании токена с кодом ошибки 403/У вызывающего абонента нет разрешения, еще раз проверьте, правильно ли вы указали номер проекта Google Cloud.
вам удалось заставить это работать? Я борюсь с запросом decodeIntegrityToken - не та же ошибка, которую вы получили, а 400 BAD REQUEST со статусом INVALID_ARGUMENT. Вы сталкивались с этим во время отладки? Мое тело содержит «integrity_token» со значением, которое я получил от потока на стороне клиента. Спасибо