You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android端如何为Google Chat API请求添加授权头?

解决Google Chat API调用401未认证错误

核心问题

你的请求未携带OAuth 2.0 Access Token,Google Chat API要求必须在请求头中添加Authorization: Bearer {access_token},这是返回401错误的直接原因。

修复步骤及代码示例

1. 直接在Retrofit接口中添加认证头

修改你的createSpace方法,新增@Header参数用于传递认证信息:

@FormUrlEncoded
@POST("spaces")
Call<Space> createSpace(
        @Header("Authorization") String authHeader,
        @Field("name") String name,
        @Field("spaceType") SpaceType spaceType,
        @Field("threaded") Boolean threaded,
        @Field("singleUserBotDm") Boolean singleUserBotDm,
        @Field("spaceDetails") SpaceDetails spaceDetails
);

调用接口时,将Google Sign-In获取到的token格式化为Bearer {token}传入:

// 从已登录的Google账号中获取token
String accessToken = GoogleSignIn.getLastSignedInAccount(context).getIdToken();
// 发起请求
Call<Space> call = chatService.createSpace("Bearer " + accessToken, "Space name", SpaceType.DIRECT_MESSAGE, false, true, spaceDetails);

2. 更优雅的统一处理:使用OkHttp拦截器

如果多个接口都需要认证,建议用拦截器自动给所有请求添加认证头,避免重复编写代码:

// 构建带拦截器的OkHttpClient
OkHttpClient client = new OkHttpClient.Builder()
        .addInterceptor(chain -> {
            Request originalRequest = chain.request();
            // 获取当前登录用户的Access Token
            String accessToken = GoogleSignIn.getLastSignedInAccount(context).getIdToken();
            
            // 给请求添加认证头
            Request authorizedRequest = originalRequest.newBuilder()
                    .header("Authorization", "Bearer " + accessToken)
                    .build();
            return chain.proceed(authorizedRequest);
        })
        .build();

// 初始化Retrofit时使用这个client
Retrofit retrofit = new Retrofit.Builder()
        .baseUrl("https://chat.googleapis.com/v1/")
        .client(client)
        .addConverterFactory(GsonConverterFactory.create())
        .build();

这种方式下,你的Retrofit接口无需修改,保持原有定义即可。

3. 确认Sign-In的权限范围

确保Google Sign-In初始化时,请求了Google Chat API所需的权限(scope),比如创建空间需要https://www.googleapis.com/auth/chat.create:

GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
        .requestIdToken(getString(R.string.default_web_client_id))
        .requestScopes(new Scope("https://www.googleapis.com/auth/chat.create"))
        .build();

4. 额外优化:改用JSON请求体

Google Chat API更推荐使用JSON格式传递请求参数,能避免spaceDetails对象序列化异常的问题。你可以重构接口为:

// 定义请求实体类
public class CreateSpaceRequest {
    private String name;
    private SpaceType spaceType;
    private Boolean threaded;
    private Boolean singleUserBotDm;
    private SpaceDetails spaceDetails;
    
    // 构造方法、getter/setter省略
}

// 修改Retrofit接口
@POST("spaces")
Call<Space> createSpace(@Body CreateSpaceRequest request);

内容的提问来源于stack exchange,提问作者Naufal Rajabi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 14:54:24