2
0

More than 3 years have passed since last update.

FlutterからCloud Functionsをhttpトリガーでcallしようとした時にハマった話

Last updated at Posted at 2021-03-23

結論

Flutter側でリージョンを指定してるのにも関わらずうまくいかない!ってときは、
httpsCallable('関数名')の中に入れる関数名が正しいかを確認しましょう!
※CloudFunctions内で定義した関数名そのままでは正しくない可能性があります!

起こった問題

Stripeのセッションを作成するためにCloudFunctionsにてAPIを実装し、FlutterからhttpトリガーでCloudFunctionsを実行させる時に下記エラーに直面しました。
Flutterではcloud_functionsライブラリを使用

私の場合、createRegattaCheckoutという関数をCloudFunctions側で定義し、Flutterから呼び出そうとしています。

CloudFunctions
import * as functions from 'firebase-functions';

export const createRegattaCheckout = functions
    .region(locationName)
    .https.onCall(async (data, context) => {
    // 中身は省略
}
flutter
import 'package:cloud_functions/cloud_functions.dart';

final functions = FirebaseFunctions.instanceFor(app: Firebase.app(), region: 'asia-northeast1');
final callable = functions.httpsCallable('createRegattaCheckout');
final results = await callable.call();

しかし下記エラーにてスタック!

image.png

[エラーメッセージ]
Unhandled Exception: [firebase_functions/3840] データのフォーマットが正しくないため、読み込めませんでした。

試したこと

下記記事を参考に、Flutter側でリージョンを指定(region: 'asia-northeast1')してみました。。
がうまくいかず。。。

解決策

FlutterのhttpsCallable('関数名')部分において、関数名を修正する。
(私の場合、createRegattaCheckout-createRegattaCheckoutでした。)
関数をindex.ts内に記述しているのではなく、モジュールに分けていたことが原因かも。。

Firebaseが実際に認識している関数名を入れる必要がある。

関数名の確認方法

1. Firebase Consoleから確認

Firebase ConsoleのFunctionsタブ内のダッシュボードをみると実際にFirebaseが認識している関数名を確認することができます。
image.png

2. デプロイ時のログから確認

$ firebase deploy --only functions:createRegattaCheckout
<省略>
i  functions: uploading functions in project: createRegattaCheckout-createRegattaCheckout(asia-northeast1)
i  functions: updating Node.js 12 function createRegattaCheckout-createRegattaCheckout(asia-northeast1)...
✔  functions[createRegattaCheckout-createRegattaCheckout(asia-northeast1)]: Successful update operation. 
<省略>

最後に

結果的にはしょうもないことでしたが、自分は地味にハマって辛かったので、
同じ思いをする人がいませんようにと本記事をまとめました。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0