2013-02-27 83 views
0

这些都是我需要登录到我的应用程序的最小细节:启用Gmail登录

GUID(全球唯一ID)

FNAME

LNAME

电子邮件

性别

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

    } 

任何帮助是极大的赞赏,谢谢。

+3

的可能的复制[如何整合在Android应用程序的Gmail登录?(http://stackoverflow.com/questions/29120968/how-to-integrate-gmail-login -in-android-application) – 2015-12-25 23:03:41

回答

3

您不应将Gmail用于使用Google帐户进行用户身份验证。您可以改用Android的Google +登录功能。这将允许您在使用OAuth获取所需权限时访问用户的配置文件信息。这里请查看该指南:

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

+0

谢谢。我会仔细看看的。 – user1537779 2013-02-27 07:03:02

+0

在这一行'PlusClient.Builder'我得到的错误'PlusClient.Builder无法解析为类型'一切都很好。我导入了所有需要的包裹 – user1537779 2013-02-27 08:48:30

+0

我已经添加了需要的代码 – user1537779 2013-02-27 08:50:53

1

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

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

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