現在、Flutterでアプリを作っており、そのクライアントアプリのButtonを押すと、特定のtoken目掛けてPush通知を送るようなロジックをCloudFunctionsで作っています。
実装していざ押してみると、500 Server Errorが発生しているようでうまくPushが飛びませんでした。
以下、Flutter側とServer側の実装を記します。
Flutter
final HttpsCallable callable = CloudFunctions.instance .getHttpsCallable(functionName: 'sendMessage') ..timeout = const Duration(seconds: 30); onPressed: () async { final HttpsCallableResult result = await callable.call( <String, dynamic>{ // 各パラメータに値が入っていることはログ出力して確認済み 'registerUser': book.data['registerUser'], 'displayName': displayName, 'bookTitle': book.data['title'], }, ); }
CloudFunctions(Node.js)
const functions = require("firebase-functions"); const admin = require("firebase-admin"); admin.initializeApp(); const db = admin.firestore(); const fcm = admin.messaging(); // Saves a message to the Firebase Realtime Database but sanitizes the text by removing swearwords. exports.sendMessage = functions.https.onCall(async (data, context) => { const registerUserId = data.registerUser; const registerUserToken = db .collection("users") .doc(registerUserId) .get("token"); const sender = data.displayName; const bookTitle = data.bookTitle; const payload = { notification: { title: "てすと", body: `${sender} : ${bookTitle} `, // icon: "your-icon-url", // click_action: "FLUTTER_NOTIFICATION_CLICK", // required only for onResume or onLaunch callbacks }, }; return fcm.sendToDevice('registerUserToken', payload); });
原因切り分けとして、Flutter-CloudFunctionsでデータの受け渡しがうまくいっていない可能性があると考え、registerUserTokenをベタがきで書いてみるとPushが飛ぶようになりました。
CloudFunctionsとNode.jsがわかっておらず、初歩的な質問で申し訳ないのですが、この値の受け渡し方のどのあたりに問題があるのでしょうか。
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2020/04/05 04:54