Toast:在Android中集成Google Plus时出现内部错误

时间:2014-01-26 08:46:29

标签: android google-plus

我正在将Android Plus集成到我的Android应用中。我已在Google API控制台中创建了该项目。我创建了OAuth客户端ID,我加倍检查包名称和密钥库SHA1,但两者都是正确的,但我仍然得到Internal Error Occur

我见过很多线程但主要是说与SHA1和包名相关,这在这里是正确的。

伙计们分享您的观点。


编辑:我已经使用debug.keystore和自定义创建的密钥库进行了测试,但没有任何对我有用。

setScopes("PLUS_LOGIN")对我也没有帮助。


public class MainActivity extends Activity implements ConnectionCallbacks,
        OnConnectionFailedListener, OnClickListener {

    private static final int REQUEST_CODE_RESOLVE_ERR = 9000;

    private ProgressDialog mConnectionProgressDialog;
    private PlusClient mPlusClient;
    private ConnectionResult mConnectionResult;

    private static final String TAG = "Google Plus Demo";


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mPlusClient = new PlusClient.Builder(this, this, this)
                .setActions("http://schemas.google.com/AddActivity",
                        "http://schemas.google.com/BuyActivity")
                .setScopes(Scopes.PLUS_LOGIN).build();

        // Progress Bar to be displayed if the connection failure is not
        // resolved.
        mConnectionProgressDialog = new ProgressDialog(this);
        mConnectionProgressDialog.setMessage("Signing in...");

        findViewById(R.id.sign_in_button).setOnClickListener(this);

    }

    @Override
    protected void onStart() {
        super.onStart();
        mPlusClient.connect();
    }

    @Override
    protected void onStop() {
        super.onStop();
        mPlusClient.disconnect();
    }

    @Override
    protected void onActivityResult(int requestCode, int responseCode, Intent intent) {
        if(requestCode == REQUEST_CODE_RESOLVE_ERR && responseCode == RESULT_OK) {
            mConnectionResult = null;
            mPlusClient.connect();
        }
    }

    @Override
    public void onConnectionFailed(ConnectionResult result) {
        if(mConnectionProgressDialog.isShowing()) {
            // The user clicked on the sign-in button already. Start to resolve
            // connection errors. Wait until onConnected() to dismiss the 
            // connection dialog.

            if(result.hasResolution()) {
                try {
                    result.startResolutionForResult(this, REQUEST_CODE_RESOLVE_ERR);
                } catch(SendIntentException e) {
                    mPlusClient.connect();
                }
            }
        }

        // Save the result
        mConnectionResult = result;
    }

    @Override
    public void onConnected(Bundle connectionHint) {
        String accountName = mPlusClient.getAccountName();
        Toast.makeText(this, accountName, Toast.LENGTH_LONG).show();
        mConnectionProgressDialog.dismiss();
    }

    @Override
    public void onDisconnected() {
        Log.d(TAG, "Disconnected");
    }

    @Override
    public void onClick(View view) {
        if(view.getId() == R.id.sign_in_button && !mPlusClient.isConnected()) {
            if(mConnectionResult == null) {
                mConnectionProgressDialog.show();
            } else {
                try {
                    mConnectionResult.startResolutionForResult(this, REQUEST_CODE_RESOLVE_ERR);
                } catch(SendIntentException e) {
                    // Try connecting again
                    mConnectionResult = null;
                    mPlusClient.connect();
                }
            }
        }
    }
}

日志

01-27 20:22:23.871: I/GLSUser(1699): GLS error: INVALID_SCOPE xyz@gmail.com oauth2:PLUS_LOGIN
01-27 20:22:23.871: W/GLSActivity(1699): [aia] Status from wire: INVALID_SCOPE status: INVALID_SCOPE
01-27 20:22:23.965: W/InputManagerService(1536): Window already focused, ignoring focus gain of: com.android.internal.view.IInputMethodClient$Stub$Proxy@4076b580
01-27 20:22:24.020: I/eFrame(3180): pkgname_before:com.google.android.gms  class:com.xicom.appdemo.MainActivity
01-27 20:22:24.027: D/SurfaceFlinger(1536): Layer[34bee8]:: Tile format buffer w[256] h[64] f[1] v[0x47855000] p[0x97fd5000] sz[65536]
01-27 20:22:25.012: V/AudioFlinger(1323): Audio hardware entering standby, mixer 0x6f228, mSuspended 0
01-27 20:22:25.012: D/AudioStreamOutALSA(1323): AudioStreamOutALSA::standby--pause
01-27 20:22:25.106: V/AudioFlinger(1323): MixerThread 0x6f228 TID 1473 going to sleep
01-27 20:22:27.684: W/PowerManagerService(1536): Timer 0x3->0x3|0x3
01-27 20:22:27.691: D/BatteryService(1536): update start

代码:

mPlusClient = new PlusClient.Builder(this, this, this)
    .setActions("http://schemas.google.com/AddActivity",
            "http://schemas.google.com/BuyActivity")
    .build();

记录第二个版本

01-28 22:25:16.164: D/SurfaceFlinger(1536): Layer[37c9c0]:: Tile format buffer w[256] h[320] f[1] v[0x4ac99000] p[0x94741000] sz[327680]
01-28 22:25:17.007: D/SurfaceFlinger(1536): Layer[8a5a68] [4] non-RGB565 reloads
01-28 22:25:17.250: I/fno(2652): I/O exception (javax.net.ssl.SSLException) caught when processing request: Write error: ssl=0x25d728: I/O error during system call, Broken pipe
01-28 22:25:17.250: I/fno(2652): Retrying request
01-28 22:25:18.015: D/SurfaceFlinger(1536): Layer[8a5a68] [10] non-RGB565 reloads
01-28 22:25:18.101: V/AudioFlinger(1323): Audio hardware entering standby, mixer 0x6f228, mSuspended 0
01-28 22:25:18.101: D/AudioStreamOutALSA(1323): AudioStreamOutALSA::standby--pause
01-28 22:25:18.187: D/BatteryService(1536): update start
01-28 22:25:18.195: V/AudioFlinger(1323): MixerThread 0x6f228 TID 1473 going to sleep
01-28 22:25:19.015: D/SurfaceFlinger(1536): Layer[8a5a68] [10] non-RGB565 reloads
01-28 22:25:19.484: W/GLSActivity(2652): [aia] Status from wire: INVALID_CLIENT_ID status: null
01-28 22:25:19.484: W/GLSActivity(2652): [aia] Status from wire: INVALID_CLIENT_ID status: null
01-28 22:25:19.484: I/GLSUser(2652): GLS error: INVALID_CLIENT_ID xyz@gmail.com oauth2:https://www.googleapis.com/auth/plus.login
01-28 22:25:19.484: W/GLSActivity(2652): [aia] Status from wire: Unknown status: UNKNOWN
01-28 22:25:19.570: D/dalvikvm(20673): GC_EXTERNAL_ALLOC freed 163K, 43% free 3397K/5959K, external 511K/517K, paused 47ms
01-28 22:25:19.664: W/InputManagerService(1536): Window already focused, ignoring focus gain of: com.android.internal.view.IInputMethodClient$Stub$Proxy@40605c00
01-28 22:25:19.781: D/SurfaceFlinger(1536): Layer[278dc0]:: Tile format buffer w[256] h[64] f[1] v[0x49520000] p[0x97fcc000] sz[65536]
01-28 22:25:19.835: I/eFrame(20257): pkgname_before:com.google.android.gms  class:com.xicom.appdemo.MainActivity
01-28 22:25:20.046: D/dalvikvm(20257): GC_CONCURRENT freed 384K, 49% free 3021K/5895K, external 412K/517K, paused 4ms+6ms
01-28 22:25:20.757: W/PowerManagerService(1536): Timer 0x3->0x3|0x3
01-28 22:25:23.203: D/BatteryService(1536): update start

4 个答案:

答案 0 :(得分:45)

我遇到了同样的问题,我在开发者控制台中解决了这个问题。

事实证明,您需要在同意屏幕上填写有关项目的必要信息。

解决方案:

选择您的电子邮件并插入您的项目名称。下次启动应用程序时,您将获得正确的同意屏幕,之后一切正常。

答案 1 :(得分:2)

你是否在logcat中获得任何输出以获得错误?如果没有,请尝试启用详细日志记录(请参阅https://developers.google.com/+/mobile/android/getting-started#frequently_asked_questions

adb shell setprop log.tag.GooglePlusPlatform VERBOSE

编辑:感谢您添加日志。 GLS错误很有意思:

I / GLSUser(1699):GLS错误:INVALID_SCOPE xyz@gmail.com oauth2:PLUS_LOGIN

您是否可以检查您是否已在API控制台项目中启用了Google+ API,并且还可以尝试完全删除setScopes行(PLUS_LOGIN将是默认值,因此这似乎是测试是否有任何有趣内容的最简单方法)。

我不确定PLUS_LOGIN在其中是否表示替换没有发生,或者只是日志记录看起来像这样,但删除该行应将其从等式中移除。

编辑 - 根据您更新的转储,范围现在看起来不错,但那里存在无效的客户端ID错误。确保客户端ID中的sha 1周围没有任何尾随空格,并且包名称完全匹配。另请尝试清除Google Play服务中的缓存(从Google设置应用中的菜单中清除数据)。

答案 2 :(得分:0)

如果您未填写"同意屏幕"

答案 3 :(得分:0)

就我而言,花了一些时间才能看到同意屏幕。更改api控制台后,最好等待5-10分钟,然后尝试登录过程。