亚洲国产爱久久全部精品_日韩有码在线播放_国产欧美在线观看_中文字幕不卡在线观看

在Android應用中集成Google登錄含代碼

在Android應用中集成Google登錄

在本教程中,我們將使用 Google API 在我們的Android應用程序中集成 Google登錄 功能。愛掏網 - it200.com將Google API合并到Android應用程序中可以幫助用戶使用Google賬戶登錄。愛掏網 - it200.com

要在我們的應用程序中集成Google登錄API,我們需要將應用程序配置到Google開發者帳號并下載 ‘google-service.json’ 文件用于Android應用程序。愛掏網 - it200.com

1. 在https://developers.google.com/identity/sign-in/android/start-integrating上創建一個Google開發者帳號,并點擊’GET A CONFIGURATION FILE’。愛掏網 - it200.com

2. 填寫所有的應用細節,選擇您的國家/地區,然后點擊“選擇并配置服務”。愛掏網 - it200.com

3. 成功創建谷歌應用支持配置后,將會重定向到下一個窗口以選擇谷歌服務。愛掏網 - it200.com我們將選擇谷歌登錄服務。愛掏網 - it200.com

4. 現在,我們需要提供應用程序的簽名證書 SHA-1 密鑰。愛掏網 - it200.com

5. 有兩種不同的方式生成證書的SHA-1密鑰。愛掏網 - it200.com

  • 通過使用命令提示符。愛掏網 - it200.com

Windows:

keytool -exportcert -list -v \
-alias androiddebugkey -keystore %USERPROFILE%\.android\debug.keystore

Mac/Linux

keytool -exportcert -list -v \
-alias androiddebugkey -keystore ~/.android/debug.keystore
  • 通過Android Studio自身。愛掏網 - it200.com
    1. 打開Android項目。愛掏網 - it200.com
    2. 從右側面板打開Gradle選項卡。愛掏網 - it200.com
    3. 雙擊’signingReport’。愛掏網 - it200.com
    4. 我們將會在’Gradle Console’上找到我們的應用SHA-1密鑰。愛掏網 - it200.com

6. 將生成的SHA-1密鑰粘貼到Google Sign-In服務中,然后點擊’啟用Google Sign-In’和’生成認證文件’。愛掏網 - it200.com

7. 現在下載 ‘google-services.json’ 文件,并將其集成到Android應用程序中。愛掏網 - it200.com

在Android應用程序中集成Google Sign-In的示例

在本示例中,我們將在Android應用程序中集成Google Sign-In。愛掏網 - it200.com一旦用戶成功通過Google Sign-In登錄,我們將重定向到下一個活動(ProfileActivity)并檢索用戶詳細信息。愛掏網 - it200.com

我們需要將下載的’google-services.json’文件粘貼到我們的Android項目應用程序目錄中。愛掏網 - it200.com

必要的權限

在AndroidMenifest.xml文件中添加Internet權限。愛掏網 - it200.com

<uses-permission android:name="android.permission.INTERNET" />

build.gradle(項目)

build.gradle 文件中添加以下依賴項。愛掏網 - it200.com

dependencies{
classpath 'com.google.gms:google-services:3.1.0'
}

build.gradle(模塊)

dependencies {
    implementation 'com.google.android.gms:play-services-auth:11.6.0'
    implementation 'com.github.bumptech.glide:glide:3.7.0'
}
apply plugin: 'com.google.gms.google-services'

activity_main.xml

在activity_main.xml文件中添加TextView和Google SignInButton。愛掏網 - it200.com

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="gloginexample.example.com.MainActivity">

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="20dp"
        android:layout_marginRight="20dp"
        android:textSize="20dp"
        android:text="This is main activity, sign in to move next activity." />

    <com.google.android.gms.common.SignInButton
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/sign_in_button"
        android:layout_marginLeft="20dp"
        android:layout_marginRight="20dp"
        android:layout_alignParentBottom="true"
        android:layout_marginBottom="20dp">

    </com.google.android.gms.common.SignInButton>

</RelativeLayout>

MainActivity.java

在MainActivity.java類中,我們調用Auth.GoogleSignInApi.getSignInIntent()方法通過Google Sign-In API登錄。愛掏網 - it200.comGoogle API的GoogleApiClient.OnConnectionFailedListener接口重寫其未實現的方法onConnectionFailed(ConnectionResult),該方法返回連接失敗的結果。愛掏網 - it200.comGoogleApiClient類用于管理Android應用程序與Google Sign-In API之間的連接。愛掏網 - it200.com

package gloginexample.example.com;

import android.content.Intent;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;

import com.google.android.gms.auth.api.Auth;
import com.google.android.gms.auth.api.signin.GoogleSignInOptions;
import com.google.android.gms.auth.api.signin.GoogleSignInResult;
import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.SignInButton;
import com.google.android.gms.common.api.GoogleApiClient;

public class MainActivity extends AppCompatActivity implements GoogleApiClient.OnConnectionFailedListener {
    SignInButton signInButton;
    private GoogleApiClient googleApiClient;
    TextView textView;
    private static final int RC_SIGN_IN = 1;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        GoogleSignInOptions gso =  new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                .requestEmail()
                .build();
        googleApiClient=new GoogleApiClient.Builder(this)
                .enableAutoManage(this,this)
                .addApi(Auth.GOOGLE_SIGN_IN_API,gso)
                .build();



        signInButton=(SignInButton)findViewById(R.id.sign_in_button);
        signInButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = Auth.GoogleSignInApi.getSignInIntent(googleApiClient);
                startActivityForResult(intent,RC_SIGN_IN);
            }
        });


    }


    @Override
    public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {

    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if(requestCode==RC_SIGN_IN){
            GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
            handleSignInResult(result);
        }
    }
    private void handleSignInResult(GoogleSignInResult result){
        if(result.isSuccess()){
            gotoProfile();
        }else{
            Toast.makeText(getApplicationContext(),"Sign in cancel",Toast.LENGTH_LONG).show();
        }
    }
    private void gotoProfile(){
        Intent intent=new Intent(MainActivity.this,ProfileActivity.class);
        startActivity(intent);
    }
}

activity_profile.xml

在 activity_profile.xml 文件中添加以下組件。愛掏網 - it200.com

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="gloginexample.example.com.ProfileActivity">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center"
        android:orientation="vertical">
        <ImageView
            android:layout_width="80dp"
            android:layout_height="80dp"
            android:id="@+id/profileImage"
            />
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/name"
            android:text="name"
            android:textSize="20dp"
            android:layout_marginTop="20dp"/>
        <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/email"
        android:textSize="20dp"
        android:text="email"
        android:layout_marginTop="20dp"/>
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/userId"
            android:textSize="20dp"
            android:text="id"
            android:layout_marginTop="20dp"/>
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/logoutBtn"
            android:text="Logout"
            android:layout_marginTop="30dp"/>
    </LinearLayout>

</RelativeLayout>

創建一個ProfileActivity.java類,在成功登錄后顯示用戶詳細信息。愛掏網 - it200.com

ProfileActivity.java

在這個類中,如果用戶成功登錄,我們將檢索用戶詳細信息。愛掏網 - it200.comGoogleSignInResult類實現了Result接口,表示調用Google Play服務API方法的最終結果。愛掏網 - it200.com

GoogleSignInAccount類保存用戶的基本信息。愛掏網 - it200.com

package gloginexample.example.com;

import android.content.Intent;
import android.support.annotation.NonNull;
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 android.widget.Toast;

import com.bumptech.glide.Glide;
import com.google.android.gms.auth.api.Auth;
import com.google.android.gms.auth.api.signin.GoogleSignInAccount;
import com.google.android.gms.auth.api.signin.GoogleSignInOptions;
import com.google.android.gms.auth.api.signin.GoogleSignInResult;
import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.common.api.OptionalPendingResult;
import com.google.android.gms.common.api.ResultCallback;
import com.google.android.gms.common.api.Status;

public class ProfileActivity extends AppCompatActivity implements GoogleApiClient.OnConnectionFailedListener {
    Button logoutBtn;
    TextView userName,userEmail,userId;
    ImageView profileImage;
    private GoogleApiClient googleApiClient;
    private GoogleSignInOptions gso;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_profile);

        logoutBtn=(Button)findViewById(R.id.logoutBtn);
        userName=(TextView)findViewById(R.id.name);
        userEmail=(TextView)findViewById(R.id.email);
        userId=(TextView)findViewById(R.id.userId);
        profileImage=(ImageView)findViewById(R.id.profileImage);

        gso =  new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                .requestEmail()
                .build();

        googleApiClient=new GoogleApiClient.Builder(this)
                .enableAutoManage(this,this)
                .addApi(Auth.GOOGLE_SIGN_IN_API,gso)
                .build();


        logoutBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Auth.GoogleSignInApi.signOut(googleApiClient).setResultCallback(
                        new ResultCallback<Status>() {
                            @Override
                            public void onResult(Status status) {
                                if (status.isSuccess()){
                                    gotoMainActivity();
                                }else{
                                    Toast.makeText(getApplicationContext(),"Session not close",Toast.LENGTH_LONG).show();
                                }
                            }
                        });
            }
        });
    }

    @Override
    protected void onStart() {
        super.onStart();
        OptionalPendingResult<GoogleSignInResult> opr= Auth.GoogleSignInApi.silentSignIn(googleApiClient);
        if(opr.isDone()){
            GoogleSignInResult result=opr.get();
            handleSignInResult(result);
        }else{
            opr.setResultCallback(new ResultCallback<GoogleSignInResult>() {
                @Override
                public void onResult(@NonNull GoogleSignInResult googleSignInResult) {
                    handleSignInResult(googleSignInResult);
                }
            });
        }
    }
    private void handleSignInResult(GoogleSignInResult result){
        if(result.isSuccess()){
            GoogleSignInAccount account=result.getSignInAccount();
            userName.setText(account.getDisplayName());
            userEmail.setText(account.getEmail());
            userId.setText(account.getId());
            try{
                Glide.with(this).load(account.getPhotoUrl()).into(profileImage);
            }catch (NullPointerException e){
                  Toast.makeText(getApplicationContext(),"image not found",Toast.LENGTH_LONG).show();
            }

        }else{
            gotoMainActivity();
        }
    }
    private void gotoMainActivity(){
        Intent intent=new Intent(this,MainActivity.class);
        startActivity(intent);
    }
    @Override
    public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {

    }
}

輸出:

聲明:所有內容來自互聯網搜索結果,不保證100%準確性,僅供參考。如若本站內容侵犯了原著者的合法權益,可聯系我們進行處理。
發表評論
更多 網友評論0 條評論)
暫無評論

返回頂部

亚洲国产爱久久全部精品_日韩有码在线播放_国产欧美在线观看_中文字幕不卡在线观看

    
    

    久久亚洲二区| 亚洲成色精品| 你懂的国产精品| 亚洲美女在线一区| 国产免费成人在线视频| 久久五月天婷婷| 亚洲精品一区二区三区蜜桃久| 欧美性做爰毛片| 免费观看亚洲视频大全| 午夜视频久久久久久| 亚洲毛片一区二区| 亚洲国产99精品国自产| 国产精品普通话对白| 欧美激情综合亚洲一二区| 欧美在线观看视频一区二区| 一区二区三区免费在线观看| 91久久精品国产91久久性色tv| 国产亚洲精品bt天堂精选| 欧美日韩妖精视频| 欧美日本韩国一区| 欧美成人dvd在线视频| 久久全国免费视频| 久久av最新网址| 亚洲永久免费av| 国产精品亚洲综合一区在线观看| 国产精品久久久久一区二区三区共| 噜噜噜久久亚洲精品国产品小说| 久久本道综合色狠狠五月| 亚洲欧美日本日韩| 欧美一级理论片| 欧美在线免费视屏| 久久精品欧美| 久久精品国产精品| 久久久亚洲国产天美传媒修理工| 久久国产精品网站| 久久午夜国产精品| 欧美va亚洲va香蕉在线| 嫩草影视亚洲| 欧美日韩一区二区免费在线观看| 欧美日韩1080p| 葵司免费一区二区三区四区五区| 久热精品视频在线观看一区| 噜噜噜噜噜久久久久久91| 免费一区视频| 欧美三级不卡| 国产区亚洲区欧美区| 韩国三级电影久久久久久| 亚洲国产你懂的| 一区二区三区www| 午夜精品一区二区三区四区| 欧美在线免费观看视频| 欧美wwwwww| 国产精品成人观看视频国产奇米| 国产精品视频成人| 亚洲一区二区三区四区在线观看 | 欧美调教vk| 国产麻豆午夜三级精品| 激情视频一区二区| 日韩午夜在线| 久久精视频免费在线久久完整在线看| 久久久99国产精品免费| 欧美日韩久久精品| 国产欧美一区二区视频| 91久久精品视频| 欧美一区二视频| 欧美精品一区三区| 国产三区精品| aa级大片欧美| 久久这里只精品最新地址| 欧美日韩一区二区在线观看视频 | 亚洲无人区一区| 毛片精品免费在线观看| 欧美午夜精品久久久久久久| 一区在线播放| 午夜精品剧场| 欧美视频日韩视频在线观看| 国产一区二区三区直播精品电影| 日韩视频一区二区三区在线播放免费观看| 性伦欧美刺激片在线观看| 欧美日韩国产成人在线| 伊人春色精品| 久久精品视频在线免费观看| 国产精品色婷婷| 在线一区二区日韩| 欧美电影在线| 亚洲电影免费在线| 久久性天堂网| 狠狠色狠狠色综合系列| 欧美在线亚洲| 国产日韩在线亚洲字幕中文| 亚洲永久免费视频| 国产精品videosex极品| 一本一本大道香蕉久在线精品| 欧美成人免费视频| 91久久久一线二线三线品牌| 久久久久久亚洲精品杨幂换脸| 国产欧美在线观看一区| 午夜精品久久久久久久蜜桃app | 一区二区三区高清在线| 欧美日韩成人免费| 亚洲精品免费看| 欧美激情黄色片| 日韩视频在线观看免费| 欧美日韩免费观看一区| 一片黄亚洲嫩模| 国产精品青草久久久久福利99| 亚洲午夜在线视频| 国产伦精品一区二区三区高清版| 亚洲欧美日韩在线一区| 国产婷婷精品| 久久理论片午夜琪琪电影网| 韩国福利一区| 欧美精品电影| 亚洲欧美在线看| 狠狠色2019综合网| 免费欧美在线| 亚洲一区二区三区精品视频| 国产精品日韩专区| 久久久久综合| 亚洲美女精品久久| 国产精品中文字幕欧美| 久久九九国产精品怡红院| 亚洲国产小视频| 国产精品嫩草久久久久| 久久婷婷人人澡人人喊人人爽| 在线日韩欧美视频| 欧美日韩在线视频首页| 欧美一区二区视频97| 亚洲电影在线免费观看| 欧美日韩网址| 久久精品免费观看| 99国产精品久久久| 国产日韩欧美精品在线| 欧美黄色aaaa| 亚洲免费在线观看| 亚洲欧洲日产国产综合网| 国产精品久久久久久久7电影| 久久久久久久久岛国免费| 在线一区二区三区做爰视频网站| 国产亚洲欧洲一区高清在线观看| 欧美精品不卡| 久久免费午夜影院| 亚洲欧美日本国产专区一区| 亚洲区一区二| 一区视频在线| 国产午夜久久久久| 欧美三级在线播放| 免费在线看成人av| 久久久久国产精品一区三寸| 中文欧美字幕免费| 亚洲日产国产精品| 黄色国产精品| 国产欧美日韩三区| 国产精品久久久久国产精品日日| 牛人盗摄一区二区三区视频| 久久精品国产亚洲一区二区三区| 亚洲午夜一区二区三区| 亚洲精品在线一区二区| 亚洲国产精品ⅴa在线观看| 黄色欧美成人| 狠狠爱综合网| 国语自产精品视频在线看一大j8| 国产精品午夜视频| 欧美视频在线免费| 欧美日韩精品免费在线观看视频| 免费欧美在线| 欧美成人资源| 欧美激情在线狂野欧美精品| 欧美成人高清视频| 欧美sm极限捆绑bd| 美日韩在线观看| 欧美成人精品1314www| 你懂的一区二区| 欧美交受高潮1| 欧美日韩视频免费播放| 欧美视频导航| 国产精品美女久久久久aⅴ国产馆| 欧美性色视频在线| 国产精品亚洲人在线观看| 国产精品日韩欧美一区| 国产欧美日韩不卡| 很黄很黄激情成人| 亚洲欧洲美洲综合色网| 亚洲日韩欧美视频| 一区二区三区日韩精品视频| 亚洲一区在线免费| 香蕉久久夜色精品国产使用方法| 欧美夜福利tv在线| 美国三级日本三级久久99| 欧美成人在线免费观看| 欧美视频一区二区| 国产精品人人爽人人做我的可爱| 国产日韩精品视频一区二区三区 | 久热精品视频在线免费观看| 女生裸体视频一区二区三区| 欧美三级视频在线| 国产一区欧美| 99国产精品久久久久久久| 亚洲欧美国内爽妇网| 久久精品人人做人人爽电影蜜月|