Android 通过安卓改型访问https云功能端点

Android 通过安卓改型访问https云功能端点,android,google-cloud-functions,retrofit2,Android,Google Cloud Functions,Retrofit2,我正试图通过安卓系统的改型,从云计算功能中获得响应 我不知道这是否很重要,但在函数/index.js中,除了下面显示的函数之外,还有其他函数 下面是我如何编写我的云函数端点: const functions = require('firebase-functions'); const express = require('express'); const app = express(); const admin = require('firebase-admin'); admin.initia

我正试图通过安卓系统的改型,从云计算功能中获得响应

我不知道这是否很重要,但在函数/index.js中,除了下面显示的函数之外,还有其他函数

下面是我如何编写我的云函数端点:

const functions = require('firebase-functions');
const express = require('express');
const app = express();

const admin = require('firebase-admin');
admin.initializeApp();

app.post('/shipping', (req, res) => {
  console.log('Inside https request for shipping')
  res.status(200).send('Helo from express post');
})

exports.shipping = functions.https.onRequest(app);
下面是我如何从Android中调用端点:

FirebaseApi

public interface FirebaseApi {
    @POST("shipping")
    Call<String> getShippingPrice();
}
公共接口FirebaseApi{
@邮政(“航运”)
调用getShippingPrice();
}
以及请求:

private void sendRequestToFirebaseCloudFunctions() {
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl("https://us-central1-<your-project-id>.cloudfunctions.net/")
                .addConverterFactory(GsonConverterFactory.create())
                .build();

        FirebaseApi firebaseApi = retrofit.create(FirebaseApi.class);
        Call<String> call = firebaseApi.getShippingPrice();
        call.enqueue(new Callback<String>() {
            @Override
            public void onResponse(Call<String> call, Response<String> response) {
                Log.i(TAG, "onResponse: isSuccessful "+response.isSuccessful());
                Log.i(TAG, "onResponse: body: "+response.body());
                Log.i(TAG, "onResponse: errorBody: "+response.errorBody());
                try {
                    Log.i(TAG, "onResponse: error: "+response.errorBody().string());
                } catch (IOException e) {
                    Log.i(TAG, "onResponse: catherror: "+e.getMessage());

                }

            }

            @Override
            public void onFailure(Call<String> call, Throwable t) {
                Log.i(TAG, "onFailure: "+t.getMessage());
            }
        });
    }
private void sendRequestToFirebaseCloudFunctions(){
改装改装=新改装.Builder()
.baseUrl(“https://us-central1-.cloudfunctions.net/")
.addConverterFactory(GsonConverterFactory.create())
.build();
FirebaseApi=reformation.create(FirebaseApi.class);
Call Call=firebaseApi.getShippingPrice();
call.enqueue(新回调(){
@凌驾
公共void onResponse(调用、响应){
Log.i(标记“onResponse:issusccessful”+response.issusccessful());
Log.i(标记“onResponse:body:+response.body());
i(标记“onResponse:errorBody:”+response.errorBody());
试一试{
i(标记“onResponse:error:”+response.errorBody().string());
}捕获(IOE异常){
i(标记“onResponse:catherror:”+e.getMessage());
}
}
@凌驾
失败时公共无效(调用调用,可丢弃的t){
Log.i(标记“onFailure:+t.getMessage());
}
});
}
日志如下所示:

onResponse: isSuccessful false
onResponse: body: null
onResponse: errorBody: okhttp3.ResponseBody$1@3e75b8d
onResponse: error: <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="utf-8">
    <title>Error</title>
    </head>
    <body>
    <pre>Cannot POST /</pre>
    </body>
    </html>
onResponse:isSuccessful false
onResponse:body:null
onResponse:errorBody:okhttp3.ResponseBody$1@3e75b8d
onResponse:错误:
错误
无法发布/
我怎样才能让它工作

我看过一些添加CORS的教程。即使我的应用程序连接到firebase并使用firestore和实时数据库,我真的需要CORS吗


谢谢你的帮助

根据您当前的代码,发布到的正确路径是:

https://us-central1-.cloudfunctions.net/shipping/shipping

这是因为您将函数导出为
shipping
,但也只在相对路径
/shipping

上侦听POST请求,而不是在Android中
onFailure:使用JsonReader.setLenient(true)在第1行第1列路径$
@AlitonOliveira处接受格式错误的JSON,您当前返回的是纯文本,而不是JSON。如果您想发送JSON,请使用
res.status(200).JSON('Helo from express post')
。最后一个问题:如何创建一个路径,使其仅为
/shipping
而不是
/shipping/shipping
?请使用app.post(“/”,…),或者将其托管在Firebase主机后面。然后,您可以使用类似于
api.your domain.com
的内容来代替云函数URL。