在我的应用程序中启用Gmail登录

时间:2013-02-27 06:41:47

标签: android gmail

这些是我登录我的应用程序所需的最低细节:

  

guid(全球唯一身份证)

     

FNAME

     

L-NAME

     

电子邮件

     

性别

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

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

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

是否有一种方法可以使用Gmail做类似且简单的事情?

我读了this,其中说:

  

不,没有这样的SDK(比如facebook),如果你想访问它   Gmail的电子邮件,然后您需要实现自己的电子邮件客户端和   为此,请遵循Spk分享的上述链接。

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

我也读过this,但看起来不会对任何人有帮助。

这是我现在的代码:

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();
    }

    }

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

2 个答案:

答案 0 :(得分:3)

您不应使用Gmail进行使用Google帐户的用户身份验证。您可以使用Google +登录Android。这样,您就可以在使用OAuth获取所需权限后访问用户的个人资料信息。查看指南:

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

答案 1 :(得分:1)

这些属性将在原始身份验证中以claims传递,并在每次后续身份验证中传递。

Google allows you to request,其中包含国家/地区,电子邮件,名字,语言和姓氏作为身份验证令牌的声明。

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

相关问题