0

这些是我登录应用程序所需的最少详细信息:

guid(全局唯一 ID)

名称

名字

电子邮件

性别

对于 Facebook 登录,很明显,可以这样做:

JSONObject json = Util.parseJson(facebook.request("me");

获取上面指定的所有数据。

有没有办法让我用 Gmail 做一些类似而简单的事情?

我读到这个说:

不,没有这样的 SDK(如 facebook),如果您想访问 Gmail 的电子邮件,那么您需要实现自己的电子邮件客户端,并为此遵循 Spk 共享的上述链接。

但我只想要很少的用户详细信息,我不需要任何与他的邮件等相关的东西,这些都属于授权(如果我是对的)。我只需要身份验证:

我也读过这个,但看起来没有任何帮助。

这是我现在拥有的代码:

import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.GooglePlayServicesClient.ConnectionCallbacks;
import com.google.android.gms.common.GooglePlayServicesClient.OnConnectionFailedListener;
import com.google.android.gms.plus.GooglePlusUtil;
import com.google.android.gms.plus.PlusClient;
import android.os.Bundle;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.content.IntentSender.SendIntentException;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends Activity implements ConnectionCallbacks,
        OnConnectionFailedListener {

    private static final int REQUEST_CODE_RESOLVE_ERR = 7;
    private ProgressDialog mConnectionProgressDialog;
    private PlusClient mPlusClient;
    private ConnectionResult mConnectionResult;
    private String TAG = "GmailLogin";

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

        int errorCode = GooglePlusUtil.checkGooglePlusApp(this);
        if (errorCode != GooglePlusUtil.SUCCESS) {
            GooglePlusUtil.getErrorDialog(errorCode, this, 0).show();
        } else {

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


            mConnectionProgressDialog = new ProgressDialog(this);
            mConnectionProgressDialog.setMessage("Signing in...");

            Button signInButton = (Button) findViewById(R.id.sign_in_button);
            signInButton.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View v) {

                    if (mConnectionResult == null) {
                        mConnectionProgressDialog.show();
                    } else {
                        try {
                            mConnectionResult
                                    .startResolutionForResult(
                                            MainActivity.this,
                                            REQUEST_CODE_RESOLVE_ERR);
                        } catch (SendIntentException e) {
                            // Try connecting again.
                            mConnectionResult = null;
                            mPlusClient.connect();
                        }
                    }
                }
            });
        }

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public void onConnectionFailed(ConnectionResult result) {
        if (result.hasResolution()) {
            try {
                result.startResolutionForResult(this, REQUEST_CODE_RESOLVE_ERR);
            } catch (SendIntentException e) {
                mPlusClient.connect();
            }
        }
        // Save the result and resolve the connection failure upon a user click.
        mConnectionResult = result;
    }

    @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 onConnected() {
        String accountName = mPlusClient.getAccountName();
        Toast.makeText(this, accountName + " is connected.", Toast.LENGTH_LONG)
                .show();
    }

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

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

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

    }

非常感谢任何帮助,谢谢。

4

2 回答 2

3

您不应使用 Gmail 进行使用 Google 帐户的用户身份验证。您可以改用适用于 Android 的 Google + 登录。这将允许您在使用 OAuth 获得所需权限后访问用户的个人资料信息。在此处查看指南:

https://developers.google.com/+/mobile/android/sign-in

于 2013-02-27T06:54:03.433 回答
1

这些属性将在原始身份验证以及每个后续身份验证中 作为声明传递。

Google允许您请求它们最多包含国家、电子邮件、名字、语言和姓氏作为身份验证令牌的声明。

由于他们不提供 uuid,因此您必须从电子邮件地址中创建一个。没有支持(我能找到)检索性别。

于 2013-02-27T06:53:08.537 回答