「Unity/Firebase/CloudFunctions」の版間の差分
提供: 初心者エンジニアの簡易メモ
(→サンプル) |
(→firebaseのサーバー側変更) |
||
| 行56: | 行56: | ||
const admin = require('firebase-admin'); | const admin = require('firebase-admin'); | ||
admin.initializeApp(); | admin.initializeApp(); | ||
| + | // 追加 | ||
exports.addEntry = functions | exports.addEntry = functions | ||
.region('asia-northeast1') | .region('asia-northeast1') | ||
| 行71: | 行72: | ||
}); | }); | ||
}); | }); | ||
| + | // 更新 | ||
| + | exports.addEntry = functions | ||
| + | .region('asia-northeast1') | ||
| + | .https.onCall((data, context) => | ||
| + | { | ||
| + | const entry = { | ||
| + | name : data.name, | ||
| + | point : data.point | ||
| + | }; | ||
| + | return admin.firestore().collection('entries') | ||
| + | .doc("ID1").set(entry) | ||
| + | .then((snapshot) => | ||
| + | { | ||
| + | return 'OK'; | ||
| + | }); | ||
| + | }); | ||
| + | |||
// トップcount件のEntryを取得 | // トップcount件のEntryを取得 | ||
2019年7月26日 (金) 23:34時点における版
準備
Gcp/Firebase/CloudFunctions [ショートカット]
import
FirebaseFunctions.unitypackage をunityのAssets/ImportPackage/CustomPackageからImportする
初期化
using Firebase.Functions; FirebaseFunctions functions = FirebaseFunctions.DefaultInstance;
東京リージョンの場合こちらを記述
using Firebase.Functions;
FirebaseFunctions functions = FirebaseFunctions.GetInstance("asia-northeast1");
サンプル
ScoreEntry score = new ScoreEntry(); AddEntry(score);
using System.Threading.Tasks;
class ScoreEntry {
public string Name = "taro";
public int Age = 100;
}
async Task<object> AddEntryAsync(ScoreEntry score)
{
object data = new Dictionary<object, object>
{
{ "name", score.Name },
{ "age", score.Age },
};
return await functions.GetHttpsCallable("addEntry").CallAsync(data)
.ContinueWith(task =>
{
return task.Result.Data;
});
}
void AddEntry(ScoreEntry score)
{
AddEntryAsync(score).ContinueWith(task =>
{
if (task.IsFaulted)
{
// onError
}
else
{
// onComplete
}
}, TaskScheduler.FromCurrentSynchronizationContext());
}
firebaseのサーバー側変更
functions.https.onCall を使ってシリアル&認証トークンで接続するようにする
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp();
// 追加
exports.addEntry = functions
.region('asia-northeast1')
.https.onCall((data, context) =>
{
const entry = {
name : data.name,
point : data.point
};
return admin.firestore().collection('entries')
.add(entry)
.then((snapshot) =>
{
return 'OK';
});
});
// 更新
exports.addEntry = functions
.region('asia-northeast1')
.https.onCall((data, context) =>
{
const entry = {
name : data.name,
point : data.point
};
return admin.firestore().collection('entries')
.doc("ID1").set(entry)
.then((snapshot) =>
{
return 'OK';
});
});
// トップcount件のEntryを取得
exports.getTopEntries = functions
.region('asia-northeast1')
.https.onCall((data, context) =>
{
const count = data.count;
return admin.firestore().collection('entries')
.orderBy('point', 'desc')
.limit(count)
.get()
.then((qSnapshot) =>
{
return {
entries : qSnapshot.docs.map(x => x.data())
};
});
});
参考
https://firebase.google.com/docs/functions/callable?hl=ja
https://devlog.hassaku.blue/2019/03/unity-firebase-firebase.html
https://firebase.google.com/docs/reference/unity/class/firebase/functions/firebase-functions
