Android 安卓谷歌&x2B;“签名”;发生了一个内部错误";

Android 安卓谷歌&x2B;“签名”;发生了一个内部错误";,android,google-api,google-plus,Android,Google Api,Google Plus,我正在编写一个允许用户通过Facebook或Google+登录的应用程序。我所做的是为登录编写一个接口,这样任何一个都可以使用。在拼凑了几个小时的文档之后,Facebook的登录状态很好。另一方面,Google+让我感到困惑,或者我只是盯着它看了太久。我通常能找到解决问题的方法,但我已经花了一天的时间寻找答案 我一行一行地实现了。我运行了我的应用程序,得到了一个页面,要求我批准我的应用程序以访问我的Google+帐户。我单击“批准”,我的应用程序崩溃:facepalm:我没有在控制台中添加Goo

我正在编写一个允许用户通过Facebook或Google+登录的应用程序。我所做的是为登录编写一个接口,这样任何一个都可以使用。在拼凑了几个小时的文档之后,Facebook的登录状态很好。另一方面,Google+让我感到困惑,或者我只是盯着它看了太久。我通常能找到解决问题的方法,但我已经花了一天的时间寻找答案

我一行一行地实现了。我运行了我的应用程序,得到了一个页面,要求我批准我的应用程序以访问我的Google+帐户。我单击“批准”,我的应用程序崩溃:facepalm:我没有在控制台中添加Google+API。我已经在使用谷歌地图了,所以我跳过了这一部分

现在发生了什么?我有一个无限循环的连接尝试,导致祝酒词说“一个内部错误已经发生”。我不再有Google+审批屏幕。我尝试了以下解决方案:

  • 生成了一个新的控制台键(即使谷歌地图工作正常)
  • 用电子邮件和产品名称填写我的同意屏幕
  • 很多答案都涉及从不推荐的PlusClient API中删除.setScopes(),但此处不适用
  • 再次检查开发人员控制台中的SHA指纹是否与用于生成API密钥的指纹相同
  • 在设备上注销Google+
这是主要的活动代码
mSession
是我用于登录会话的变量。我现在没有按钮设置,我通常在GUI之前先选择功能

private Login mSession;

/**************************************************************************
 * Activity life cycle methods
 **************************************************************************/
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // Populate the main content
    if (savedInstanceState == null) {
        mSession = new GooglePlusLogin(this);
        mSession.openSession();
    }
}

@Override
protected void onStart() {
    super.onStart();

    // Call login session onStart() method
    mSession.onStart();
}

@Override
protected void onStop() {
    super.onStop();

    // Call login session onStop() method
    mSession.onStop();
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    mSession.onActivityResult(requestCode, resultCode, data);

}
下面是实现登录接口的GoogleLogin类

public class GooglePlusLogin implements Login, ConnectionCallbacks, OnConnectionFailedListener{

private boolean mIntentInProgress;
private Activity mActivity;
private Context mContext;
private GoogleApiClient mGoogleApiClient;
private String mSessionToken;

public GooglePlusLogin(Activity activity) {
    mGoogleApiClient = null;
    mSessionToken = null;
    mIntentInProgress = false;
    mContext = activity.getApplicationContext();
    mActivity = activity;
}

@Override
public boolean openSession() {
    boolean ret = false;

    Log.d(Helper.TAG, "openSession()");
    try {
        if(null != mContext) {
            Log.d(Helper.TAG, "null != mContext");

            mGoogleApiClient = 
                    new GoogleApiClient.Builder(mContext)
                    .addConnectionCallbacks(this)
                    .addOnConnectionFailedListener(this)
                    .addApi(Plus.API)
                    .addScope(Plus.SCOPE_PLUS_LOGIN)
                    .build();

            Log.d(Helper.TAG, "mPlusClient = " + mGoogleApiClient);

            ret = true;
        }
        else {
            throw new LoginException("GooglePlusLogin context NULL");
        }
    }
    catch(LoginException e) {
        Log.d(Helper.TAG, "" + e.toString());
    }

    Log.d(Helper.TAG, "Returning " + ret);

    return ret;
}

@Override
public void onActivityResult(int reqCode, int respCode, Intent intent) {
    Log.d(Helper.TAG, "onActivityResult()");

    if(Helper.GOOGLE_SIGN_IN == reqCode) {
        mIntentInProgress = false;

        if(!mGoogleApiClient.isConnected()) {
            Log.d(Helper.TAG, "Not connected to Google Services, try again");
            mGoogleApiClient.connect();
        }
        else {
            Log.d(Helper.TAG, "Already connected to Google Services");
        }
    }
}

@Override
public void onStart() {
    Log.d(Helper.TAG, "onStart()");

    mGoogleApiClient.connect();
}

@Override
public void onStop() {
    Log.d(Helper.TAG, "onStop()");
    if(mGoogleApiClient.isConnected()) {
        mGoogleApiClient.disconnect();
    }
}

/*************************************************************************
 * Google+ Interface callbacks for GoogleApiClient
 *************************************************************************/
@Override
public void onConnectionFailed(ConnectionResult result) {
    Log.d(Helper.TAG, "onConnectionFailed()");

    if(!mIntentInProgress && result.hasResolution()) {
        try {
            Log.d(Helper.TAG, "Try a Resolution");

            mIntentInProgress = true;

            //mActivity.startIntentSenderForResult(
            //      result.getResolution().getIntentSender(), 
            //      Helper.GOOGLE_SIGN_IN, 
            //      null, 
            //      0, 
            //      0, 
            //      0, 
            //      null
            //      );

            result.startResolutionForResult(mActivity, Helper.GOOGLE_SIGN_IN);
        }
        catch(SendIntentException e) {
            // Intent got canceled during processing, lets try and connect
            // again.
            Log.d(Helper.TAG, "Connect again");

            mIntentInProgress = false;
            mGoogleApiClient.connect();
        }
    }
    else {
        // Something terrible has happened with our connection to 
        // GooglePlay Services
    }
}

@Override
public void onConnected(Bundle connHint) {
    // Do my stuff, but I never get to this point
}

@Override
public void onConnectionSuspended(int arg0) {
    Log.d(Helper.TAG, "onConnectionSuspended()");
    // The connection was suspended... lets try again
    mGoogleApiClient.reconnect();
}
以下是我的AndroidManifest.xml的相关部分

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.USE_CREDENTIALS"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

<uses-feature
    android:glEsVersion="0x00020000"
    android:required="true"
    />    

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme"
    >

    <meta-data
        android:name="com.facebook.sdk.ApplicationId"
        android:value="@string/app_id_facebook"
        />
    <meta-data 
        android:name="com.google.android.gms.version"
        android:value="@integer/google_play_services_version"
        />
    <meta-data
        android:name="com.google.android.maps.v2.API_KEY"
        android:value="@string/app_id_google"
        />
我希望这是我忽略的简单的事情。《入门指南》中似乎包含一些过时的信息:

  • mGoogleApiClient.addScope(Plus.API,null)使我的应用程序崩溃
  • getSenderinent()不存在,您可以看到我尝试创建活动的两种方式

非常感谢任何能提供帮助的人。

只需在中添加应用程序详细信息即可
在控制台屏幕中,如电子邮件地址、产品名称…

只需在中添加应用程序详细信息即可
在控制台屏幕中,如电子邮件地址、产品名称…

我遇到了相同的问题,通过这样做可以解决

在谷歌api控制台的第页

  • 创建客户端ID
  • 应用程序类型应为已安装的应用程序
  • 选择android(如果是android)并输入您的sha1和包名
  • 现在是重要部分。

    单击下面的
    同意屏幕
    ,进入左侧面板菜单上的API 和
    填写信息

    您已经完成了。现在运行应用程序


    谢谢

    我有同样的问题,通过这样做来解决

    在谷歌api控制台的第页

  • 创建客户端ID
  • 应用程序类型应为已安装的应用程序
  • 选择android(如果是android)并输入您的sha1和包名
  • 现在是重要部分。

    单击下面的
    同意屏幕
    ,进入左侧面板菜单上的API 和
    填写信息

    您已经完成了。现在运行应用程序


    谢谢

    您必须填写API ad Auths下的“同意屏幕”,如果您不填写“同意屏幕”中的内容,其他任何操作都无效。

    您必须填写API ad Auths下的“同意屏幕”,如果您不填写“同意屏幕”中的内容,其他操作都无效。

    内部错误可能是其他错误。尝试通过Google Settings App>Clear App Data in功能表清除Google Play Services中的缓存,并从plus.Google.com/apps撤销对应用程序的访问。这将重置您的会话。还可以尝试启用详细调试,查看的底部,并在控制台中查找来自google services的任何其他错误(特别是涉及GLS的任何错误)。有点不清楚“清除应用程序数据”选项在哪里。我还没有将应用程序提交到Google Play。我进入我的Google+设置,第三方应用程序已断开连接。在我的Google API控制台中,我还没有看到任何类似于清除会话的内容。进入进一步调试并查看logcat wrt GooglePlusPlatform,它显示“消息”:“未配置访问”。这对我来说毫无意义,因为我在控制台中启用了GooglePlusApi。我知道我的API键是好的,因为谷歌地图API连接,并向我展示了一张地图。但是,我从未生成客户端ID。。。我发誓一切似乎都比它需要的复杂。谷歌设置是你设备上的一个应用程序。Access not configured(未配置访问权限)听起来像是在控制台中未启用—可能是因为它正在查找与您预期不同的客户端id?检查sha和包名是否与控制台中的完全匹配-注意错误,例如使用与预期不同的密钥存储。哦,设备设置。有这么多不同的选择。清除缓存非常有用,谢谢你的提示!但是客户端ID是导致内部错误的主要问题。现在所有这些都解决了,我有了范围问题。内部错误可能是其他原因。尝试通过Google Settings App>Clear App Data in功能表清除Google Play Services中的缓存,并从plus.Google.com/apps撤销对应用程序的访问。这将重置您的会话。还可以尝试启用详细调试,查看的底部,并在控制台中查找来自google services的任何其他错误(特别是涉及GLS的任何错误)。有点不清楚“清除应用程序数据”选项在哪里。我还没有将应用程序提交到Google Play。我进入我的Google+设置,第三方应用程序已断开连接。在我的GoogleAPI控制台中,在这个项目下,我没有看到任何类似于清除会话的东西
    07-04 11:08:25.354: D/  App(15944): openSession()
    07-04 11:08:25.354: D/  App(15944): null != mContext
    07-04 11:08:25.364: D/  App(15944): mPlusClient = com.google.android.gms.common.api.b@42238088
    07-04 11:08:25.364: D/  App(15944): Returning true
    07-04 11:08:25.364: D/  App(15944):  Main AuthToken: null
    07-04 11:08:25.364: D/  App(15944): onStart()
    07-04 11:08:25.615: D/  App(15944): onConnectionFailed()
    07-04 11:08:25.615: D/  App(15944): Try a Resolution
    07-04 11:08:27.106: D/  App(15944): onActivityResult()
    07-04 11:08:27.106: D/  App(15944): Not connected to Google Services, try again
    07-04 11:08:27.176: D/  App(15944): onConnectionFailed()
    07-04 11:08:27.176: D/  App(15944): Try a Resolution
    07-04 11:08:28.538: D/  App(15944): onActivityResult()
    07-04 11:08:28.538: D/  App(15944): Not connected to Google Services, try again
    07-04 11:08:28.668: D/  App(15944): onConnectionFailed()
    07-04 11:08:28.668: D/  App(15944): Try a Resolution
    07-04 11:08:29.248: D/  App(15944): onActivityResult()
    07-04 11:08:29.248: D/  App(15944): Not connected to Google Services, try again
    07-04 11:08:29.479: D/  App(15944): onConnectionFailed()
    07-04 11:08:29.479: D/  App(15944): Try a Resolution
    07-04 11:08:30.970: D/  App(15944): onStop()