Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
powowstal
28 / 28 / 5
Регистрация: 21.03.2013
Сообщений: 331
#1

OAuth2 в google получить token через акаунт менеджер - Программирование Android

26.06.2015, 13:08. Просмотров 902. Ответов 9
Метки нет (Все метки)

Используя пример http://findevelop.blogspot.ru/2012/0...2-android.html получаю токен с менеджера акаунтов для работы с google spedseeps но выдает ошибку плохого токена
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
06-25 18:06:46.793: W/System.err(7729): com.google.gdata.util.AuthenticationException: Token invalid - AuthSub token has wrong scope
06-25 18:06:46.794: W/System.err(7729): <HTML>
06-25 18:06:46.794: W/System.err(7729): <HEAD>
06-25 18:06:46.794: W/System.err(7729): <TITLE>Token invalid - AuthSub token has wrong scope</TITLE>
06-25 18:06:46.794: W/System.err(7729): </HEAD>
06-25 18:06:46.794: W/System.err(7729): <BODY BGCOLOR="#FFFFFF" TEXT="#000000">
06-25 18:06:46.794: W/System.err(7729): <H1>Token invalid - AuthSub token has wrong scope</H1>
06-25 18:06:46.794: W/System.err(7729): <H2>Error 401</H2>
06-25 18:06:46.794: W/System.err(7729): </BODY>
06-25 18:06:46.794: W/System.err(7729): </HTML>
06-25 18:06:46.795: W/System.err(7729): at com.google.gdata.client.http.HttpGDataRequest.handleErrorResponse(HttpGDataRequest.java:608)
06-25 18:06:46.795: W/System.err(7729): at com.google.gdata.client.http.GoogleGDataRequest.handleErrorResponse(GoogleGDataRequest.java:564)
06-25 18:06:46.795: W/System.err(7729): at com.google.gdata.client.http.HttpGDataRequest.checkResponse(HttpGDataRequest.java:560)
06-25 18:06:46.795: W/System.err(7729): at com.google.gdata.client.http.HttpGDataRequest.execute(HttpGDataRequest.java:538)
06-25 18:06:46.796: W/System.err(7729): at com.google.gdata.client.http.GoogleGDataRequest.execute(GoogleGDataRequest.java:536)
06-25 18:06:46.796: W/System.err(7729): at com.google.gdata.client.Service.getFeed(Service.java:1135)
06-25 18:06:46.796: W/System.err(7729): at com.google.gdata.client.Service.getFeed(Service.java:1077)
06-25 18:06:46.796: W/System.err(7729): at com.google.gdata.client.GoogleService.getFeed(GoogleService.java:676)
06-25 18:06:46.796: W/System.err(7729): at com.google.gdata.client.Service.getFeed(Service.java:1034)
06-25 18:06:46.796: W/System.err(7729): at com.example.bill.VuborkaPoDateSGoogl.zaprosNaVuborku(VuborkaPoDateSGoogl.java:130)
06-25 18:06:46.796: W/System.err(7729): at com.example.bill.VuborkaPoDateSGoogl.run(VuborkaPoDateSGoogl.java:202)
06-25 18:06:46.796: W/System.err(7729): at java.lang.Thread.run(Thread.java:841)
Как получить нормальный токен и почему токен с акаунд менеджера не нормальный?

Буду благодарен за ответ или пример рабочего кода по получению токена, возможно другим способом.

Уже месяц пытаюсь настроить авторизацию выручайте )
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.06.2015, 13:08
Здравствуйте! Я подобрал для вас темы с ответами на вопрос OAuth2 в google получить token через акаунт менеджер (Программирование Android):

Ошибка при переходе по ссылке из программы в Google Play (в акаунт разработчика) - Программирование Android
Я добавил в своем приложении ссылку на акаунт Google Play. И вот, по правилам, я должен указывать вот так...

Акаунт в приложение и авторизация через Facebok и ипользувания Parse? - Программирование Android
Есть несколько вопросов: Например, есть активити с названиям SignActivity в ней мы осушествили авторизацию через некую соц сеть и...

Получить token от менеджера аккаунтов - Программирование Android
Кто может розживать код http://findevelop.blogspot.ru/2012/05/oauth2-android.html Как получить Token и записать его в БД. В примере...

Менеджер файлов (с управлением через PC по USB) - Программирование Android
Здравствуйте, уважаемые форумчане, Передо мной стоит задача - написать программу (для PC), которая будет находить Android устройство по...

Ошибка There was an error parsing the query. [ Token line number = 1,Token line offset = 43,Token in error = записи ] - C#
В чем проблема, не могу понять. Вот исходник: using System; using System.Collections.Generic; using System.ComponentModel; using...

Получить значение token из ответа сервера - Java Сети
Добрый день, форумчане. Сложился такой вопрос. Есть у нас ресурс, который возвращает данные вот в таком формате: del. Прикрепляйте...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
CoolMind
418 / 401 / 65
Регистрация: 06.10.2012
Сообщений: 1,727
26.06.2015, 17:38 #2
powowstal, товарищ, я так и не понял, зачем вам токен. У меня примеры работают без токенов, просто надо выбрать Google-аккаунт на устройстве, если их несколько. Я работал с Drive, там такая схема.
powowstal
28 / 28 / 5
Регистрация: 21.03.2013
Сообщений: 331
26.06.2015, 19:02  [ТС] #3
CoolMind, указывать акк и пасс для авторизации можно было месяц назад, теперь только oauth2 можно авторизироватся. Мне нужна авторизация что бы рабтать с гуг документами
CoolMind
418 / 401 / 65
Регистрация: 06.10.2012
Сообщений: 1,727
26.06.2015, 20:42 #4
powowstal, это я помню, вы писали об этом ранее. Я работал только с Google Drive по их инструкции. Там надо в консоли разработчика подключить API, сформировать debug.key и т.п. Вы это сделали?
powowstal
28 / 28 / 5
Регистрация: 21.03.2013
Сообщений: 331
26.06.2015, 21:10  [ТС] #5
CoolMind, да. Эсли вы можете дайте код получения токена с гугл драйв (это мне и нужно, Гуго документы теперь и есть гугл драйв)
CoolMind
418 / 401 / 65
Регистрация: 06.10.2012
Сообщений: 1,727
27.06.2015, 14:43 #6
powowstal, я никак не могу взять в толк, откуда его взять и куда вставить. Там не используются токены, на мой взгляд. Есть же примеры на сайте https://developers.google.com/drive/android/, точнее на github, ссылки на них есть там.
CoolMind
418 / 401 / 65
Регистрация: 06.10.2012
Сообщений: 1,727
03.07.2015, 12:32 #7
powowstal, хотел у тебя спросить. А раньше как это выглядело вообще? Была какая-то форма с вводом логина и пароля? Это были данные от Google-аккаунта? И если правильно ввести, то давало доступ к документам?

Добавлено через 21 час 42 минуты
Вот ещё кое-что, может быть, пригодится: https://developers.google.com/android/guides/http-auth.
powowstal
28 / 28 / 5
Регистрация: 21.03.2013
Сообщений: 331
03.07.2015, 14:19  [ТС] #8
CoolMind, раньше достаточно было в запросе указать, логин и пароль от гугл ака, без какой либо формы. Вот как раньше создавался запрос
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
        SpreadsheetService service =
                new SpreadsheetService("bill");      
            // TODO: Authorize the service object for a specific user (see other sections) теперь тут нужно делать авторизацию oauth2, которую я раньше не делал
 
        try {
            service.setUserCredentials(USERNAME, PASSWORD);
        } catch (AuthenticationException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
            // Define the URL to request.  This should never change.
            URL spreadSheetFeedUrl = null;
            try {
                spreadSheetFeedUrl = new URL(
                    "https://spreadsheets.google.com/feeds/spreadsheets/private/full");
            } catch (MalformedURLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
и дальше шли условия запроса

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
  SpreadsheetQuery spreadsheetQuery = new SpreadsheetQuery(
                    spreadSheetFeedUrl);
                    spreadsheetQuery.setTitleQuery(tableName);
                    spreadsheetQuery.setTitleExact(true);
                    SpreadsheetFeed spreadsheet = null;
                    try {
                        spreadsheet = service.getFeed(spreadsheetQuery,
                                                               SpreadsheetFeed.class);
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    } catch (ServiceException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
CoolMind
418 / 401 / 65
Регистрация: 06.10.2012
Сообщений: 1,727
03.07.2015, 15:51 #9
powowstal, понятно. Я ещё только подхожу к изучению Google Docs, немного умею работать с Drive.
Сегодня в очередной раз решил помучаться. Тот код, который вы указали выше, не применяется в Google Drive, ни разу такого не встречал.
Вот, например, какой примерно код нужно писать для работы с папками: https://developers.google.com/drive/android/folders. Это при условии, что пользователь авторизовался в приложении, т.е. нужно провести всю предварительную работу по добавлению приложения в консоли разработчика, авторизации пользователя.
Ориентировочно по последнему действию нужно смотреть код BaseDemoActivity, можете прямо его оттуда скопировать. Но в нём есть свои недостатки, о которых Google почему-то не упоминает (например, зацикливание вопроса выбора аккаунта).

Добавлено через 9 минут
Точнее, упоминает здесь: https://developers.google.com/androi...ndlingFailures, но даже там есть свои недочёты.
powowstal
28 / 28 / 5
Регистрация: 21.03.2013
Сообщений: 331
17.07.2015, 15:20  [ТС] #10
Как я решил вопрос:
как "благородный" пират позаимствовав класс с 1й ссылки в теме
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 GAuthHelper {
 
     private AccountManager accountManager;
     private static final String ACC_TYPE = "com.google";
     private static final String SCOPE = "oauth2:[url]https://docs.google.com/feeds/[/url] [url]https://docs.googleusercontent.com/[/url] https://spreadsheets.google.com/feeds/";
     private Activity act;
     
     public GAuthHelper(Activity activity) {
      accountManager = AccountManager.get(activity);
      act = activity;
     }
     
     public Account[] getAccounts() {
      Account[] accounts = accountManager.getAccountsByType(ACC_TYPE);
      return accounts;
     }
     
     public String[] getAccNames() {
      Account[] accounts = getAccounts();
      String[] rez = new String[accounts.length];
      for (int i = 0; i < accounts.length; i++) {
       rez[i] = accounts[i].name;
      }
      return rez;
     }
     
     private Account getAccountByName(String name) {
      Account[] accounts = getAccounts();
      for (int i = 0; i < accounts.length; i++) {
       if (name.equals(accounts[i].name)) return accounts[i];
      }
      return null;
     }
     
     public void invalidateToken(String token) {
      accountManager.invalidateAuthToken(ACC_TYPE, token);
     }
     
     public void getAuthToken(String accname, OAuthCallbackListener authCallbackListener) {
      getAuthToken(getAccountByName(accname), authCallbackListener);
     }
     
     public void getAuthToken(Account account, final OAuthCallbackListener authCallbackListener) {
      accountManager.getAuthToken(account, SCOPE, null, act,
        new AccountManagerCallback<Bundle>() {
         public void run(AccountManagerFuture<Bundle> future) {
          try {
           String token = future.getResult().getString(AccountManager.KEY_AUTHTOKEN);
           authCallbackListener.callback(token);
          } catch (OperationCanceledException e) {
           authCallbackListener.callback(null);
          } catch (Exception e) {
           e.printStackTrace();
          }
         }
        }, null);
     
     }
     
     public static interface OAuthCallbackListener {
      public void callback(String authToken);
     }
    }
в своем активити получаю токен и пишу его в БД следующими методами
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
    private GAuthHelper gah;
        public void oautorization (View v){
             gah = new GAuthHelper(this);         
              
                SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
                String authToken = prefs.getString(PREF_TOKEN, "");
                
            final String[] accn = gah.getAccNames();
             if (accn.length==0) {
                  Toast.makeText(this, "Google аккаунта не найдено", Toast.LENGTH_LONG).show();
                 } else {
             
         AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setTitle("Выберете Google аккаунт");
    builder.setItems(accn, new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, final int which) {
     saveToken(accn[which]);
     menu.findItem(1).setTitle("Вы зашли как: "+accn[which]);
    }
    }).create().show();
        }
             Toast toast = Toast.makeText(getApplicationContext(), 
                       "Выберите аккаунт", Toast.LENGTH_LONG); 
                    toast.show();
}
         private void saveToken(final String accname) {
              gah.getAuthToken(accname, new GAuthHelper.OAuthCallbackListener() {
               @Override
               public void callback(String authToken) {
                    
                if (authToken==null) {
                 Toast.makeText(MainActivity.this, "Operation cancelled", Toast.LENGTH_LONG).show();
                } else {
                 PreferenceManager.getDefaultSharedPreferences(MainActivity.this).edit().putString(PREF_TOKEN, authToken).commit();
               //  loadGDocs(authToken);
                 // Инициализируем наш класс-обёртку
                    BD sqh = new BD(getApplicationContext());
                    
                    // База нам нужна для записи и чтения
                    SQLiteDatabase sqdb = sqh.getWritableDatabase();
                    ContentValues cv = new ContentValues();
                    
                    //обнуляем таблицу перед записю
                    sqdb.delete(BD.TABLE_NAME_token, null, null);
                    
             
                    cv.put(BD.COLUMN_NAME[0], authToken);
                    cv.put(BD.COLUMN_NAME[1], accname);
 
                    sqdb.insert(BD.TABLE_NAME_token, null, cv);
                    sqh.close();
              
                }
               }
              });
             }
Важно знать: токе действует только пол часа, не забывайте обновлять его и не забудьте скачать и подключить нужные библиотеки.
Полученый токен можно отдавать так
Java
1
            service.setAuthSubToken(token);
На вопрос почему раньше не работал код и шла ошибка токена: я не правильно указал
Java
1
private static final String SCOPE = "oauth2:https://spreadsheets.google.com/feeds/";
строку в классе GAuthHelper
По логике вещей этой строкой мы говорим гуглу дать доступ к нужному ресурсу, узнать нужное разрешение можно тут https://developers.google.com/oauthplayground/




П.с. мой метод черновой, ежели господам не по нраву изложенный метод извольте съ предоставить лучший вариант кода или молчите в тряпку "трюмные крысы".
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.07.2015, 15:20
Привет! Вот еще темы с ответами:

Google Chrome - как вернуть старый менеджер закладок? - Софт
Привет всем. Появилась одна проблема. Проблема с которой я никогда не думал что столкнусь. Сегодня Bookmark Manager обновился, и...

Вход через access token - PHP
Добрый день. Гулял по сетке и нашел модуль для накрутки вконтакте, но наткнулся на не очень понятную вещи как &quot;assess_token&quot;. Подскажите...

Syntax error on token 'm' VariableDeclaratorId expected after this token - Java SE
Доброго времени суток.В куске кода выдаёт ошибку Syntax error on token 'm' VariableDeclaratorId expected after this token,что не так не...

В Google Crome не могу убрать менеджер закладок Atavi, который я не устанавливал - Удаление вирусов
Дело в том, что открыл Google Crome, и на главной странице появились окна часто посещаемых сайтов и логотип Atavi. Открываю новую вкладку,...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
17.07.2015, 15:20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru