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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Android Как сделать такое AlertDialog http://www.cyberforum.ru/android-dev/thread1487950.html
Помогите сделать вот такой AlertDialog или (не знаю что они использовали). Работает так нажимаещ ImageButton открываеться такое типа AlertDialog когда передвигаешь SeekBar видно что текст позади увеличивается или уменьшается. Помогите реализовать такое.
Android Api 16 VS api 19 webview Здравствуйте. В общем ситуация следующая: 1. одна activity использует 2 layout 2. на втором layout находиться weview 3. при загрузке второй activity создается приложением html-страница и загружается в webview 4. JS из базы приложения подгружает много html-кнопок на html-страницу 5. При использовании приложения на версии api 16 и менее все загружается отлично 6. При использовании приложения... http://www.cyberforum.ru/android-dev/thread1487894.html
Navigation Drawer и его кнопки Android
Как сделать так, чтобы по нажатию кнопок Home , Free Play, More Games , contact открывались ссылки в браузере(а в последнем случае мои мэил)Понимаю что нужно делать обработчик клика OnClick для каждой кнопки и ставить туда новый интент со ссылкой, но этот Navigation Drawer пока для меня лес густой и ничего в нем не понятно.Вот код(использовалась библиотека от Mike Perenz) drawerResult = new...
Android Вылетает приложение при использовании Adobe Air
Создаю пустое приложение в adobe flash, Air для android , скидываю на телефон , при запуске вылетает с ошибкой . Android 5.1.1 nexus 5 Добавлено через 2 минуты На 4.4 тоже самое
Android Обращение к View элементам фрагмента http://www.cyberforum.ru/android-dev/thread1487519.html
Добрый день. Нужна помощь, уже не знаю что делать. Имеется три идентичных фрагмента с одним TextView (id = textview1). Имеется Activity, в которой расположен ViewPager. В ViewPager добавляю эти фрагменты. По созданию Activity и в процессе работы (каждые скажем 10 сек) требуется обновлять интерфейс фрагментов. Суть проблемы - не могу обратиться к View элементам фрагментов. Текст который я...
Android Доступ к элементам Activity из другого класса Есть Activity, в её классе создаю экземпляр другого класса twoclass tw = new twoclass(); tw.start(MainActivity.this); и запускаю метод передовая туда контекст. При определенных условиях из класса(twoclass) получаю Toast на экране, но хотелось бы вместо тоста присваивать текст в EditText не пойму как обратиться к нему. подробнее

Показать сообщение отдельно
powowstal
27 / 27 / 4
Регистрация: 21.03.2013
Сообщений: 247
17.07.2015, 15:20  [ТС]     OAuth2 в google получить token через акаунт менеджер
Как я решил вопрос:
как "благородный" пират позаимствовав класс с 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/




П.с. мой метод черновой, ежели господам не по нраву изложенный метод извольте съ предоставить лучший вариант кода или молчите в тряпку "трюмные крысы".
 
Текущее время: 09:31. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru