use of com.google.firebase.functions.FirebaseFunctionsException.Code in project firebase-android-sdk by firebase.
the class FirebaseFunctions method call.
/**
* Calls a Callable HTTPS trigger endpoint.
*
* @param name The name of the HTTPS trigger.
* @param data Parameters to pass to the function. Can be anything encodable as JSON.
* @param context Metadata to supply with the function call.
* @return A Task that will be completed when the request is complete.
*/
private Task<HttpsCallableResult> call(@NonNull String name, @Nullable Object data, HttpsCallableContext context, HttpsCallOptions options) {
Preconditions.checkNotNull(name, "name cannot be null");
URL url = getURL(name);
Map<String, Object> body = new HashMap<>();
Object encoded = serializer.encode(data);
body.put("data", encoded);
JSONObject bodyJSON = new JSONObject(body);
MediaType contentType = MediaType.parse("application/json");
RequestBody requestBody = RequestBody.create(contentType, bodyJSON.toString());
Request.Builder request = new Request.Builder().url(url).post(requestBody);
if (context.getAuthToken() != null) {
request = request.header("Authorization", "Bearer " + context.getAuthToken());
}
if (context.getInstanceIdToken() != null) {
request = request.header("Firebase-Instance-ID-Token", context.getInstanceIdToken());
}
if (context.getAppCheckToken() != null) {
request = request.header("X-Firebase-AppCheck", context.getAppCheckToken());
}
OkHttpClient callClient = options.apply(client);
Call call = callClient.newCall(request.build());
TaskCompletionSource<HttpsCallableResult> tcs = new TaskCompletionSource<>();
call.enqueue(new Callback() {
@Override
public void onFailure(Call ignored, IOException e) {
if (e instanceof InterruptedIOException) {
FirebaseFunctionsException exception = new FirebaseFunctionsException(Code.DEADLINE_EXCEEDED.name(), Code.DEADLINE_EXCEEDED, null, e);
tcs.setException(exception);
} else {
FirebaseFunctionsException exception = new FirebaseFunctionsException(Code.INTERNAL.name(), Code.INTERNAL, null, e);
tcs.setException(exception);
}
}
@Override
public void onResponse(Call ignored, Response response) throws IOException {
Code code = Code.fromHttpStatus(response.code());
String body = response.body().string();
FirebaseFunctionsException exception = FirebaseFunctionsException.fromResponse(code, body, serializer);
if (exception != null) {
tcs.setException(exception);
return;
}
JSONObject bodyJSON;
try {
bodyJSON = new JSONObject(body);
} catch (JSONException je) {
Exception e = new FirebaseFunctionsException("Response is not valid JSON object.", Code.INTERNAL, null, je);
tcs.setException(e);
return;
}
Object dataJSON = bodyJSON.opt("data");
// TODO: Allow "result" instead of "data" for now, for backwards compatibility.
if (dataJSON == null) {
dataJSON = bodyJSON.opt("result");
}
if (dataJSON == null) {
Exception e = new FirebaseFunctionsException("Response is missing data field.", Code.INTERNAL, null);
tcs.setException(e);
return;
}
HttpsCallableResult result = new HttpsCallableResult(serializer.decode(dataJSON));
tcs.setResult(result);
}
});
return tcs.getTask();
}
use of com.google.firebase.functions.FirebaseFunctionsException.Code in project firebase-android-sdk by firebase.
the class FirebaseFunctions method call.
/**
* Calls a Callable HTTPS trigger endpoint.
*
* @param name The name of the HTTPS trigger.
* @param data Parameters to pass to the function. Can be anything encodable as JSON.
* @param context Metadata to supply with the function call.
* @return A Task that will be completed when the request is complete.
*/
private Task<HttpsCallableResult> call(@NonNull URL url, @Nullable Object data, HttpsCallableContext context, HttpsCallOptions options) {
Preconditions.checkNotNull(url, "url cannot be null");
Map<String, Object> body = new HashMap<>();
Object encoded = serializer.encode(data);
body.put("data", encoded);
JSONObject bodyJSON = new JSONObject(body);
MediaType contentType = MediaType.parse("application/json");
RequestBody requestBody = RequestBody.create(contentType, bodyJSON.toString());
Request.Builder request = new Request.Builder().url(url).post(requestBody);
if (context.getAuthToken() != null) {
request = request.header("Authorization", "Bearer " + context.getAuthToken());
}
if (context.getInstanceIdToken() != null) {
request = request.header("Firebase-Instance-ID-Token", context.getInstanceIdToken());
}
if (context.getAppCheckToken() != null) {
request = request.header("X-Firebase-AppCheck", context.getAppCheckToken());
}
OkHttpClient callClient = options.apply(client);
Call call = callClient.newCall(request.build());
TaskCompletionSource<HttpsCallableResult> tcs = new TaskCompletionSource<>();
call.enqueue(new Callback() {
@Override
public void onFailure(Call ignored, IOException e) {
if (e instanceof InterruptedIOException) {
FirebaseFunctionsException exception = new FirebaseFunctionsException(Code.DEADLINE_EXCEEDED.name(), Code.DEADLINE_EXCEEDED, null, e);
tcs.setException(exception);
} else {
FirebaseFunctionsException exception = new FirebaseFunctionsException(Code.INTERNAL.name(), Code.INTERNAL, null, e);
tcs.setException(exception);
}
}
@Override
public void onResponse(Call ignored, Response response) throws IOException {
Code code = Code.fromHttpStatus(response.code());
String body = response.body().string();
FirebaseFunctionsException exception = FirebaseFunctionsException.fromResponse(code, body, serializer);
if (exception != null) {
tcs.setException(exception);
return;
}
JSONObject bodyJSON;
try {
bodyJSON = new JSONObject(body);
} catch (JSONException je) {
Exception e = new FirebaseFunctionsException("Response is not valid JSON object.", Code.INTERNAL, null, je);
tcs.setException(e);
return;
}
Object dataJSON = bodyJSON.opt("data");
// TODO: Allow "result" instead of "data" for now, for backwards compatibility.
if (dataJSON == null) {
dataJSON = bodyJSON.opt("result");
}
if (dataJSON == null) {
Exception e = new FirebaseFunctionsException("Response is missing data field.", Code.INTERNAL, null);
tcs.setException(e);
return;
}
HttpsCallableResult result = new HttpsCallableResult(serializer.decode(dataJSON));
tcs.setResult(result);
}
});
return tcs.getTask();
}
Aggregations