Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.58/40: Рейтинг темы: голосов - 40, средняя оценка - 4.58
63 / 63 / 8
Регистрация: 17.05.2013
Сообщений: 286

Яндекс.Диск API

18.02.2014, 13:48. Показов 8694. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Работал кто-нибудь с этим API? Запускаю дефолтный пример яндекса, и при авторизации через браузер показывает вот это:

Никто не сталкивался с такой проблемой?
Миниатюры
Яндекс.Диск API  
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.02.2014, 13:48
Ответы с готовыми решениями:

Яндекс диск api.Adroid studio
Здравствуйте дорогие форумчане, нужна ваша скромная помощь. Помогите разобраться с тем как правильно отсылать запросы к данному api, вы к...

Реализация Яндекс SpeechKit Cloud API
Добрый день! Пытаюсь встроить в своё приложение распознование речи от яндекса. У меня получилось прикрутить к нему SpeechKit SDK, но как...

Android SDK Manager не отображает платформы 2.3.3 (API 10), 2.3.1 (API 9). Как быть?
Добрый день! Использую Android Studio под Windows 7. Из-за несовместимости с операционной системой Android SDK Manager не отображает...

8
Командир зеленых роботов
 Аватар для angryrobot
349 / 286 / 54
Регистрация: 08.10.2013
Сообщений: 576
18.02.2014, 13:57
Цитата Сообщение от KillAndEat Посмотреть сообщение
Никто не сталкивался с такой проблемой?
Скорее всего забыли прописать в манифесте интент-фильтр для вашей активити.
Или прописали но не такой какой надо (не совпадает с вашим Callback URI который вы указывали при регистрации нового приложения в яндксе).
0
63 / 63 / 8
Регистрация: 17.05.2013
Сообщений: 286
18.02.2014, 15:17  [ТС]
Цитата Сообщение от angryrobot Посмотреть сообщение
Скорее всего забыли прописать в манифесте интент-фильтр для вашей активити.
Или прописали но не такой какой надо (не совпадает с вашим Callback URI который вы указывали при регистрации нового приложения в яндксе).
Это же пример Яндекса, все должно совпадать) Дело в том, что раньше регистрация проходила, а сейчас перестал. Хотя аккаунт я с телефона удалил.
0
Командир зеленых роботов
 Аватар для angryrobot
349 / 286 / 54
Регистрация: 08.10.2013
Сообщений: 576
18.02.2014, 15:53
Цитата Сообщение от KillAndEat Посмотреть сообщение
Это же пример Яндекса, все должно совпадать
Покажите манифест приложения, и скажите какой вы указали Callback URI.
0
63 / 63 / 8
Регистрация: 17.05.2013
Сообщений: 286
18.02.2014, 16:21  [ТС]
Манифест

Кликните здесь для просмотра всего текста
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="com.yandex.disk.sdk.example"
          android:versionCode="1"
          android:versionName="1.0">
 
    <uses-sdk android:minSdkVersion="11"
              android:targetSdkVersion="17"/>
 
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.GET_ACCOUNTS"/>
    <uses-permission android:name="android.permission.USE_CREDENTIALS"/>
 
    <application android:label="@string/app_name"
                 android:icon="@drawable/ic_launcher"
                 android:name=".Application"
                 android:hardwareAccelerated="true">
 
        <activity android:name=".ExampleActivity"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.BROWSABLE" />
                <category android:name="android.intent.category.DEFAULT" />
                <data android:scheme="yandexdisk" />
            </intent-filter>
        </activity>
 
    </application>
 
</manifest>


Callback URI не могу посмотреть так как акrаунт за яндексом зарегистрирован, но предполагаю что он http://localhost
0
Командир зеленых роботов
 Аватар для angryrobot
349 / 286 / 54
Регистрация: 08.10.2013
Сообщений: 576
18.02.2014, 23:13
Лучший ответ Сообщение было отмечено KillAndEat как решение

Решение

Цитата Сообщение от KillAndEat Посмотреть сообщение
Callback URI не могу посмотреть так как акrаунт за яндексом зарегистрирован, но предполагаю что он http://localhost
Судя по вашему манифесту, он должен быть yandexdisk://чтоугодно в противном случае ничего работать не будет. Есть два пути решения вашей проблемы:

1) Регистрируйте свой аккаунт и сделайте в нем нормальный Callback URI. Нормальный это например такой:
имяВашегоПриложения://чтоугодно/
Затем в манифесте меняете строчку
XML
1
<data android:scheme="yandexdisk" />
на
XML
1
<data android:scheme="имяВашегоПриложения" />
И всё начинает работать.


2) Этот вариант нужно использовать если аккаунт не ваш, и изменить Callback URI вы не можете. Чтоб всё заработало нужно заменить строчку
XML
1
<data android:scheme="yandexdisk" />
на строчку
XML
1
<data android:host="localhost" android:scheme="http" />
Но после установки вашего приложения, ссылка http://localhost будет открываться либо в браузере либо в вашем приложении. Это может заставить пользователей изрыгать проклятия в ваш адрес Поэтому этот вариант плохой, но для отладки пойдет.
1
63 / 63 / 8
Регистрация: 17.05.2013
Сообщений: 286
19.02.2014, 12:16  [ТС]
Спасибо! Вы очень помогли!

Дабы не создавать новую тему про API облачных хранилищ задам вопрос в этом топике.

Разбирался с Dropbox Datastore API и столкнулся со следующей проблемой.

При попытке получить экземпляр DbxAccountManager

Java
1
DbxAccountManager mDbxAcctMgr = DbxAccountManager.getInstance(getApplicationContext(), appKey, appSecret);
вылетает следующее исключение:

Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Thread [<1> main] (Suspended (exception ExceptionInInitializerError))   
    <VM does not provide monitor information>   
    DbxAccountManager.getInstance(Context, DbxConfig, CoreConfig$Hosts, CoreAccountManager$AccountStorageProvider) line: 158    
    DbxAccountManager.getInstance(Context, String, String) line: 116    
    MainActivity.onCreate(Bundle) line: 19  
    MainActivity(Activity).performCreate(Bundle) line: 5008 
    Instrumentation.callActivityOnCreate(Activity, Bundle) line: 1079   
    ActivityThread.performLaunchActivity(ActivityThread$ActivityClientRecord, Intent) line: 2041    
    ActivityThread.handleLaunchActivity(ActivityThread$ActivityClientRecord, Intent) line: 2102 
    ActivityThread.access$600(ActivityThread, ActivityThread$ActivityClientRecord, Intent) line: 133    
    ActivityThread$H.handleMessage(Message) line: 1208  
    ActivityThread$H(Handler).dispatchMessage(Message) line: 99 
    Looper.loop() line: 137 
    ActivityThread.main(String[]) line: 4765    
    Method.invokeNative(Object, Object[], Class, Class[], Class, int, boolean) line: not available [native method]  
    Method.invoke(Object, Object...) line: 511  
    ZygoteInit$MethodAndArgsCaller.run() line: 791  
    ZygoteInit.main(String[]) line: 558 
    NativeStart.main(String[]) line: not available [native method]


Причем это происходит и в примерах Dropbox и в моих поделках)
0
 Аватар для arvalon
22 / 7 / 2
Регистрация: 26.10.2012
Сообщений: 212
Записей в блоге: 1
12.04.2018, 15:49
Подниму старую тему, столкнулся с аналогичной проблемой. Не могу воспроизвести всю схему с получением токена в приложение Android для работы с Yandex Disk'ом по REST API.
Итак обо всё по порядку:
За пример взял официальный пример yandex-disk-restapi-java. Прочитал документацию по Yandex OAuth.
Зарегистрировал своё приложение "testapp", получил его:AndroidManifest.xml:
Кликните здесь для просмотра всего текста
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="ru.arvalon.***">
 
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.GET_ACCOUNTS" />
    <uses-permission android:name="android.permission.USE_CREDENTIALS" />
 
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
 
        <activity android:name=".MainActivity" android:label="@string/app_name">
 
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
 
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.BROWSABLE" />
                <category android:name="android.intent.category.DEFAULT" />
                <data android:scheme="yx687d4a6bb5674102a321d11ac1422adb" />
            </intent-filter>
 
        </activity>
 
    </application>
 
</manifest>

MainActivity.java
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
public class MainActivity extends AppCompatActivity {
 
    public static final String CLIENT_ID = "%ID%";
 
    public static final String AUTH_URL =
            "https://oauth.yandex.ru/authorize?response_type=token&client_id="+CLIENT_ID;
 
    static final String USERNAME = "username";
    static final String TOKEN = "token";
 
    private static final String AUTHDIALOGTAG = "auth";
 
    private static final String TAG = "logtag";
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        Log.d(TAG,"onCreate");
 
        if (getIntent() != null && getIntent().getData() != null){
            onLogin();
        }
 
        SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
        String token = sp.getString(TOKEN,null);
        if (token==null){
            startLogin();
            return;
        }
 
        if (savedInstanceState==null){
            doSomething();
        }
    }
 
    @Override
    protected void onResume() {
        super.onResume();
        Log.d(TAG,"onResume");
        onLogin();
 
    }
 
    /** запускаем диалог получения токена */
    private void startLogin() {
        Log.d(TAG,"startLogin");
        new AuthDialog().show(getSupportFragmentManager(), AUTHDIALOGTAG);
    }
 
    /** ковыряемся в Intent Data Bundle на предмет токена и сохраняем в SP */
    private void onLogin() {
        if (getIntent()!=null && getIntent().getData()!=null){
            Log.d(TAG,"onLogin has intent data:"+getIntent().getData().toString());
        }
    }
 
    /** токен есть, делаем что-нибудь */
    private void doSomething() {
        Log.d(TAG,"doSomething...");
    }
}

Запускаю приложение, диалог как положено открывает браузер предоставления прав моему "testapp" приложению предлагая авторизоваться под УЗ Яндекса. Нажимаю "предоставить", браузер открывает адрес:

https://yx687d4a6bb5674102a321d11ac1422adb.oauth.yandex.ru/auth/finish?platform=android#access_token=AQ*************fhs&token_type=bearer&expires_in=31535999

В котором по идее есть токен, тип, время жизни, т.е. всё по плану. Но вместо перехода в приложение остаюсь в браузере с текстом:
Авторизация в приложении testapp не удалась.
Возможные причины: Приложение не установлено
Покопавшись ещё раз во всех ключах/параметрах/значениях и сравнив с примером от Яндекса понял что что-то с перехватом Intent'а, приложение должно обработать путь как-то среагировав на "схему". В выше приложенном AndroidManifest'е есть соответсвующий параметр
XML
1
<data android:scheme="yx687d4a6bb5674102a321d11ac1422adb" />
куда вставлена "Custom URL Scheme" со странички регистрации приложения https://oauth.yandex.ru/ В примере яндекса там написано
XML
1
<data android:scheme="yandexdisk" />
Попробовал разные комбинации схемы - http, id, последующий путь, не помогло:
XML
1
2
3
<data android:scheme="https://yx687d4a6bb5674102a321d11ac1422" />
<data android:scheme="https://yx687d4a6bb5674102a321d11ac1422adb.oauth.yandex.ru" />
<data android:scheme="https://yx687d4a6bb5674102a321d11ac1422adb.oauth.yandex.ru/auth" />
На страничке настройки приложения https://oauth.yandex.ru/ есть так же чекбокс "Веб-сервисы" если отметить который появляется ещё одной поле ввода "Callback URI #1" и кнопка "Подставить URL для разработки" по нажатию на которую в поле ввода подставляется "https://oauth.yandex.ru/verification_code". В некоторых инструкциях по авторизации в Yandex OAuth так и написано было сделать, я оставил. Тоже не заработало, но есть некоторые изменения. После предоставления приложению доступа к ресурсам пользования (Диску в данном случае) редиректит на

https://oauth.yandex.ru/verification_code#access_token=AQ*************fhs&token_type=bearer&expires_in=31536000

А токен таже дублируется в теле самой странички в браузере. Но дальнейшего перехода в приложение тоже не происходит. onCreate/onResume не вызывается. По несколько раз всё перепроверил - id приложения, пакет, SHA256
Это какой-то тупик, кто-нибудь можнет подсказать где я ошибся, что-то со схемой, перехватом Intent'а и др? Настройки приложения из примера Яндекса не доступны, их же нельзя посмотреть, что бы сделать у себя по аналогии.
0
0 / 0 / 0
Регистрация: 19.07.2021
Сообщений: 1
22.11.2023, 16:10
arvalon, сейчас занимаюсь разработкой приложения, в котором необходимо реализовать сохранение информации на Yandex Disk. Споткнулся на авторизации в Yandex OAuth. Начал рыть и наткнулся на тему, где вы сталкивались с той же проблемой.
Яндекс.Диск API
У меня те же симптомы:
Авторизация в приложении testapp не удалась.
Возможные причины: Приложение не установлено.
Кучу времени потратил на решение – уже руки опускаются. Буду очень признателен, если поделитесь опытом. Удалось решить эту проблему.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.11.2023, 16:10
Помогаю со студенческими работами здесь

Android Studio не дает работать с API 8 без установленного API 21
Удалил все не интересующие меня библиотеки и поставил только API Level 8. Но при создании приложения вылезает куча ошибок таких как: Что...

Яндекс карты и Яндекс MapKit
Передо мной стоят такие задачи: показать карту, на ней показать маркеры на определенных координатах, построить маршрут между задаными...

Ошибка minSDK(API 23, N preview) != deviceSDK(API 17)
Недавно начал учить андроид и возникла такая ошибка, когда я пытаюсь запустить проект на своем телефоне или эмуляторе. При этом в проекте...

Java Android - сделать кнопку "показать адрес на карте", которая вызывает яндекс-карты или яндекс-навигатор и гугл-карты
Доброго дня, формучане! Подскажите, как сделать возможность из моего приложения при клике по кнопке &quot;Показать на карте&quot; перейти...

Яндекс Диск Api
Всем привет! Решил разобраться с Яндекс Диск Api, а именно WebDAV API(https://tech.yandex.ru/disk/webdav/). Скачал пример использования с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru