2017-01-02 14 views
2

У меня есть приложение для Android с несколькими действиями и долговременным сервисом. У службы есть некоторые классы моделей, POJO, которые хранятся в базе данных Firebase.Firebase Auth: Получение AuthCredential после входа в систему с помощью FirebaseUI-Android

При первом запуске приложение определяет, что пользователь еще не вошел в систему и использует FirebaseUI-Android, чтобы предлагать деятельность по сбору учетных записей с помощью Google и Facebook. Это довольно часто:

Intent signInIntent = AuthUI.getInstance().createSignInIntentBuilder() 
      .setProviders(Arrays.asList(
        new AuthUI.IdpConfig.Builder(AuthUI.GOOGLE_PROVIDER).build(), 
        new AuthUI.IdpConfig.Builder(AuthUI.FACEBOOK_PROVIDER).build())) 
      .setTheme(R.style.AppThemeFirebaseAuth) 
      .setLogo(R.drawable.logo) 
      .setIsSmartLockEnabled(!BuildConfig.DEBUG) 
      .build(); 

    activity.startActivityForResult(signInIntent, Request.FIREBASE_AUTH); 

Затем я могу получить FirebaseUser и начать делать вещи с базой данных.

FirebaseUser firebaseUser = FirebaseAuth.getInstance().getCurrentUser(); 

DatabaseReference firebaseUserRef = FirebaseDatabase.getInstance().getReference("users").child(firebaseUser.getUid()); 

Проблема возникает при следующем запуске службы, которая может быть, когда никакой активности нет. Я хотел бы снова выполнить некоторые операции с базой данных, но без какого-либо взаимодействия с пользователем. Похоже, мне нужно позвонить FirebaseAuth.signInWithCredential(), но где я могу получить ссылку AuthCredential? AuthCredential не возвращается к активности, которая начинает вход.

Могу ли я использовать материал Smart Lock в FirebaseUI-Android, чтобы помочь здесь?

+0

Невозможно получить доступ к FirebaseAuth.getInstance(). GetCurrentUser(); от вашего сервиса? Поскольку это статический метод, вы должны иметь доступ к нему из любого места. –

+0

Конечно. Возвращает значение null. – Eliot

+0

@SaurabhPadwekar Я говорил скоро, извините! Похоже, что это возвращает нуль гораздо реже, чем я сначала боялся. Я буду проводить тестирование в течение следующих нескольких недель и обновить это своими выводами, но мне, возможно, не придется упорствовать в AuthCredential. – Eliot

ответ

0

Вы не можете. Из этой нити https://github.com/firebase/FirebaseUI-Android/issues/123

Ах, у нас есть небольшая проблема здесь после обсуждения этого с некоторыми коллегами. Умышленно нет способа вернуть AuthCredential от существующего пользователя, чтобы избежать потенциальной утечки учетных данных. Таким образом, привязка метода аутентификации к анонимной учетной записи должна произойти в пользовательском интерфейсе Firebase, если вы используете библиотеку. Я посмотрю на следующую неделю, чтобы разблокировать вас как можно скорее.