я так понимаю, что если ошибки конкретной нет, 25, то С 24 ПО 27 она попадает, и ошибка приравнивается к 24ой ( https://vk.com/dev/need_confirmation ) возможно всплывает окно подтверждения, которое надо одобрить.том-то и дело, что в апи нет информации по поводу этой ошибки
Как формируется параметр "receipt"? Кто-нибудь разобрался? При отправке токена на refresh https://api.vk.com/method/auth.refreshTokenРешение найдено - если возникает указанная выше ошибка, то необходимо каждый раз обновлять токен.
Нашли ли Вы как формируется параметр reciept?Как формируется параметр "receipt"? Кто-нибудь разобрался? При отправке токена на refresh https://api.vk.com/method/auth.refreshToken
У кого-нибудь без него работает? Привязывается ли он к device id? к сожалению нет возможности заглянуть глубже, то есть в код приложения.
Не могли бы вы посмотреть и может что-то посоветовать?Возникает ошибка ("Token confirmation required") с кодом 25 при работе с аудио через api. У кого-нибудь встречалось? Пробовал обновить токен, но всё равно появляется.
как его обновлять, если в документации нет метода для этого?Решение найдено - если возникает указанная выше ошибка, то необходимо каждый раз обновлять токен.
судя по последней Kate, классу com.perm.kate.AudioFragment, просто вызывается метод auth.refreshToken с параметром receipt=токен экземпляра (https://api.vk.com/method/auth.refreshToken?access_token=...&v=...&receipt=токен экземпляра), где токен_экземпляра вычисляется с помощью InstanceID.Решение найдено - если возникает указанная выше ошибка, то необходимо каждый раз обновлять токен.
str = InstanceID.getInstance(this.context).getToken("54740537194", "id" + this.account.mid, null);
private boolean validateToken(WeakReference<Activity> activity) {
try {
String iid_token = KApplication.session.getInstanceIdToken(activity, true);
...
String new_access_token = KApplication.session.api.refreshToken(iid_token);
if (TextUtils.isEmpty(new_access_token)) {
Log.i("Kate.AudioFragment", "Empty new token");
return false;
} else if (new_access_token.equals(KApplication.session.api.access_token)) {
Log.i("Kate.AudioFragment", "Equals token");
return true;
} else {
KApplication.session.setAccessToken(new_access_token);
KApplication.accountManager.saveAccounts();
return true;
}
}
...
}
public String getInstanceIdToken(WeakReference<Activity> activity, boolean verbose) {
String str = null;
if (VERSION.SDK_INT >= 9) {
try {
GoogleApiAvailability googleAPI = GoogleApiAvailability.getInstance();
int result = googleAPI.isGooglePlayServicesAvailable(KApplication.current);
if (result != 0) {
...
} else {
str = InstanceID.getInstance(this.context).getToken("54740537194", "id" + this.account.mid, null);
}
}
...
}
return str;
}
...
public String Api::refreshToken(String push_token) throws IOException, JSONException, KException {
Params params = new Params("auth.refreshToken");
params.put("receipt", push_token);
return sendRequest(params).optJSONObject("response").optString("token");
}
а чем заполнять такие поля как <GCM certificate>, <some extra information in packet>, <app version>, <sig-h>, <app id> (или это строка com.vkontakte.android?), <app version name>, <device id>, <certificate>, <app version> (это типа 4.10.2?)?Нашёл решение.
https://vk.com/doc150820042_448617633?hash=a81f57b29b26bf88d7&dl=5fe5d3bb2a03ad02de
Скрипт на питоне 3 для метода refreshToken
Все необходимые данные возьмите из просниффанного трафика (домен clients.android.google.com)
Можете подсказать насчет остальных полей?Нашёл решение.
https://vk.com/doc150820042_448617633?hash=a81f57b29b26bf88d7&dl=5fe5d3bb2a03ad02de
Скрипт на питоне 3 для метода refreshToken
Все необходимые данные возьмите из просниффанного трафика (домен clients.android.google.com)