GoogleSignInResult 在使用 Firebase 的 Android 应用程序中返回 DEVELOPER_ERROR

Posted

技术标签:

【中文标题】GoogleSignInResult 在使用 Firebase 的 Android 应用程序中返回 DEVELOPER_ERROR【英文标题】:GoogleSignInResult returns DEVELOPER_ERROR in Android app using Firebase 【发布时间】:2016-10-10 17:42:54 【问题描述】:

所以我已经搞砸了几天了,我不知道为什么它不起作用。我真的希望有人能帮助我。

我正在尝试使用 Firebase 通过 Google 登录对用户进行身份验证。因此,按照他们的指南here,我设置了 Google 登录以获取 OAuth 令牌,然后使用它通过 Firebase 进行身份验证。因此,我按照他们在指南here 中的描述设置了 Google,但就我所知。我从 Google 获得的 OAuth 令牌始终为 null,结果代码为 StatusstatusCode=DEVELOPER_ERROR, resolution=null。

到目前为止,我的活动如下所示:

public static final int RC_GOOGLE_LOGIN = 1;
private GoogleApiClient mGoogleApiClient;
final Context context = this;

@Override
protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    Firebase.setandroidContext(this);

    GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
            .requestEmail()
            .requestIdToken(this.getResources().getString(R.string.server_client_id))
            .build();

    mGoogleApiClient = new GoogleApiClient.Builder(this)
            .enableAutoManage(this, this)
            .addApi(Auth.GOOGLE_SIGN_IN_API, gso)
            .build();

    SignInButton signInButton = (SignInButton) findViewById(R.id.googlebtn);
    signInButton.setSize(SignInButton.SIZE_WIDE);
    signInButton.setScopes(gso.getScopeArray());
    signInButton.setOnClickListener(this);



@Override
public void onClick (View v) 

    switch (v.getId()) 
        case R.id.googlebtn:
            signIn();
            break;
    


private void signIn() 
    Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient);
    startActivityForResult(signInIntent, RC_GOOGLE_LOGIN);


@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) 
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == RC_GOOGLE_LOGIN) 
        GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
        handleSignInResult(result);
    


private void handleSignInResult(GoogleSignInResult result) 
    if (result.isSuccess()) 
        // Signed in successfully, show authenticated UI.
        GoogleSignInAccount acct = result.getSignInAccount();

        String idToken = acct.getIdToken();
    

我已经在谷歌上搜索了一段时间,并认为我已经尝试了已经建议的所有内容。当然,我已经完成了指南中的所有内容,添加了依赖项('com.google.android.gms:play-services-auth:8.4.0')并在开发者控制台中创建了必要的客户端。

我还检查了(多次)我使用的服务器客户端 ID 是来自开发者控制台的正确 ID,并且它与我的 gradle 文件和清单文件中的包名称匹配。我已将 google-services.json 文件添加到我的 /app 目录中,甚至重新生成它以确保它匹配。我还检查了 SHA1 密钥是否正确,但仍然出现相同的错误。

如果我从 Google 登录选项中删除 requestIdToken ,它虽然可以工作,但这对我没有帮助,因为我无法使用 Firebase 登录。有人能告诉我我需要做什么才能让它工作吗?

【问题讨论】:

我面临同样的问题。你找到解决办法了吗? 面对同样的问题,我真的没有想法。你找到解决办法了吗? 【参考方案1】:

你设置你的R.string.server_client_id了吗?

    在 API 控制台中打开 Credentials page。 Web 应用程序类型客户端 ID 是您的后端服务器的 OAuth 2.0 客户端 ID。

https://developers.google.com/identity/sign-in/android/start-integrating#get_your_backend_servers_oauth_20_client_id

在 SHA-1 之后,这是我看到的下一个绊脚石。

【讨论】:

以上是关于GoogleSignInResult 在使用 Firebase 的 Android 应用程序中返回 DEVELOPER_ERROR的主要内容,如果未能解决你的问题,请参考以下文章

Android Google SignIn 无法在调试模式下工作:GoogleSignInResult 为 false

请求服务器身份验证代码时,GoogleSignInResult 在 Android 应用程序中返回 DEVELOPER_ERROR

iOS 7:通过 wi-fi 或对等 wi-fi 使用 Multipeer Connectivity 连接设备

在应用程序中显示 wi-fi 连接视图

使用Wi-Fi方式和4G方式将手机接入Internet的区别是啥?

如何使用变量在批处理文件中设置 FI 的值[重复]