我正在尝试按照以下链接提供的说明在我的应用程序中集成 Google plus Login: https ://developers.google.com/+/quickstart/android#install-sdk
我完全按照所有说明进行操作。当我在 android-sdk 中提供的真实设备上运行示例应用程序并单击signin
按钮时,它会显示一条 Toast 消息An internal error occurred
我究竟做错了什么?
我正在尝试按照以下链接提供的说明在我的应用程序中集成 Google plus Login: https ://developers.google.com/+/quickstart/android#install-sdk
我完全按照所有说明进行操作。当我在 android-sdk 中提供的真实设备上运行示例应用程序并单击signin
按钮时,它会显示一条 Toast 消息An internal error occurred
我究竟做错了什么?
我有这个问题,即使在创建了 10 个不同的客户端 ID 和不同SHA
的包名称之后,它也不起作用......直到我发现你必须填写Consent screen
.
根据 GoogleDevelopers Console -
每当您使用您的客户端 ID 请求访问他们的私人数据时,都会向用户显示同意屏幕。
如果您没有在 API 控制台项目中为客户端 ID 设置签名,或者如果您从 keytool 复制了错误的键值,则可能会发生这种情况。快速入门指南的步骤 7、8、9 和 10中记录了这样做。
我通过.setScopes("PLUS_LOGIN")
在 PlusClient.Builder 中删除解决了问题。
我在我的 android 应用程序中收到了这个 toast 消息错误:
An internal error occurred
概括:
假设您在配置您的 android 应用程序和授予您访问权限的 Android API 服务器之间的协商时出错。很可能是由于您没有添加正确的包名称或正确的 SHA1 指纹。我按照这些步骤清除了错误的配置并正确执行。
修复步骤:
转到您的 google api 控制台并登录:https ://code.google.com/apis/console
单击“API 访问”选项卡。
单击按钮:“创建另一个客户 ID”。
选择:“已安装的应用程序”单选按钮。
选择:“Android”单选按钮。
输入显示上述错误的 android 应用程序的包名称。PlusSampleActivity.java
您可以在代码文件的顶部找到它的定义。对我来说是 com.google.android.gms.samples.plus
获取您的 SHA1 指纹值:
一种。使用命令keytool -list -v -keystore /home/el/.android/debug.keystore
。输入密码,如果您从未设置过,默认密码为“android”。
湾。SHA1 指纹显示在屏幕上,复制它。
将上述值粘贴到“签名证书指纹(SHA1):”框中。
单击按钮:“创建客户 ID”。
再次运行你的安卓应用程序,点击“登录”。
现在,您将看到一个“使用 Google 登录 Google+ SDK”的活动。
就我而言,解决方案是在同意屏幕中实际设置一个电子邮件地址。 首先,我有点不愿意选择我的个人地址,出于一个奇怪的原因,您可以在没有这条数据的情况下保存表单而不会出错。在检查了其他人的建议后,一旦我在该表单中设置了我的电子邮件地址,它就开始工作了。
在没有运气的情况下,我一直在寻找如何解决这个问题,最后我设法通过以下方法解决了这个问题。
在我开始解决这个问题之前(至少 ti 如何为我工作),我必须说文档上的所有内容都是正确的,您不必更改任何代码行左右。它看起来更像是https://cloud.google.com/console云控制台中的一个错误
首先确保您获得正确的 SHA1 和项目的包名称,如文档 https://developers.google.com/+/quickstart/android中所述
现在我注意到的这个错误(至少对我来说)是在我的云控制台中,我创建的项目很久以前使用旧界面,几个月前我迁移到了新的 GUI。一旦你在云上获得了新的外观控制台你会注意到新项目有一个自动生成的项目 ID ,比如 atlantean-ares-331,而旧项目有一个长整数值作为项目 ID ,这是不可见的。因此,如果您的项目是使用旧 GUI 创建的,并且您刚刚为该项目的 OAuth 创建了新的客户端 ID,您将在尝试使用 google 登录时收到 Toast“发生内部错误”。
怎么修
确保您的所有项目在 OAuth 客户端 ID 上的包名称都与您现在将使用的相同,否则您将收到错误 This client ID is globally unique and is already in use
。(您必须删除旧的 OAuth 客户端 ID,并与您现在使用的包名称相同)。
转到凭据为 OAuth 创建新的客户端 ID。
已安装的应用程序
安卓
输入你的项目的包名和你的 SHA1
完毕
我对这个问题的解决方案如下。
我做了其他人推荐的所有事情,并且没有关于包名称和 SHA1 密钥的拼写错误。我也尝试删除密钥然后再次添加它,但它没有帮助。
有什么帮助是删除密钥并创建一个新项目(在https://code.google.com/apis/console),然后在那里再次创建客户端 ID(使用 package+sha1)。之后(5 秒)一切都在我的 Android 设备上运行。
此问题与来自 api 控制台的权限有关。
如果您使用与 SCOPE_PLUS_LOGIN 相关的权限,则必须在 api 控制台中创建两个密钥,一个用于 OAuth 客户端 ID,另一个用于公共 api 密钥。
就我而言,问题是我更改了应用程序的包名称并且没有在开发控制台中更新。
对我来说,这是我在使用我的调试密钥安装它时试图使用我的生产密钥。确保您使用来自正确密钥库的正确 SHA1。
我转向Google IO 2013,并更改了PlusClient的初始化,然后它就可以工作了。
public static final String AUTH_SCOPES[] = {
Scopes.PLUS_LOGIN,
"https://www.googleapis.com/auth/userinfo.email",
"https://www.googleapis.com/auth/developerssite" };
mPlusClient = new PlusClient.Builder(this, this, this)
.setScopes(AUTH_SCOPES)
.build();
感谢 Thano 的解决方案“现在我注意到的这个错误(至少对我来说)是在我的云控制台中,我创建的项目很久以前使用旧界面,几个月前我迁移到了新的 GUI。一旦你在云控制台上获得新外观,您会注意到新项目具有自动生成的项目 ID,例如 atlantean-ares-331,而旧项目有一个长整数值作为项目 ID,这是不可见的。因此,如果您的项目是使用旧的 GUI 并且您刚刚为该项目的 OAuth 创建了新的客户端 ID,您将在尝试使用 google 登录时收到 Toast “发生内部错误”。
经过其他几次尝试后,在 Google 控制台中重新创建项目对我有用:
出于某种原因,我的项目没有项目 ID(旧控制台/新控制台?)。
正如 Thano(上图)所建议的那样,我创建了一个全新的项目,创建了客户端 ID,......然后开始工作。感谢您的建议!!
请记住使用内置的调试密钥库进行测试。我的其他一切工作正常,但我在开发人员控制台的凭据中设置了我的生产密钥库 SHA1 指纹,这导致它无法工作。
如果您在尝试运行示例应用程序时遇到此错误“或”复制您在其他机器中创建的项目,该项目在该机器中成功运行并在您尝试运行的另一台机器上出现此类弹出错误,你可以按照下面的方法,它会有所帮助。
如果您正在构建应用程序以进行测试/调试,那么,
1.如果您复制您的项目并在其他机器上为密钥库提供的包名称和路径运行它,则生成新的 SHA1。
2.在开发人员控制台中更改新生成的 SHA1 的 ClientId 并在您复制项目并尝试运行它的新机器上运行它。
经常被忽略的是包名。我想澄清上面 Eric Leschinski 的第 6 步(不能在此处发表评论):所需的包不是活动的包,而是应用程序清单的包。
您可以从 AndroidManifest.xml 的根元素中检索正确的值:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.ntk.darkmoor"
android:versionCode="1"
android:versionName="1.0" >
在此示例中,在创建客户端 ID 时定义“com.ntk.darkmoor”
当我使用 SHA1 进行 debug.keystore 进行调试然后导出我的应用程序时忘记为我用来导出我的应用程序的密钥库生成 SHA1 时,我遇到了同样的问题。
当我连接设备并从 Android Studio 安装 apk 时,它对我有用。但是当我生成 .apk 并从保管箱安装它时,它现在对我有用。
我浏览了此处提供的所有答案以及其他答案。就我而言,问题也是 SHA-1。我得到不正确的 SHA-1 的原因是我的 keytool export cert 命令。
以前我在使用
C:\Users\mysuername\.android SHA 1 signature keytool -exportcert -alias androiddebugkey -keystore "keystorepath" -list -v
问题出在 androiddebugkey 变量中。在这里,您必须提供用于签署应用程序的密钥的名称。
C:\Users\mysuername\.android SHA 1 signature keytool -exportcert -alias mykeyname -keystore "keystorepath" -list -v
希望这对某人有帮助!
添加到这个长长的原因列表中,我的问题是我从 jks 文件而不是应用程序中获取了调试密钥。
它总是一些小事。