日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Cocos Creator Android 平台 Google 原生登录

發布時間:2023/12/8 Android 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Cocos Creator Android 平台 Google 原生登录 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在海外項目中,我們通常需要接入 Google 帳號登錄,這樣可以提高應用使用率。

下面以 Android 平臺 接入 Google 原生登錄為例,進行詳細說明。



一、準備工作

1、需要 Android 4.4 或更高版本的兼容 Android 設備

2、需要在設備或模擬器上安裝 15.0.0 或更高版本的 Google Play 服務

3、最新版本的 Android SDK

4、配置為針對 Android 4.4 (KitKat) 或更高版本進行編譯

5、Google開發者賬號,登錄Firebase開發者后臺



二、接入步驟

第1步,設置Google API 控制臺項目

(1)、選擇國家地區,同意協議



(2)、創建或打開項目

Ps:一般在firebase創建項目后,項目會自動關聯到google api ;同時在憑據頁面會自動生成Android Client ID、Web Client ID。

如何在firebase創建項目,請查看Cocos Creator Android 平臺接入 Google Firebase (Analytics功能)



API 控制臺中打開項目,如果還沒有項目,請創建一個。

這里,我們直接打開firebase 自動創建的 google api 項目,如下圖所示:





(3)、憑據頁面,獲取到Web 客戶端 ID( app google sdk 初始化時使用) 、密鑰(web服務器驗證google登錄時使用)



(4)、憑據頁面,設置授權

A、依次點擊感嘆號項 ,進入下一步操作



B、選擇 Android apps



C、注冊app 項,點擊 添加 item



D、輸入 包名 、sha-1



E、保存



(4)、完善 OAuth 同意屏幕信息

A、點擊左側同意屏幕標簽,選擇外部類型



B、輸入開發者聯系郵箱



C、輸入客服郵箱



D、添加測試賬號

Google API 控制臺項目設置完成,下面添加依賴項。



第2步,添加依賴項

(1)、在項目根目錄 (Project) build.gradle 中添加 google()

確保buildscript和allprojects 部分中都包含 Google 的 Maven 存儲庫() 。

buildscript {repositories {google()mavenCentral()}... } allprojects {repositories {google()mavenCentral()jcenter() } }



(2)、在 app 級 build.gradle 中添加庫

implementation 'com.google.android.gms:play-services-auth:19.2.0'



(3)、java 代碼實現 google 登錄封裝

package org.cocos2dx.javascript.tools;import android.app.Activity; import android.content.Intent; import android.net.Uri; import android.util.Log;import com.google.android.gms.auth.api.signin.GoogleSignIn; import com.google.android.gms.auth.api.signin.GoogleSignInAccount; import com.google.android.gms.auth.api.signin.GoogleSignInClient; import com.google.android.gms.auth.api.signin.GoogleSignInOptions; import com.google.android.gms.common.api.ApiException; import com.google.android.gms.tasks.Task;import org.cocos2dx.javascript.Native;import java.util.HashMap; import java.util.Map;public class GoogleUtils {private String m_actTag ="GoogleUtils";private String m_googleLoginCallBack="";private String client_id = "";private Activity m_activity=null;private static final int SIGN_LOGIN = 901;private GoogleSignInClient mGoogleSignInClient;private static GoogleUtils g_Instace = null;public static GoogleUtils getInstance() {if (null == g_Instace) {g_Instace = new GoogleUtils();}return g_Instace;}public Intent getGoogleIntent() {Intent signInInten;signInInten = mGoogleSignInClient.getSignInIntent();return signInInten;}public void onActivityResult(int requestCode, int resultCode, Intent data) {if(mGoogleSignInClient != null) {switch (requestCode) {case SIGN_LOGIN:Log.d(m_actTag,"setActivityResultGoogle");Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);if (task == null) {Log.d(m_actTag,"task:null");}try {GoogleSignInAccount account = task.getResult(ApiException.class);Log.d(m_actTag,"Id:" + account.getId() + "|Email:" + account.getEmail() + "|IdToken:" + account.getIdToken());String personName = account.getDisplayName();String personGivenName = account.getGivenName();String personFamilyName = account.getFamilyName();String personEmail = account.getEmail();String personId = account.getId();String token = account.getIdToken();Uri personPhoto = account.getPhotoUrl();Map<String,String> map = new HashMap<String, String>();map.put("result", "22");map.put("info", "google info success");map.put("id", personId);map.put("token", token);map.put("Email", personEmail);map.put("firstName", personGivenName);map.put("lastName", personFamilyName);map.put("userName", personName);Native.nativeToLogic(m_googleLoginCallBack,map);} catch (ApiException e) {e.printStackTrace();Log.d(m_actTag,"ApiException:" + e.getMessage());Log.e(m_actTag, "google login error:" + e.getMessage());Map<String,String> map = new HashMap<String, String>();map.put("result", "21");map.put("info", e.getMessage());Log.d(m_actTag,"error!!!!!");Native.nativeToLogic(m_googleLoginCallBack,map);}break;}}}public void loginGoogle(final String callback){m_googleLoginCallBack = callback;m_activity.startActivityForResult(getGoogleIntent(), SIGN_LOGIN);}public void logOutGoogle() {if(mGoogleSignInClient != null) {mGoogleSignInClient.signOut();}}public void initSDK(final Activity activity){m_activity = activity;client_id = activity.getResources().getString(R.string.google_client_id);if (mGoogleSignInClient == null) {GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN).requestEmail().requestIdToken(client_id).build();mGoogleSignInClient = GoogleSignIn.getClient(m_activity, gso);}} }

(4)、res/values/strings.xml 中配置 Web客戶端ID

<string name="google_client_id">200615557981-4mgn8ufi9chaj6gm135aaq6oul01mbph.apps.googleusercontent.com</string>

(5)、java 封裝 google sdk 初始化,處理返回,并提供登錄、登出接口 供 js、ts層調用

public class AppActivity extends Cocos2dxActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);GoogleUtils.getInstance().initSDK(this);} @Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {GoogleUtils.getInstance().onActivityResult(requestCode, resultCode, data);super.onActivityResult(requestCode, resultCode, data);}public static void loginGoogle(final String callback) {GoogleUtils.getInstance().loginGoogle(callback);}public static void logOutGoogle() {GoogleUtils.getInstance().logOutGoogle();}}

(6)、ts 或js 代碼封裝 java 接口

export class Native {public static loginGoogle(func: any,funcParams:string): void {if (cc.sys.isNative) {let cbKey: string = "loginGoogle"window[this.CallBackKey][cbKey] = funclet ret = 0;if (cc.sys.os == cc.sys.OS_ANDROID) {ret = jsb.reflection.callStaticMethod("org/cocos2dx/javascript/AppActivity", "loginGoogle", "(Ljava/lang/String;)V", this._callBackPrefix + cbKey + funcParams);}else if (cc.sys.os == cc.sys.OS_IOS) {ret = jsb.reflection.callStaticMethod(Native.ApiIOS, "loginGoogle:", this._callBackPrefix + cbKey);}}}//登出FBpublic static logOutGoogle() {if (cc.sys.isNative) {console.log("logOutGoogle!!!!")if (cc.sys.os == cc.sys.OS_ANDROID) {jsb.reflection.callStaticMethod("org/cocos2dx/javascript/AppActivity", "logOutGoogle", "()V");}else if (cc.sys.os == cc.sys.OS_IOS) {jsb.reflection.callStaticMethod(Native.ApiIOS, "logOutGoogle", null);}}}...... }

(7)、ts 或js 代碼調用google 登錄接口

loginGoogle(){let self = this;Native.loginGoogle((ret: any) => {self.googleSdkBack(ret)},"(%s)")}//請求SDK返回googleSdkBack(backInfo:any){console.log("googleSdkBack:",JSON.stringify(backInfo))if(backInfo){if(backInfo.result == "21"){//GG登錄失敗}else if(backInfo.result == "22"){//GG登錄成功并返回用戶數據}}}

注意事項:

1、需要使用在同意屏幕時填寫的 google 測試賬號進行登錄測試。

2、需要使用Web客戶端ID才能成功。

總結

以上是生活随笔為你收集整理的Cocos Creator Android 平台 Google 原生登录的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。