Google登录最新版本接入,保姆级对接流程

1、谷歌最新登录接入官方文档地址:https://developer.android.com/identity/sign-in/credential-manager-siwg?hl=zh-cn

2、配置远程依赖库:

implementation "androidx.credentials:credentials:1.2.2"
implementation "androidx.credentials:credentials-play-services-auth:1.2.2"
implementation "com.google.android.libraries.identity.googleid:googleid:<latest version>"

3、安卓x的appCompat库也是必须的,但是文档上面没有讲,看你自己用那个版本吧,我这边用的下方这个:

implementation 'androidx.appcompat:appcompat:1.3.1'

4、去Google API 控制台创建项目:

https://console.cloud.google.com/apis/credentials?invt=Ablu1Q&project=global-doodad-442105-r8

5、点下方这个位置创建:

5.1、继续创建

5.2、点击左侧红圈部分:

5.3、找到刚才创建的项目:

5.4、选择外部,然后创建:

5.5、添加应用名称,邮箱,以及应用icon:

5.6、开发者联系信息写一下,如果公司有自己的用户隐私协议网址也可以在这里填上,我这里测试的就没写了:

5.7、点击保存并继续,点击下方:

5.8、点击保存:

5.9、点击左侧客户端,创建客户端:

5.10、填写应用名称,包名,以及签名证书指纹(不知道怎么获取签名指纹的注意填写那里有提示)

5.11、点击保存,会生成一个ID:

5.12、然后用同样的流程创建一个web应用:

5.13、最终结果如下:

5.14、注意点

不管是授权登录还是一键登录都需要使用Web客户端ID才能成功,因为使用 Android 客户端ID测试(失败),推荐用使用Web方式登入。官方文档在官方文档说明了 必须要用Web客户端ID 才可以

应用上线后(可以先提交一个内部测试应用,不用官方审核)在google play中获取Google生成的SHA-1 再根据这个值在Google Cloud 中创建一个Android Aouth客户端ID 不然google会一直返回 10。

6、接入登录:

6.1、登录初始化,setServerClientId就是上方创建应用的ID:

android.os.CancellationSignal cancellationSignal;
GetCredentialRequest request;
GetGoogleIdOption googleldOption;
CredentialManager credentialManager;
private void initLogin(){
    googleldOption = new GetGoogleIdOption.Builder()
            //将 setFilterByAuthorizedAccounts 参数设置为 true。如果没有可用的凭据
            //,请再次调用该 API 并将 setFilterByAuthorizedAccounts 设置为 false
            .setFilterByAuthorizedAccounts(false)
            .setAutoSelectEnabled(true)
            .setServerClientId(XyConfig.qudao_appid)
            .build();

    request = new GetCredentialRequest.Builder()
            .addCredentialOption(googleldOption)
            .build();

    cancellationSignal = new android.os.CancellationSignal();
    cancellationSignal.setOnCancelListener(new CancellationSignal.OnCancelListener() {
        @Override
        public void onCancel() {

        }
    });
}

6.2、拉起登录,callback是自定义的可以忽略:

public void login(Activity mActivity, UserListener mUserListener, YZYCallback callback) {
    credentialManager = CredentialManager.Companion.create(mActivity);
    credentialManager.getCredentialAsync(
            mActivity,
            request,
            cancellationSignal,
            Executors.newSingleThreadExecutor(),
            new CredentialManagerCallback<GetCredentialResponse, GetCredentialException>() {

                @Override
                public void onResult(GetCredentialResponse result) {
                    handleSignIn(result,mUserListener,callback);
                }

                @Override
                public void onError(GetCredentialException e) {
                    LogUtil.e("Error getting(or preparing)credential:" + e);

                }
            });

}

6.3:登录返回数据解析:

private void handleSignIn(GetCredentialResponse result,UserListener mUserListener,YZYCallback callback) {

    Credential credential = result.getCredential();
    if (credential instanceof PublicKeyCredential) {
        String responseJson = ((PublicKeyCredential) credential).getAuthenticationResponseJson();

    } else if (credential instanceof PasswordCredential) {
        String userName = ((PasswordCredential) credential).getId();
        String password = ((PasswordCredential) credential).getPassword();

    } else if (credential instanceof CustomCredential) {

        if (GoogleIdTokenCredential.TYPE_GOOGLE_ID_TOKEN_CREDENTIAL.equals(credential.getType())) {
             callback.onSuccess();
            GoogleIdTokenCredential googleIdTokenCredential = GoogleIdTokenCredential.Companion.createFrom(((CustomCredential) credential).getData());
            String idToken = googleIdTokenCredential.getIdToken();
            try {
                JSONObject googleloginInfoReturn = new JSONObject();
                uid=googleIdTokenCredential.getId();
                String name=googleIdTokenCredential.getDisplayName();

                googleloginInfoReturn.put("id",uid);
                googleloginInfoReturn.put("name", name);
                googleloginInfoReturn.put("phto", googleIdTokenCredential.getProfilePictureUri());
                googleloginInfoReturn.put("token", idToken);
                LogUtil.e("google handleSignIn googleloginInfoReturn:"+googleloginInfoReturn.toString());
                XYUserInfo userInfo = new com.xy.mid_common.bean.XYUserInfo(uid, name, "",
                        "", idToken, "");
                mUserListener.loginSuccess(userInfo);
            } catch (JSONException e) {
                e.printStackTrace();
            }
        } else {
            LogUtil.e("google Unexpected type of credentia 111");
        }
    } else {
        LogUtil.e("google Unexpected type of credentia 222");
    }
}

7、登出:

public void loginOut(){
    ClearCredentialStateRequest clearCredentialStateRequest= new ClearCredentialStateRequest();
    android.os.CancellationSignal cancellationSignal=new CancellationSignal();
    cancellationSignal.setOnCancelListener(new CancellationSignal.OnCancelListener() {
        @Override
        public void onCancel() {
            LogUtil.e("GoogleLoginOut onCancel");
        }
    });

    if(credentialManager!=null) {
        credentialManager.clearCredentialStateAsync(
                clearCredentialStateRequest,
                cancellationSignal,
                Executors.newSingleThreadExecutor(),
                new CredentialManagerCallback<Void, ClearCredentialException>() {

                    @Override
                    public void onResult(Void result) {
                        LogUtil.e("GoogleLoginOut onSuccess");

                    }

                    @Override
                    public void onError(ClearCredentialException e) {


                    }
                });
    }

}

8. 大家后面有 SDK问题可以加QQ群: 623257187,大家相互讨论,相互进步

### 微信公众号 DeepSeek 集成保姆教程 #### 准备工作 为了将DeepSeek集成到微信公众号,需先完成准备工作。这包括获取必要的API密钥以及设置开发环境。确保已注册并登录至Hugging Face平台,并下载所需的模型文件[^1]。 #### 创建微信公众平台应用 前往微信公众平台官网创建一个新的小程序或订阅号服务端口。记录下AppID和AppSecret以便后续配置使用。 #### 获取访问令牌 通过POST请求向`https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET`发送HTTP GET请求来获得access_token。此token用于验证身份,在调用微信接口时必需提供它作为参数之一。 #### 设置服务器URL 进入公众账号后台管理页面中的“开发者中心”,填写服务器IP白名单及消息加密模式下的Token、EncodingAESKey等信息。同时指定回调URL为接收来自用户的事件推送地址。 #### 实现自然语言处理功能 利用Python Flask框架搭建简易Web Server监听特定路径上的GET/POST请求: ```python from flask import Flask, request, jsonify import requests app = Flask(__name__) @app.route('/wechat', methods=['GET','POST']) def wechat(): if request.method == 'GET': echostr = request.args.get('echostr') return echostr elif request.method == 'POST': xml_data = request.data # 解析XML数据包... response_msg = process_message(xml_data) return response_msg if __name__ == "__main__": app.run(port=80) ``` 当接收到用户的消息后,可以将其转发给部署好的DeepSeek API进行语义理解分析: ```python def process_message(msg_xml): msg_content = extract_text_from_xml(msg_xml) deepseek_url = "https://huggingface.co/deepseek-ai/DeepSeek-V3" payload = {"text":msg_content} headers={"Content-Type":"application/json"} r = requests.post(deepseek_url,json=payload,headers=headers).json() reply = format_reply(r['response']) return generate_xml_response(reply) # 辅助函数定义省略... ``` 以上即完成了基本的功能实现流程描述。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值