Как узнать дату истечения срока действия подписки на стороне клиента в Android?

Мы реализуем подписку с использованием покупки в приложении в Android. Мы получаем временную метку покупки, как в формате ниже.

'{
   "orderId":"GPA.1234-5678-9012-34567",
   "packageName":"com.example.app",
   "productId":"exampleSku",
   "purchaseTime":1345678900000,
   "purchaseState":0,
   "developerPayload":"bGoa+V7g/yqDXvKRqq+JTFn4uQZbPiQJo4pf9RzJ",
   "purchaseToken":"opaque-token-up-to-1000-characters"
 }'

Но нам нужно отобразить дату истечения срока действия в пользовательском интерфейсе приложения, и мы хотим получить точную дату истечения срока действия из игрового магазина. Мы предполагаем, что если мы вручную вычислим дату истечения срока действия, это может быть конфликтом с датой истечения срока действия магазина воспроизведения. Может кто-нибудь объяснить насчет "Как получить срок действия подписки в android?"


person ram    schedule 06.08.2016    source источник
comment
спросите дату истечения срока действия у вашей административной стороны, которую они вам дадут, опубликуйте эту информацию на своей стороне сервера, они будут истекать из Google inapp   -  person MurugananthamS    schedule 06.08.2016
comment
Возможный дубликат как получить дату истечения подписки в inapp v3 android   -  person MurugananthamS    schedule 06.08.2016
comment
Это не пользовательское приложение, мы хотим реализовать его так, как каждый пользователь может подтвердить свою подписку в игровом магазине. Мы хотим реализовать это на стороне клиента.   -  person ram    schedule 06.08.2016
comment
Мой вопрос заключается в том, как получить дату истечения срока действия на стороне клиента. Мы сталкиваемся с проблемами аутентификации, чтобы любой мог объяснить пошаговый процесс на стороне клиента. Можно в IOS   -  person ram    schedule 06.08.2016
comment
Привет, у тебя есть какое-нибудь решение?   -  person Manukumar    schedule 26.04.2018


Ответы (2)


Чтобы получить дату истечения срока подписки после подписки, необходимо выполнить следующие действия.

Шаг 1. Сначала получите mRefreshToken из следующего API-интерфейса Google Publisher API

Шаг 2: Затем необходимо получить access_tokon, используя параметры (mRefreshToken, client_id и client_secret) и ниже api.

final StringRequest mStringRequest = new StringRequest(Request.Method.POST, "https://accounts.google.com/o/oauth2/token",
    new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {
            [From response -get access_tokon]
        }
    }, new Response.ErrorListener() {
    @Override
    public void onErrorResponse(VolleyError error) {
        error.printStackTrace();
   }}) {
@Override
protected Map<String, String> getParams() {

    Map<String, String> params = new HashMap<>();
    params.put("grant_type", "refresh_token");
    params.put("client_id", "your_client_id");
    params.put("client_secret", "your_client_secret");
    params.put("refresh_token", mRefreshToken);

    return params;
}};

Шаг 3: у вас есть "accessToken" из приведенного выше API, после этого получите json с истечением срока действия, используя указанные ниже API и параметры.

String url = "https://www.googleapis.com/androidpublisher/v2/applications/ "+ AppController.getInstance (). getPackageName () +" / покупки / подписки / "+ mSubscriptionId +" / "+" токены / "+ mPurchaseToken;

 final StringRequest mStringRequest = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() {

        @Override
        public void onResponse(String response) {
            [From response -get expiry detail json]
        }
    }, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
    error.printStackTrace();
}}) {

@Override
public Map<String, String> getHeaders() throws AuthFailureError {

    Map<String, String> params = new HashMap<>();
    params.put("Authorization", "Bearer " + accessToken);
    return params;
}};

Для дополнительной информации: официальный URL-адрес документа от Google "https://developers.google.com/android-publisher/api-ref/purchases/subscriptions/get" и "https://developers.google.com/android-publisher/authorization"

person Sakthivel Appavu    schedule 19.06.2018
comment
Я бы не стал включать идентификатор / секрет клиента в приложение для Android, потому что им можно воспользоваться не по назначению. - person Hyndrix; 01.07.2018
comment
Как это возможно? - person Sakthivel Appavu; 03.07.2018
comment
Вы можете извлечь токен секреты + обновления из кода, а затем использовать его для доступа ко всем функциям REST с одинаковым уровнем авторизации. - person Hyndrix; 04.07.2018
comment
Храните свой ключ в надежном месте, например, в режиме шифрования и дешифрования. - person Sakthivel Appavu; 10.07.2018

Я пробовал использовать этот API "https://www.googleapis.com/androidpublisher/v2/applications/ "+ AppController.getInstance (). getPackageName () +" / покупки / подписки / "+ mSubscriptionId +" / "+" токены / "+ mPurchaseToken;

с правильными действительными данными, но я обнаружил эту ошибку:

**{
    "error": {
        "errors": [
            {
                "domain": "androidpublisher",
                "reason": "permissionDenied",
                "message": "The current user has insufficient permissions to perform the requested operation."
            }
        ],
        "code": 401,
        "message": "The current user has insufficient permissions to perform the requested operation."
    }
}**

Подскажите пожалуйста, есть ли какие-нибудь решения. Я выполняю все шаги и делаю все с игровой консолью и учетной записью облачной консоли Google.

person Parth Thakkar    schedule 06.02.2020
comment
Попробуйте использовать v3 в следующих API googleapis.com/androidpublisher/v2/applications . v1 и v2 устарели. - person Sakthivel Appavu; 16.07.2020