получаю токен юзера и сразу пытаюсь получить
VKRequest audios = VKApi.audio().getPopular();
И получаю error 15 :( Читал, что сторонние разработчики не могут работать с аудио но как же тогда работает это
Что я не так делаю? И вообще почему для получения популярных аудиозаписей нужен токен? Мне их надо получать даже если пользователь не залогинился.
Ответ
PROFIT!
Я это сделал! Декомпилировал одно приложение и узнал какой сейчас используется хак.
main.xml
MainActivity.java
public class MainActivity extends Activity
{
public class VkontakteWebViewClient extends WebViewClient
{
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon)
{
super.onPageStarted(view, url, favicon);
MainActivity.this.parseUrl(url);
}
}
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
WebView kateWV = (WebView)findViewById(R.id.kateWebView);
kateWV.getSettings().setJavaScriptEnabled(true);
kateWV.clearCache(true);
kateWV.setWebViewClient(new VkontakteWebViewClient());
CookieSyncManager.createInstance(this);
CookieManager.getInstance().removeAllCookie();
kateWV.loadUrl(Auth.getUrl("2685278", Auth.getSettings()));
}
public void parseUrl(String url){
if (url != null) {
try {
if (url.startsWith(Auth.redirect_url)) {
if (!url.contains("error=")) {
String[] auth = Auth.parseRedirectUrl(url);
saveTokenToSharedPreferences(getApplicationContext(), Auth.VK_SDK_ACCESS, "scope=groups,audio,offline&https_required=1&expires_in=0&access_token=" + auth[0] + "&user_id=" + Long.parseLong(auth[1]));
}
startActivity(new Intent(MainActivity.this, AudioActivity.class));
finish();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
public void saveTokenToSharedPreferences(Context ctx, String tokenKey, String code) {
SharedPreferences.Editor edit = PreferenceManager.getDefaultSharedPreferences(ctx).edit();
edit.putString(tokenKey, code);
edit.apply();
}
}
Auth.java
public class Auth
{
public static final String VK_SDK_ACCESS = "VK_SDK_ACCESS_TOKEN_PLEASE_DONT_TOUCH";
public static String redirect_url;
static {
redirect_url = "https://oauth.vk.com/blank.html";
}
public static String getUrl(String api_id, String settings) {
return "https://oauth.vk.com/authorize?client_id=" + api_id + "&display=mobile&scope=" + settings + "&redirect_uri=" + URLEncoder.encode(redirect_url) + "&response_type=token" + "&v=" + "5.53";
}
public static String getSettings() {
return "notify,friends,photos,audio,video,docs,status,notes,pages,wall,groups,messages,offline,notifications";
}
public static String[] parseRedirectUrl(String url) throws Exception {
String access_token = Utils.extractPattern(url, "access_token=(.*?)&");
String user_id = Utils.extractPattern(url, "user_id=(\\d*)");
if (user_id == null || user_id.length() == 0 || access_token == null || access_token.length() == 0) {
throw new Exception("Failed to parse redirect url " + url);
}
return new String[]{access_token, user_id};
}
}
В итоге после авторизации через WebView в preferences будет сохранен токен
Далее можно работать с API VK. Лично у меня происходит переход в AudioActivity
Примерный код
VKRequest request = VkApi.audio().getPopular();
request.executeWithListener(new VKRequest.VKRequestListener() {
@Override
public void onComplete(VKResponse response)
{
//выводим json с музыкой в логи
Log.d("vkmusic", response.responseString);
}
@Override
public void onError(VKError error){
Log.d("err", error.toString());
}
});
request.start();
Ну и все, можно юзать.
Результат
Комментариев нет:
Отправить комментарий