這篇要來介紹的是 如何使用Google+登入,要使用Google Plus登入App,在Coding之前有幾件事情要先做
●打包你的正式keystore,並取得SHA-1 指紋
●到你的Google Api主控台進行登記
下面會有圖文介紹
若還有疑問可以來看官方介紹
當你登記好你的專案後,Code的部分也很簡單,下面的Android專案演示在登入後取得個人資料,與登出
我的習慣是在專案內多開一個資料夾取名叫keystore
將產生出來的檔案放在裡面
這邊要使用JDK的keytool工具
1.打開cmd視窗
2.切換路徑到你的JDK的bin資料夾 指令:(cd C:\Program Files\Java\jdk1.8.0_45\bin)
3.查詢keystore 指令:(keytool -list -v -keystore "C:\Users\Anson\Desktop\MyApplication\keystore\keystore.jks")
點選 建立專案
完成後 點選進入Google+ API
點選新增憑證 -> O Auth 2.0用戶端編號
點選設定同意畫面
點選Android,並貼上你的SHA-1與專案package name
這個domo專案我在build.gradle引用兩個Lib
1.Google Play Service
2.AQuery(單純用來演示load頭像圖片而已)
compile 'com.google.android.gms:play-services:7.5.0' compile 'com.googlecode.android-query:android-query:0.25.9'
先來看Layout
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="10dp"
android:gravity="center_horizontal"
tools:context=".MainActivity">
<TextView
android:padding="5dp"
android:id="@+id/contentTv"
android:text="Hello world"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<ImageView
android:src="@android:drawable/ic_menu_gallery"
android:padding="5dp"
android:background="#B467C5"
android:id="@+id/photoIv"
android:layout_width="100dp"
android:layout_height="100dp" />
<com.google.android.gms.common.SignInButton
android:id="@+id/signInBtn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
<Button
android:text="登出"
android:id="@+id/logoutBtn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</LinearLayout>
再來看java code
import android.content.Intent;
import android.content.IntentSender;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import com.androidquery.AQuery;
import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.SignInButton;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.plus.Plus;
import com.google.android.gms.plus.model.people.Person;
public class MainActivity extends AppCompatActivity implements
View.OnClickListener,
GoogleApiClient.ConnectionCallbacks,
GoogleApiClient.OnConnectionFailedListener {
private static final int RC_SIGN_IN = 0;
private GoogleApiClient mGoogleApiClient;
private AQuery mAQuery;
private TextView mContentTv;
private ImageView mPhotoIv;
private SignInButton mSignInButton;
private Button mLogoutBtn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mContentTv = (TextView)findViewById(R.id.contentTv);
mPhotoIv = (ImageView)findViewById(R.id.photoIv);
mSignInButton = (SignInButton)findViewById(R.id.signInBtn);
mLogoutBtn = (Button)findViewById(R.id.logoutBtn);
mSignInButton.setOnClickListener(this);
mLogoutBtn.setOnClickListener(this);
mAQuery = new AQuery(this);
mGoogleApiClient = new GoogleApiClient.Builder(this)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.addApi(Plus.API, Plus.PlusOptions.builder().build())
.addScope(Plus.SCOPE_PLUS_LOGIN)
.build();
}
@Override
public void onClick(View view) {
switch (view.getId()){
case R.id.signInBtn:
mGoogleApiClient.connect();
break;
case R.id.logoutBtn:
if(mGoogleApiClient.isConnected()){
Plus.AccountApi.clearDefaultAccount(mGoogleApiClient);
mGoogleApiClient.disconnect();
mLogoutBtn.setVisibility(View.GONE);
mContentTv.setText("已登出~~~");
}
break;
}
}
@Override
public void onConnected(Bundle bundle) {
try {
if (Plus.PeopleApi.getCurrentPerson(mGoogleApiClient) != null) {
Person currentPerson = Plus.PeopleApi.getCurrentPerson(mGoogleApiClient);
String personName = currentPerson.getDisplayName();
String personEmail = Plus.AccountApi.getAccountName(mGoogleApiClient);
int gender = currentPerson.getGender();
String plusId = currentPerson.getId();
String personPhotoUrl = currentPerson.getImage().getUrl();
String content = "PersonName:"+personName+"\n";
content += "PersonEmail:"+personEmail+"\n";
content += "Gender:"+gender+"\n";
content += "PlusId:"+plusId;
mContentTv.setText(content);
mAQuery.id(mPhotoIv).image(personPhotoUrl, true, true, 0, android.R.drawable.ic_menu_gallery);
mSignInButton.setVisibility(View.GONE);
}
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void onConnectionSuspended(int i) {
mGoogleApiClient.connect();
}
@Override
public void onConnectionFailed(ConnectionResult connectionResult) {
try {
connectionResult.startResolutionForResult(this, RC_SIGN_IN);
} catch (IntentSender.SendIntentException e) {
e.printStackTrace();
}
}
@Override
protected void onActivityResult(int requestCode, int responseCode, Intent intent) {
switch (requestCode) {
case RC_SIGN_IN:
if (!mGoogleApiClient.isConnecting()) {
mGoogleApiClient.connect();
}
break;
}
}
}
最後還有Manifest要加上網路權限
<uses-permission android:name="android.permission.INTERNET"/>
要測試時記得打包正式apk檔
安裝到模擬器或實機上才能正常run喔!