安卓Java:2+;谷歌api认证与电子邮件和密码提供404

安卓Java:2+;谷歌api认证与电子邮件和密码提供404,java,android,google-cloud-firestore,google-api,retrofit2,Java,Android,Google Cloud Firestore,Google Api,Retrofit2,我已经用Firestore实现了auth,它工作正常,现在通过Google API重做,并获得http状态“404”和空消息: D/RESPONSE FIREBASE: Response{protocol=h2, code=404, message=, url=https://identitytoolkit.googleapis.com/v1/accounts/signInWithPassword?key=000080511101} 网络服务: public class NetworkServ

我已经用Firestore实现了auth,它工作正常,现在通过Google API重做,并获得http状态“404”和空消息:

D/RESPONSE FIREBASE: Response{protocol=h2, code=404, message=, url=https://identitytoolkit.googleapis.com/v1/accounts/signInWithPassword?key=000080511101}
网络服务:

public class NetworkService {
    private static NetworkService instance;
    private static final String BASE_URL
        = "https://identitytoolkit.googleapis.com/v1/";
    private Retrofit retrofit;

    private NetworkService() {
        retrofit = new Retrofit.Builder()
            .baseUrl(BASE_URL)
            .addConverterFactory(GsonConverterFactory.create())
            .build();
    }

    public static NetworkService getInstance() {
        if (instance == null) {
            instance = new NetworkService();
        }
        return instance;
    }

    public PlaceHolderApi getJsonApi() {
        return retrofit.create(PlaceHolderApi.class);
    }
}
原料药

公共接口占位符API{
@FormUrlEncoded
@POST(“帐户/登录密码”)
通过电子邮件呼叫登录(
@查询(“键”)字符串键,
@字段(“电子邮件”)字符串电子邮件,
@字段(“密码”)字符串密码,
@字段(“returnSecureToken”)布尔returnSecureToken
);
}

用法:

    NetworkService.getInstance()
        .getJsonApi().loginWithEmail("000080511101", email, password, true)
        .enqueue(new Callback<Transaction.Result>() {
            @Override
            public void onResponse(Call<Transaction.Result> call, Response<Transaction.Result> response) {
                Log.d("RESPONSE FIREBASE", response.toString());
                Log.d("RESPONSE MESSAGE", response.message());
            }

            @Override
            public void onFailure(Call<Transaction.Result> call, Throwable t) {
                t.printStackTrace();
            }
        });
NetworkService.getInstance()
.getJsonApi().loginWithEmail(“00008051101”,电子邮件,密码,true)
.enqueue(新的回调函数(){
@凌驾
公共void onResponse(调用、响应){
Log.d(“RESPONSE FIREBASE”,RESPONSE.toString());
Log.d(“响应消息”,RESPONSE.MESSAGE());
}
@凌驾
失败时公共无效(调用调用,可丢弃的t){
t、 printStackTrace();
}
});
文档中说我应该使用内容类型application/JSON,但是如何在这里使用它或者使用改型通过http传递它呢? 任何方向都会有帮助

谢谢

UPD:控制台查询结果


您可以添加这样的标题。但是我认为如果你错过了报头响应,错误代码就不会是404

无论如何,试试这个

@FormUrlEncoded
@Headers({"Content-Type: application/json"})
@POST("accounts/signInWithPassword")
Call<Transaction.Result> loginWithEmail(
    @Query("key") String key,
    @Field("email") String email,
    @Field("password") String password,
    @Field("returnSecureToken") boolean returnSecureToken
);
@FormUrlEncoded
@标题({“内容类型:应用程序/json”})
@POST(“帐户/登录密码”)
通过电子邮件呼叫登录(
@查询(“键”)字符串键,
@字段(“电子邮件”)字符串电子邮件,
@字段(“密码”)字符串密码,
@字段(“returnSecureToken”)布尔returnSecureToken
);

真正的问题是因为url中的冒号“:”,所以url应该从点和斜杠符号开始“/”:

在github上找到了这个,它很有帮助


UPD:一个小的解释为什么我使用像
“accounts/signiWithpassword”
这样的url,里面有斜杠符号而不是冒号符号:我先尝试了冒号,但出现了一个错误“格式不正确的url”,所以我对这个错误进行了更深一层的挖掘:)

你能分享一下使用Google API所遵循的文档/指南吗?@Fervelve谢谢,但不起作用,仍然得到404。似乎我使用了错误的url,但正确的url是什么样子的?我不确定,但他们的文档url不是accounts/signInWithPassword,而是accounts:signInWithPassword这是真的,但如果我在@Post中更改url并设置“/”而不是“:”—在这种情况下,会出现错误“url格式错误”。
@FormUrlEncoded
@Headers({"Content-Type: application/json"})
@POST("accounts/signInWithPassword")
Call<Transaction.Result> loginWithEmail(
    @Query("key") String key,
    @Field("email") String email,
    @Field("password") String password,
    @Field("returnSecureToken") boolean returnSecureToken
);
    @POST("./accounts:signInWithPassword")