Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/184.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 为什么firebase auth需要这么多Google Play服务权限?_Android_Firebase_Google Play Services_Firebase Authentication - Fatal编程技术网

Android 为什么firebase auth需要这么多Google Play服务权限?

Android 为什么firebase auth需要这么多Google Play服务权限?,android,firebase,google-play-services,firebase-authentication,Android,Firebase,Google Play Services,Firebase Authentication,我正在使用firebase auth构建我的第一个应用程序 我的设备HTC M8 API level 23上安装了Google Play Services 10.0.84 我最初禁用了Google Play服务的权限,并根据请求允许它们 当我添加firebase身份验证依赖项并尝试创建用户时,我得到一个 E/GoogleAppAvailability:意外错误代码19 我收到一个通知请求,允许Google Play服务访问日历、摄像头、通讯录、麦克风、电话、身体传感器、短信和存储 我想知道为什么

我正在使用firebase auth构建我的第一个应用程序

我的设备HTC M8 API level 23上安装了Google Play Services 10.0.84

我最初禁用了Google Play服务的权限,并根据请求允许它们

当我添加firebase身份验证依赖项并尝试创建用户时,我得到一个

E/GoogleAppAvailability:意外错误代码19

我收到一个通知请求,允许Google Play服务访问日历、摄像头、通讯录、麦克风、电话、身体传感器、短信和存储

我想知道为什么需要所有这些权限

我读过Commonware的帖子,正如他提到的,我是一个小品牌,不想吓跑潜在用户

在我的简单测试用例活动中,我没有尝试显式编译任何google play服务或其他firebase依赖项,除了

firebase:firebase auth:10.0.1

我知道游戏服务库、游戏服务库、firebase分析、firebase common和firebase iid都已添加

我明确请求的唯一权限是“android.permission.INTERNET”,我从合并清单中了解到,还添加了以下内容:

  • android.permission.ACCESS\u网络\u状态
  • android.permission.WAKE_锁
  • com.google.android.c2dm.permission.RECEIVE
这三个看起来很公平

但是firebase auth是否需要谷歌Play服务的所有其他权限?(短信、身体传感器、麦克风等)如果是,原因是什么?如果不是的话,为什么谷歌游戏服务会要求他们呢

我的依赖项:

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("example@example.ie", "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);
        }
    }
}
public类MainActivity扩展了AppCompatActivity{
私人消防队;
私有FirebaseAuth.AuthStateListener mAuthListener;
私有静态最终字符串标记=MainActivity.class.getName();
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mAuth=FirebaseAuth.getInstance();
mAuth.createUserWithEmailAndPassword(“example@example.ie", "1234567")
.addOnCompleteListener(MainActivity.this,新的OnCompleteListener(){
@凌驾
未完成的公共void(@NonNull任务){
Toast.makeText(MainActivity.this,“createUserWithEmail:onComplete:“+task.issusccessful(),Toast.LENGTH\u SHORT).show();
//如果登录失败,则向用户显示消息。如果登录成功
//将通知身份验证状态侦听器,并使用逻辑来处理
//可以在侦听器中处理已登录用户。
如果(!task.issusccessful()){
Toast.makeText(MainActivity.this,“身份验证失败”。+task.getException(),
Toast.LENGTH_LONG).show();
}否则{
startActivity(新意图(MainActivity.this、MainActivity.class));
完成();
}
}
});
mAuthListener=new FirebaseAuth.AuthStateListener(){
@凌驾
AuthStateChanged上的公共void(@NonNull FirebaseAuth FirebaseAuth){
FirebaseUser=firebaseAuth.getCurrentUser();
如果(用户!=null){
//用户已登录
Log.d(标记为“+user.getUid()”);
}否则{
//用户已注销
Log.d(标记“onAuthStateChanged:signed_out”);
}
// ...
}
};
}
@凌驾
public void onStart(){
super.onStart();
mAuth.addAuthStateListener(mAuthListener);
}
@凌驾
公共void onStop(){
super.onStop();
if(mAuthListener!=null){
removeAuthStateListener(mAuthListener);
}
}
}

我不认为firebase auth应该为此负责。如果你说的是真的

com.google.firebase:firebase-auth:10.0.1
是罪魁祸首那么我在运行使用firebase auth的时会遇到这种情况,但我没有

是安卓保护“用户隐私或设备正常运行”的方式。如果你的应用程序使用照相机、麦克风和通讯录等功能,你将被要求写入这些权限。根据targetSdkVersion的不同,在运行时或安装时会请求该权限

默认情况下,基本Android应用程序没有与其关联的权限, 这意味着它不能做任何会对用户产生不利影响的事情 设备上的经验或任何数据。利用受保护的 设备的功能,您必须包括一个或多个 应用程序清单中的标记

如果您的应用程序在其清单中列出了正常权限(即, 不会对用户隐私或安全造成太大风险的权限 设备的操作),系统会自动授予 权限。如果您的应用程序在其清单中列出了危险的权限 (即,可能影响用户隐私的权限 或设备的正常操作),系统要求用户 显式授予这些权限


中对权限进行了更深入的解释,希望能解释为什么需要这些权限。

我不认为firebase auth应该对此负责。如果你说的是真的

com.google.firebase:firebase-auth:10.0.1
是罪魁祸首那么我在运行使用firebase auth的时会遇到这种情况,但我没有

是安卓保护“用户隐私或设备正常运行”的方式。如果你的应用程序使用照相机、麦克风和通讯录等功能,你会被问到