Я строю свое первое приложение с firebase-auth.Почему для firebase-auth требуется столько разрешений Google Play Services?
У меня есть Google Play Services 10.0.84 установлена на моем устройстве HTC M8 уровня API апи 23.
Я изначально имеют права инвалидов на Google Play Services и я позволяю им в соответствии с просьбой.
Когда я добавляю зависимость firebase-аутентификации и попытаться создать пользователя я получаю
E/GoogleApiAvailability: Неожиданный код ошибки 19
и я получаю запрос на уведомление, чтобы разрешить Google Слушать Службы Доступ к Календарю, Камере, Контакты, Микрофону, Телефону, Датчикам тела, СМС и Хранению.
Я хотел бы знать, почему все эти разрешения запрашиваются.
Я прочитал сообщение CommonsWare https://commonsware.com/blog/2015/06/25/hey-where-did-these-permissions-come-from.html и, как он упоминает, я небольшой бренд и не хочу отпугивать потенциальных пользователей.
В моей простой тест активности я не пытаюсь явно компилировать любые Google-Play-сервисов или других firebase зависимости друг от
com.google.firebase: firebase-AUTH: 10.0. 1
и я понимаю, что все игровые сервисные базы, игровые сервисы-подвалы, firebase-analytics, firebase-common и firebase-iid добавлены.
Единственное разрешение я явно запросить это "android.permission.INTERNET", и я понимаю, из моего Merged Manifest, что также добавлены следующие:
- android.permission.ACCESS_NETWORK_STATE
- android.permission. WAKE_LOCK
- com.google.android.c2dm.permission.RECEIVE
три из которых кажется достаточно справедливым.
Но firebase-auth нужны все эти другие разрешения от Служб Google Play? (SMS, ДАТЧИКИ ТЕЛА, МИКРОФОН и т. Д.). Если да, то почему? и если нет, почему Google Play Services просит их?
Моей зависимость:
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:25.1.1'
compile "com.google.firebase:firebase-auth:10.0.1"
testCompile 'junit:junit:4.12'
}
apply plugin: 'com.google.gms.google-services'
Мой верхний файл сборка Уровня:
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.2.3'
classpath 'com.google.gms:google-services:3.0.0'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
и моя простой тест активность ..
public class MainActivity extends AppCompatActivity {
private FirebaseAuth mAuth;
private FirebaseAuth.AuthStateListener mAuthListener;
private static final String TAG = MainActivity.class.getName();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mAuth = FirebaseAuth.getInstance();
mAuth.createUserWithEmailAndPassword("[email protected]", "1234567")
.addOnCompleteListener(MainActivity.this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
Toast.makeText(MainActivity.this, "createUserWithEmail:onComplete:" + task.isSuccessful(), Toast.LENGTH_SHORT).show();
// If sign in fails, display a message to the user. If sign in succeeds
// the auth state listener will be notified and logic to handle the
// signed in user can be handled in the listener.
if (!task.isSuccessful()) {
Toast.makeText(MainActivity.this, "Authentication failed." + task.getException(),
Toast.LENGTH_LONG).show();
} else {
startActivity(new Intent(MainActivity.this, MainActivity.class));
finish();
}
}
});
mAuthListener = new FirebaseAuth.AuthStateListener() {
@Override
public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
FirebaseUser user = firebaseAuth.getCurrentUser();
if (user != null) {
// User is signed in
Log.d(TAG, "onAuthStateChanged:signed_in:" + user.getUid());
} else {
// User is signed out
Log.d(TAG, "onAuthStateChanged:signed_out");
}
// ...
}
};
}
@Override
public void onStart() {
super.onStart();
mAuth.addAuthStateListener(mAuthListener);
}
@Override
public void onStop() {
super.onStop();
if (mAuthListener != null) {
mAuth.removeAuthStateListener(mAuthListener);
}
}
}
Вы разрешили это? – noogui
Да, у меня возникла проблема с запуском в эмуляторе, как вы предположили, из-за того, что мой dev env уже находится в виртуальной машине, но мой код работал в Genymotion без запроса разрешений. Затем я снова попытался на своем устройстве, и он также не запрашивал разрешения. Я не знаю, почему и что изменилось на моем устройстве, но теперь он работает, а firebase-auth не является причиной. Огромное спасибо. – Leinster
Хорошо, что мы прояснили это. Отличная работа! – noogui