# 认证服务 (AGC) ## 业务介绍 华为 AppGallery Connect(简称 AGC)[认证服务](https://developer.huawei.com/consumer/cn/doc/development/AppGallery-connect-Guides/agc-auth-introduction-0000001053732605),提供了云侧服务和 SDK,可以为应用快速构建安全可靠的用户认证系统,以便应用可以对用户进行身份认证。 认证服务支持多种认证方式,并与其他 Serverless 服务紧密集成,开发者可以通过简单的规则定义来保护用户的数据安全。 ### 主要功能 使用认证服务可将以下的一种或多种认证方式集成到应用中,方便用户轻松快速地注册和登录应用。 - 自有帐号:用于支撑开发者已有的认证系统的接入,以便存量用户能够以安全的方式访问其他 Serverless 服务。 - 匿名帐号:可以支撑应用的游客访问方式。认证服务可以为游客分配用户标识,以便游客可以以安全的方式访问其他 Serverless 服务。游客后续可通过注册来转化为正式用户,并保留其原来的用户标识,以使其业务保持连贯。 - 第三方账号:通过对接第三方认证服务对用户进行身份认证。认证服务支持用户使用他们对应的帐号进行身份认证。目前支持以下几种第三方认证方式: - 华为帐号 - 华为游戏帐号 - 手机 - 邮箱 - 微信 - 微博 - QQ 以下几种海外认证方式 **仅支持海外站点**,例如数据存储位置为德国、新加坡或俄罗斯时。其中 **Google 帐号** 和 **Google Play Game 帐号** 这两种认证方式仅支持在安装了 GMS(Google Mobile Services)服务的设备上使用。 - Google - Google Play Game - Facebook - Twitter ### 工作原理 - 获取认证凭据 认证方式不同,其认证凭据的获取方式也不相同。 - 对于第三方帐号认证,认证凭据是第三方认证服务颁发的 OAuth 令牌。 - 对于匿名帐号,认证凭据是认证服务 SDK 为该应用安装实例生成的唯一标识。 - 对于自有帐号,认证凭据是开发者已有认证系统通过 Server SDK 生成 Token。 - 上报认证凭据 应用将认证凭据通过认证服务 SDK 上报给认证服务。 - 验证认证凭据 认证服务在云侧对认证凭据进行验证。 - 返回认证结果 认证服务将认证结果返回给应用。此时应用可以访问和维护该用户的基本个人资料信息(昵称、头像),也可以访问和操作其他 Serverless 服务中的受安全规则保护的数据。 ## 华为账号设置 ### 环境准备 集成APM SDK前,请确认您的应用已集成AGC SDK和AGC插件,详细步骤请参考[AppGallery Connect服务使用入门](https://developer.huawei.com/consumer/cn/doc/development/AppGallery-connect-Guides/agc-get-started)。 ### 启用服务 1. 登录[AppGallery Connect](https://developer.huawei.com/consumer/cn/service/josp/agc/index.html),单击 **我的项目** 。 2. 在项目列表中找到需要开通认证服务的项目。 3. 单击 **构建 > 认证服务** ,进入认证服务的页面。如果首次使用认证服务,请点击 **立即开通** 开通服务。 ![Images/auth/auth_1.png](Images/auth/auth_1_cn.png) 4. 单击需要启动的认证方式所在行的 **启用**。 ![Images/auth/auth_2.png](Images/auth/auth_2_cn.png) 多种认证方式在开启时需要在弹出框中配置应用所需的相关信息,相关认证方式和配置信息获取方式如下表所示。 ![Images/auth/auth_3.png](Images/auth/auth_3_cn.png) **注意** *星号标记的帐号类型仅在海外站点支持,当您选择数据存储位置为德国、新加坡或俄罗斯时可以使用这些认证方式。
认证方式 获取信息 获取方式
华为账号 App ID和APP SECRET 查看应用消息
华为游戏 游戏公钥和游戏私钥 查询游戏服务信息
微信 App ID和App Secret 微信接入指导
QQ App ID和AppKey QQ 接入指导
微博 App Key和App Secret 微博接入指导
Facebook* 应用编码和应用密钥 Facebook接入指导
Twitter* API key和API secret key Google接入指导
Google* 客户端ID和客户端密钥 Google接入指导
Google Play Games* 客户端ID和客户端密钥 Google Play Games接入指导
自有账号 签名公钥 获取JWTs
5. (可选)如果开启邮箱验证码认证,进入 **配置** 页签配置邮箱服务器相关信息。 ![Images/auth/auth_4.png](Images/auth/auth_4_cn.png) 您可以选择使用“内置SMTP”或者“自定义SMTP”。 * 使用“内置SMTP”时固定“发件人名称”为项目名称,“发件人地址”为_product_id_@mail.agconnect.link。 * 使用“自定义SMTP”时配置如下信息: * 发件人地址:邮件发送方的邮箱地址 * SMTP用户帐号和SMTP用户密码:登录发送邮件服务器所需的用户名和密码 * SMTP服务主机:提供SMTP发件服务的主机名称,例如:qq的企业发送邮件服务主机为smtp.exmail.qq.com * SMTP服务端口和SMTP安全类型:端口和安全类型存在对应关系,TLS对应465端口 ![Images/auth/auth_5.png](Images/auth/auth_5_cn.png) 6. 配置json文件 **注意:** 拷贝agconnect-services.json文件到**Assets/Plugins/Android**目录下 ![Images/auth/auth_6.png](Images/auth/auth_6.png) ## Unity项目设置 ### 设置 unity 自定义Android manifest and gradle 1. 在player setting中将平台切换到android 2. 在player setting中启动custom manifest and gradle. 以下版本是unity 2019.4 ![Images/auth/auth_7.png](Images/auth/auth_7.png) 安卓的结构在 Unity **2019.3 **版本进行了更新, manifest 和 gradle 被分到了多个文件 (Main, Launcher & Base)。 3. 设置Package name 在 **Edit -> Project Settings -> Player -> Android(icon) -> other settings -> Identification -> Package Name** 中设置Package name。 Package Name即为华为项目中应用程序的Package Name。 ![Images/auth/auth_8.png](Images/auth/auth_8.png) ### 集成认证套件 #### 1. 启用并对project gradle文件添加配置 进入 **Edit -> Project Settings -> Player -> Android(icon) -> Publishing Settings -> Build** 启用 **Custom Base Gradle Template** 并在文件中添加 AppGallery Connect plugin 和 Maven repository。路径是`Assets/Plugins/Android/baseProjectTemplate.gradle`。 如果您的Unity版本低于**2019.2(含)**,则需要在 MainGradleTemplate.gradle 中添加工具和其他配置。 1. 转到 allprojects > repositories 库,然后为AppGallery Connect SDK配置Maven存储库地址。 ``` allprojects { buildscript { repositories { ... maven { url 'https://developer.huawei.com/repo/' } ... } ... } } ``` 2. 转到 buildscript > repositories,并为AppGallery Connect SDK配置Maven存储库地址。 ``` allprojects { buildscript { repositories { ... maven { url 'https://developer.huawei.com/repo/' } ... } ... } } ``` 3. 转到 buildscript > dependencies,并配置AppGallery Connect插件地址。 ``` buildscript { dependencies { classpath 'com.huawei.agconnect:agcp:1.6.1.300' } } ``` #### 2. 启用并对launcher gradle文件进行以下配置 进入 **Edit -> Project Settings -> Player -> Android(icon) -> Publishing Settings -> Build** 启用 **Custom Launcher Gradle Template** 并在 `launcherTemplate.gradle` 中添加依赖。路径为 `Assets/Plugins/Android/LauncherTemplate.gradle`。 如果您的Unity版本低于**2019.2(含)**, 则需要在 MainGradleTemplate.gradle中添加配置。 1. 在文件头中应用插件:`'com.huawei.agconnect' `: ``` ... apply plugin: 'com.huawei.agconnect' ``` 2. 配置构建依赖 ``` dependencies { ... implementation 'com.huawei.agconnect:agconnect-core:1.4.2.301' implementation 'com.huawei.agconnect:agconnect-credential:1.6.1.300' implementation 'com.huawei.agconnect:agconnect-auth:1.6.1.300' ... } ``` #### 3. 启用并对MainTemplate gradle文件进行以下配置 进入 **Edit -> Project Settings -> Player -> Android(icon) -> Publishing Settings -> Build** 启用 **Custom Main Gradle Template** 并在 `mainTemplate.gradle`中添加依赖。路径为 `Assets/Plugins/Android/mainTemplate.gradle`。 如果您的Unity版本低于**2019.2(含)**, 则需要在 MainGradleTemplate.gradle中添加配置。 1. 在文件头中应用插件:`'com.huawei.agconnect' `: ``` ... apply plugin: 'com.huawei.agconnect' **APPLY_PLUGINS** ``` 2. 配置依赖 ``` dependencies { ... implementation 'com.huawei.agconnect:agconnect-credential:1.6.1.300' implementation 'com.huawei.agconnect:agconnect-auth:1.6.1.300' ... } ``` #### 4. 启用gradle属性 进入 **Edit -> Project Settings -> Player -> Android(icon) -> Publishing Settings -> Build** 启用 **Custom Gradle Properties Template** 并在 `gradleTemplate.gradle`中添加依赖. 路径为`Assets/Plugins/Android/gradleTemplate.gradle`. 添加 ``` android.useAndroidX=true android.enableJetifier=true ``` ## SDK集成开发 ### 集成第三方登录 #### 1. 扩展UnityActivity Java代码 如果您使用第三方登录,则应该遵循手册[扩展UnityActivity Java代码](https://docs.unity3d.com/cn/current/Manual/AndroidUnityPlayerActivity.html),编写一个扩展UnityPlayerActivity的Java类。 1. 导入com.unity3d.player.UnityPlayerActivity,android.content.Intent, android.os.Bundle,androidx.annotation.Nullable 和 LoginManager服务 ``` ... import android.content.Intent; import com.hw.unity.Agc.Auth.ThirdPartyLogin.LoginManager; import com.unity3d.player.UnityPlayerActivity; import android.os.Bundle; import androidx.annotation.Nullable; ... ``` 2. 在onCreate函数中添加我们的登录服务函数LoginManager.getInstance().initialize(this),并在onActivityResult函数中添加函数LoginManager.getInstance().onActivityResult(requestCode,resultCode,data) ``` protected void onCreate( Bundle savedInstanceState) { ... LoginManager.getInstance().initialize(this); ... } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { ... LoginManager.getInstance().onActivityResult(requestCode, resultCode, data); ... } ``` 以整个类为例 ``` package xxxxx; import android.content.Intent; import android.os.Bundle; import androidx.annotation.Nullable; import com.hw.unity.Agc.Auth.ThirdPartyLogin.LoginManager; import com.unity3d.player.UnityPlayerActivity; public class xxxxxx extends UnityPlayerActivity { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { ... LoginManager.getInstance().initialize(this); ... } @Override protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { ... LoginManager.getInstance().onActivityResult(requestCode, resultCode, data); ... } } ``` 3. 将Java文件放入 `Assets/Plugins/Android`目录下 #### 2. 修改AndroidManifest.xml 1. 首先您需要启用`AndroidManifest.xml` 进入 **Edit -> Project Settings -> Player -> Android(icon) -> Publishing Settings -> Build**,启用 **Custom Main Manifest** ,文件在 `Assets/Plugins/Android/AndroidManifest.xml`路径下 2. 修改Activity名称,您应该将com.unity3d.player.UnityPlayerActivity修改为您的Activity(您在[扩展UnityActivity Java代码](#heading=h.igtj2l4qcpp9)中创建的Java文件) ``` ``` 3. 添加INTERNET用户权限 ``` ... ``` #### 3. 第三方集成 如果要启用第三方登录,则首先需要[AppGallery Connect](https://developer.huawei.com/consumer/en/service/josp/agc/index.html),启用提供程序并输入APP ID和APP Secret。 ![Images/auth/auth_9.png](Images/auth/auth_9.png) - **华为账号** 请参阅[AppGallery Connect中的“配置应用程序信息”](https://developer.huawei.com/consumer/en/doc/development/HMSCore-Guides/config-agc-0000001050196065),[集成HMS Core SDK](https://developer.huawei.com/consumer/en/doc/development/HMSCore-Guides/integrate-as-sdk-0000001050435953),在`MainTemplate.gradle`中配置有关{version}的构建依赖项,您可以在AppGallery Connect中查找文档“[配置应用程序信息](https://developer.huawei.com/consumer/en/doc/development/HMSCore-Guides/config-agc-0000001050196065)”。 ``` dependencies { ... implementation 'com.huawei.hms:hwid:{version}' implementation 'com.huawei.hms:game:{version}' ... } ``` - **华为GameCentre帐户** 请参阅[AppGallery Connect中的“配置应用程序信息”](https://developer.huawei.com/consumer/en/doc/development/HMSCore-Guides/config-agc-0000001050196065),[集成HMS Core SDK](https://developer.huawei.com/consumer/en/doc/development/HMSCore-Guides/integrate-as-sdk-0000001050435953),在`MainTemplate.gradle`中配置有关{version}的构建依赖项,您可以在AppGallery Connect中查找文档“[配置应用程序信息](https://developer.huawei.com/consumer/en/doc/development/HMSCore-Guides/config-agc-0000001050196065)”。 ``` dependencies { ... implementation 'com.huawei.hms:hwid:{version}' implementation 'com.huawei.hms:game:{version}' ... } ``` - 微信 请参照[微信文档](https://developers.weixin.qq.com/doc/oplatform/Mobile_App/Resource_Center_Homepage.html?action=dir_list&t=resource%2Fres_list)。 1) 在 `MainTemplate.gradle` 中配置构建依赖 ``` dependencies { ... api 'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:+' ... } ``` 添加如下依赖: ``` dependencies { ... implementation 'com.squareup.retrofit2:retrofit:2.9.0' implementation 'com.squareup.retrofit2:converter-gson:2.1.0' ... } ``` 2) 在Asset文件夹下创建一个 **Resources** 文件夹 (文件夹名必须为 **Resources**),然后打开 **HuaweiService->Auth->WxApi->WXEntryActivity.txt** ,将这个文件拷贝到 **Resources** 文件夹下.。它将被自动打包到您的Android项目中。 3) 在 `AndroidManifest.xml`中添加 `WXEntryActivity`,package name 和 **Edit -> Project Settings -> Player -> Android(icon) -> other settings -> Identification -> Package Name** 一致 ``` ``` - Facebook 1)请参照[Facebook文档](https://developers.facebook.com/docs/facebook-login/android),在 `MainTemplate.gradle` 中配置构建依赖。 ``` dependencies { ... implementation 'com.facebook.android:facebook-android-sdk:4.20.0' ... } ``` 2)在 `AndroidManifest.xml`中添加`meta-data`,将"Your Facebook APP id"和"Your_Facebook_Login_protocol_scheme" 替换为您的app_id和protocol scheme。 ``` ``` - Twitter 请参照[Twitter文档](https://developer.huawei.com/consumer/cn/doc/development/AppGallery-connect-Guides/agc-auth-android-twitter-0000001053492677),在 `MainTemplate.gradle` 中配置构建依赖。 ``` dependencies { ... implementation 'com.twitter.sdk.android:twitter-core:3.3.0' ... } ``` - 微博 请参照[微博文档](https://developer.huawei.com/consumer/cn/doc/development/AppGallery-connect-Guides/agc-auth-android-weibo-0000001053732641),下载SDK,并将此SDK放入 `Assets/Plugins/Android`目录。添加如下配置到 `baseProjectTmeplate.gradle`文件。 ``` buildscript { repositories {**ARTIFACTORYREPOSITORY** google() jcenter() ... maven { url "https://dl.bintray.com/thelasterstar/maven/" } } ``` - QQ 请参照[QQ文档](https://developer.huawei.com/consumer/cn/doc/development/AppGallery-connect-Guides/agc-auth-android-qq-0000001053852632),下载SDK,并将此SDK放入 `Assets/Plugins/Android`目录。添加如下Activity到 `AndroidManifest.xml`文件。 ``` ... ... ``` - Google 请参照[Google文档](https://developer.huawei.com/consumer/cn/doc/development/AppGallery-connect-Guides/agc-auth-android-google-0000001053372648),在 `MainTemplate.gradle` 中配置构建依赖。 ``` dependencies { ... implementation 'com.google.android.gms:play-services-auth:19.0.0' ... } ``` - Google Play game 1)请参照[Google Play Game文档](https://developer.huawei.com/consumer/cn/doc/development/AppGallery-connect-Guides/agc-auth-android-googlegame-0000001053253973)。并在 `MainTemplate.gradle` 中配置构建依赖项 ``` dependencies { ... implementation 'com.google.android.gms:play-services-games:17.0.0' ... } ``` 2)在 `AndroidManifest.xml` 中添加以下Activity ``` ``` 3)在 `HuaweiService/Android/res/Auth/strings.xml` 中将Google游戏应用ID修改为您自己的ID ``` Replace me Replace me Replace me Replace me ``` 注意:要登录Google游戏,您必须在 `strings.xml` 中修改 `google_game_app_id`,请勿直接在`AndroidManifest.xml`中输入您的游戏应用ID,会引发error。 #### 4. 登陆您的Android App 转到 **Edit->project settings->player->Android(icon)->Publishing Settings**,自定义您自己的密钥库,并确保您的Android应用密钥库与第三方平台标志相同。 ### 如何从第三方获取Access Token信息 **注意**:您可以直接使用 `HuaweiOnsuccessListener` 和 `HuaweiOnFailureListener` 类,或者在需要使用回调函数时编写继承 `OnSuccessListener` 或 `OnFailureListener` 的新类。 #### 华为账户 1. 使用HUAWEI帐户启动登录,使用`LoginManager.getInstance().startHWID(OnSuccessListener sucessCallback,OnFailureListener failCallback)` 获取Token访问Json 2. 然后使用 `HWIDGetBack obj=JsonAuthorizeData.FromJson()` 解析Json以获取Token ``` LoginManager.getInstance().startHWID(new HuaweiOnsuccessListener((Token) =>{ HWIDGetBack obj = JsonAuthorizeData.FromJson(Token.ToString()); AGConnectAuthCredential credential =HwIdAuthProvider.credentialWithToken(obj.Token); AGConnectAuth.getInstance().signIn(credential) .addOnSuccessListener(new HuaweiOnsuccessListener((signresult) => { ... })) .addOnFailureListener(new HuaweiOnFailureListener((exception) => { ... })); }), new HuaweiOnFailureListener((exception)=> { ... })); ``` #### 华为游戏账户 1. 使用华为帐号登录,使用`LoginManager.getInstance().startHWGame(OnSuccessListener sucessCallback,OnFailureListener failCallback)` 以获取Token访问Json 2. 然后使用 `HWGameGetBack player=JsonAuthorizeData.FromJson()` 解析Json以获取玩家信息。 ``` LoginManager.getInstance().startHWGame(new HuaweiOnsuccessListener((Token) =>{ HWGameGetBack player=JsonAuthorizeData.FromJson(Token ); AGConnectAuthCredential credential = new HWGameAuthProvider.Builder() .setPlayerSign(player.PlayerSign) .setPlayerId(player.PlayerId) .setDisplayName(player.DisplayName) .setImageUrl(player.ImageUrl) .setPlayerLevel(player.PlayerLevel) .setSignTs(player.SignTs) .build(); AGConnectAuth.getInstance().signIn(credential) .addOnSuccessListener(new HuaweiOnsuccessListener((signresult) => { ... })).addOnFailureListener(new HuaweiOnFailureListener((exception) => { ... })); }), new HuaweiOnFailureListener((exception)=> { ... })); ``` #### 微信 1. 使用微信登录,使用LoginManager.getInstance().startWechatLogin(string APP_ID,string APP_SECRET,OnSuccessListener successCallback,OnFailureListener failCallback),然后获取Token和openID Json, 2. 使用 `WechatGetBack obj= JsonAuthorizeData.FromJson()` 解析Json以获取令牌和openID ``` LoginManager.getInstance().startWechatLogin("Your APP ID", "Your APP Secret", new HuaweiOnsuccessListener((Token) => { WechatGetBack obj=JsonAuthorizeData.FromJson(Token.ToString()); AGConnectAuthCredential credential = WeixinAuthProvider.credentialWithToken(obj.Token, obj.OpenId); AGConnectAuth.getInstance().signIn(credential) .addOnSuccessListener(new HuaweiOnsuccessListener((signresult) => { ... })).addOnFailureListener(new HuaweiOnFailureListener((exception) => { ... })); }), new HuaweiOnFailureListener((exception)=> { ... })); ``` #### Facebook **重要更新:** Facebook 更新了 webview 登录政策 * Facebook 登录将不再支持用于验证用户身份的 Android 嵌入式浏览器 (WebViews)。 配置调整请参考以下文档! * https://developers.facebook.com/docs/facebook-login/android/deprecating-webviews 1. 使用Facebook帐户登录,使用LoginManager.getInstance().startFacebook(string APP_ID,OnSuccessListener successCallback,OnFailureListener failCallback)获取访问令牌Json 2. 使用 FacebookGetBack obj=JsonAuthorizeData.FromJson(JsonObject.ToString()) 解析Token ``` LoginManager.getInstance().startFacebook("Your App Id",new HuaweiOnsuccessListener((JsonObject) => { FacebookGetBack obj=JsonAuthorizeData.FromJson(JsonObject.ToString()); AGConnectAuthCredential credential = FacebookAuthProvider.credentialWithToken(obj.Token); AGConnectAuth.getInstance().signIn(credential) .addOnSuccessListener(new HuaweiOnsuccessListener((signresult) => { ... })).addOnFailureListener(new HuaweiOnFailureListener((exception) => { ... })); }), new HuaweiOnFailureListener((exception)=> { ... })); ``` #### Twitter 1. 使用Twitter帐户登录,使用LoginManager.getInstance().startTwitter(string App_id,string App_secret,OnSuccessListener successCallback,OnFailureListener failCallback)获取Token访问Json, 2. 用 `TwitterGetBack obj=JsonAuthorizeData.FromJson(JsonObject.ToString())` 解析Json ``` LoginManager.getInstance().startTwitter("Your APP ID", "Your APP secret", new HuaweiOnsuccessListener((Token) => { TwitterGetBack obj=JsonAuthorizeData.FromJson(Token.ToString()); AGConnectAuthCredential credential = TwitterAuthProvider.credentialWithToken(obj.Token, obj.Secret); AGConnectAuth.getInstance().signIn(credential) .addOnSuccessListener(new HuaweiOnsuccessListener((signresult) => { ... })).addOnFailureListener(new HuaweiOnFailureListener((exception) => { ... })); }), new HuaweiOnFailureListener((exception)=> { ... })); ``` #### 微博 1. 使用Weibo帐户登录,使用LoginManager.getInstance().startWeibo(string APP_ID,OnSuccessListener successCallback,OnFailureListener failCallback)获取Token和Uid Json, 2. 使用 WeiboGetBack obj=JsonAuthorizeData.FromJson(JsonObject.ToString()) 解析Json ``` LoginManager.getInstance().startWeibo("Your APP ID", new HuaweiOnsuccessListener((JsonObject) => { WeiboGetBack obj=JsonAuthorizeData.FromJson(JsonObject.ToString()); AGConnectAuthCredential credential = WeiboAuthProvider.credentialWithToken(obj.Token, obj.Uid); AGConnectAuth.getInstance().signIn(credential) .addOnSuccessListener(new HuaweiOnsuccessListener((signresult) => { ... })).addOnFailureListener(new HuaweiOnFailureListener((exception) => { ... })); }), new HuaweiOnFailureListener((exception)=> { ... })); ``` #### QQ 1. 使用QQ帐户登录,使用 LoginManager.getInstance().startQQ(string app_id,OnSuccessListener successCallback,OnFailureListener failCallback)获取Token和OpenId Json 2. QQGetBack QQGetBack obj=JsonAuthorizeData.FromJson(Token.ToString()) 以解析Json ``` LoginManager.getInstance().startQQ("Your APP ID", new HuaweiOnsuccessListener((JsonObject) => { QQGetBack obj=JsonAuthorizeData.FromJson(JsonObject.ToString()); AGConnectAuthCredential credential = QQAuthProvider.credentialWithToken(obj.Token, obj.OpenId); AGConnectAuth.getInstance().signIn(credential) .addOnSuccessListener(new HuaweiOnsuccessListener((signresult) => { ... })).addOnFailureListener(new HuaweiOnFailureListener((exception) => { ... })); }), new HuaweiOnFailureListener((exception)=> { ... })); ``` #### 谷歌 1. 使用Google帐户登录,使用LoginManager.getInstance().startGoogle(string client_id,OnSuccessListener successCallback,OnFailureListener failCallback)获取Token Json 2. GoogleGetBack GoogleGetBack obj=JsonAuthorizeData.FromJson(string json) 以解析json ``` LoginManager.getInstance().startGoogle("Your client id", new HuaweiOnsuccessListener((JsonObject) => { GoogleGetBack obj=JsonAuthorizeData.FromJson(JsonObject.ToString()); AGConnectAuthCredential credential = GoogleAuthProvider.credentialWithToken(obj.Token); AGConnectAuth.getInstance().signIn(credential) .addOnSuccessListener(new HuaweiOnsuccessListener((signresult) => { })).addOnFailureListener(new HuaweiOnFailureListener((exception) => { })); }), new HuaweiOnFailureListener((exception)=> { })); ``` #### Google Play game 1. 使用Google Play游戏帐户登录,使用LoginManager.getInstance().startGooglePlay(string client_id,OnSuccessListener successCallback,OnFailureListener failCallback)获取Token Json 2. GooglePlayGetBack GooglePlayGetBack obj=JsonAuthorizeData.FromJson(string json) 以解析json ``` LoginManager.getInstance().startGooglePlay("Your client id", new HuaweiOnsuccessListener((JsonObject) => { GooglePlayGetBack obj=JsonAuthorizeData.FromJson(JsonObject.ToString()); AGConnectAuthCredential credential = GoogleAuthProvider.credentialWithToken(obj.Token); AGConnectAuth.getInstance().signIn(credential) .addOnSuccessListener(new HuaweiOnsuccessListener((signresult) => { ... })).addOnFailureListener(new HuaweiOnFailureListener((exception) => { ... })); }), new HuaweiOnFailureListener((exception)=> { })); ``` ### 演示文件 注意:验证演示代码在HuaweiServiceDemo-> HuaweiAuthDemo中 #### 1. 导入TMP 如果使用 AgcUnityAuth.unity demo,请单击 **Import TMP Essentials**。 ![Images/auth/auth_10.png](Images/auth/auth_10.png) #### 2. 添加agconnect-services.json 从AppGallery Connect下载 `agconnect-services.json` 并将其放到 `Assets/Plugins/Android` 文件夹中(替换原始文件)。 #### 3. 更换为您自己的ID 修改 `HuaweiService/Android/res/Auth/strings.xml`,请将 `google_game_app_id`,`facebook_app_id`,`fb_login_protocol_scheme`,`tecent_app_id`替换为您自己的ID。 ``` Replace me Replace me Replace me Replace me ``` #### 4. 修改您的包名 确保您的软件包名称与[AppGallery Connect](https://developer.huawei.com/consumer/en/service/josp/agc/index.html)和其他第三方开发者平台中的名称相同(**Edit -> Project Settings -> Player -> Android(icon) -> other settings -> Identification -> Package Name**, 包名是华为项目中的应用程序的包名。) ![Images/auth/auth_11.png](Images/auth/auth_11.png) #### 5. 在演示中替换App ID和App Secret 转到 `HuaweiAuthDemo-> panel-> DetailLogin.cs`,将您的Appid和AppSecret替换为所需的第三方登录名。(替换字符串“ Replace me”) #### 6. 在AndroidManifest.xml中修改Activity名称 如果使用微信登录,请修改`AndroidManifest.xml`(`plugins/Android/AndroidManifest.xml`),将 "Your_Package_name"替换为您自己的Package名称。 ![Images/auth/auth_12.png](Images/auth/auth_12.png) #### 7. 生成 JWToken 如果在演示中使用“自助登录”,则首先需要生成JWT Token(如果使用我们的生成工具,Token的有效时间为48小时),或者可以由您自己的认证服务器生成JWT。 1. 请参阅[下载身份验证凭据](https://developer.huawei.com/consumer/cn/doc/development/AppGallery-connect-Guides/agc-get-started-server#initsdk),在[AppGallery Connect](https://developer.huawei.com/consumer/cn/service/josp/agc/index.html)中启用服务并下载agc-apiclient凭据文件。 2. 我们的工具在HuaweiServiceDemo-> HuaweiAuthDemo-> GenJWTokenGradle.zip中,解压缩,进入该目录运行命令 `./gradlew run--args ='Your_Credential_file_path Need_Generate _RSA_Pair Your_user_id Your_display_name'` **注意**:第二个参数(1表示需要生成新的RSA密钥对,0表示不需要生成新的RSA密钥对) **例如**:`./gradlew run --args ='/ Users / XXX / Desktop / agc-apiclient-507787480892715392-6901174904591909948.json 1 123321 zzz'` 3. 将公钥复制到您的 [AppGallery Connect](https://developer.huawei.com/consumer/en/service/josp/agc/index.html),然后转到HuaweiServiceDemo-> HuaweiAuthDemo-> panel-> DetailLogin.cs,将JWT Token复制到startSelf_own Token。 #### 8. 登陆您的Android APP 转到 **Edit->project settings->player->Android(icon)->Publishing Settings**,自定义您自己的密钥库,并确保您的Android应用密钥库与第三方平台标志相同。