This is my personal implementation, it is not finished but whoever wants to use this plugin in C # will be useful thanks @ yalcin-ata for creating this useful plugin for Godot.
using Godot;
using Godot.Collections;
using System;
using Object = Godot.Object;
public class FirebaseManager : Node
{
public static FirebaseManager instance;
private Object Firebase;
bool initState = false;
bool isBannerLoaded = false;
Vector2 bannerSize = Vector2.Zero;
bool isInterstitialLoaded = false;
bool isRewardedVideoLoaded = false;
float gameTimeScale = 0;
public event FirebaseEvent<Vector2> onBannerActivity;
uint lastConnectionTry = 0;
// Called when the node enters the scene tree for the first time.
public override void _Ready()
{
instance = this;
if (OS.GetName() == "Android")
{
InitFirebase();
}
gameTimeScale = Engine.TimeScale;
}
public override void _Process(float delta)
{
if (OS.GetName() == "Android")
{
if (!initState)
{
if ((OS.GetTicksMsec() - lastConnectionTry) > 10)
{
lastConnectionTry = OS.GetTicksMsec();
InitFirebase();
}
}
}
}
private void InitFirebase()
{
if (Firebase != null)
{
Firebase.Call("init", GetInstanceId());
initState = true;
// Autentication
if((bool)Firebase.Call("authentication_google_is_connected") == false){
Firebase.Call("authentication_google_sign_in");
}
}
else
{
Firebase = Engine.GetSingleton("Firebase");
Firebase.Call("init", GetInstanceId());
initState = true;
// Autentication
if((bool)Firebase.Call("authentication_google_is_connected") == false){
Firebase.Call("authentication_google_sign_in");
}
}
}
//Firebase implementation
public void _on_firebase_receive_message(string tag, string from, object key, object data)
{
GD.Print($"TAG: {tag} || From: {from} || Key: {key} || Data: {data}");
switch (from)
{
case "AdMob":
switch ($"{key}")
{
case "Banner":
ReceivedBanner(data);
break;
case "Interstitial":
ReceivedInterstitial(data);
break;
case "RewardedVideo":
ReceivedRewardedVideo(data);
break;
}
break;
}
}
public void AnalyticSendEvents(string eventName, Dictionary dictionary)
{
Firebase.Call("analytics_send_events", eventName, dictionary);
}
public void AnalyticsSendCustomEvent(string someKey, string someValue)
{
Firebase.Call("analytics_send_custom", someKey, someValue);
}
private void ReceivedBanner(object data)
{
/*
tag=Firebase from=AdMob key=Banner data=on_ad_loaded
tag=Firebase from=AdMob key=Banner data=on_ad_failed_to_load:errorCode
*/
string dataStr = (string)data;
string[] split = dataStr.Split(':');
switch (split[0])
{
case "on_ad_loaded":
isBannerLoaded = (bool)Firebase.Call("admob_banner_is_loaded");
if (isBannerLoaded)
{
// I send the banner measurements through an event.
var bz = (Dictionary)Firebase.Call("admob_banner_get_size");
var x = (int)bz["width"];
var y = (int)bz["height"];
//GD.Print($"Banner size x = {x} || Banner size y {y}");
Firebase.Call("admob_banner_show", true);
onBannerActivity?.Invoke(new Vector2(x, y));
}
break;
case "on_ad_failed_to_load":
// Send an event with the load failure
isBannerLoaded = false;
switch (split[1])
{
case "0":
initState = false;
break;
}
GD.Print($"Banners error {split[1]}");
Firebase.Call("admob_banner_show", false);
onBannerActivity?.Invoke(Vector2.Zero);
break;
}
}
private void ReceivedInterstitial(object data)
{
/*
tag=Firebase from=AdMob key=Interstitial data=on_ad_loaded
tag=Firebase from=AdMob key=Interstitial data=on_ad_failed_to_load:errorCode
tag=Firebase from=AdMob key=Interstitial data=on_ad_closed
*/
string dataStr = (string)data;
string[] split = dataStr.Split(':');
switch (split[0])
{
case "on_ad_loaded":
// Show and pause the game
isInterstitialLoaded = true;
break;
case "on_ad_failed_to_load":
// Send an event with the load failure
switch (split[1])
{
case "0":
initState = false;
break;
}
isInterstitialLoaded = false;
break;
case "on_ad_closed":
// Reanudar el juego
isInterstitialLoaded = false;
break;
}
}
private void ReceivedRewardedVideo(object data)
{
/*
tag=Firebase from=AdMob key=RewardedVideo data={status:on_rewarded_ad_loaded, unit_id:ca-app-pub-AD_UNIT_ID}
tag=Firebase from=AdMob key=RewardedVideo data={status:on_rewarded_ad_failed_to_load:errorCode, unit_id:ca-app-pub-AD_UNIT_ID}
tag=Firebase from=AdMob key=RewardedVideo data={status:earned, rewardType, rewardAmount, unit_id:ca-app-pub-AD_UNIT_ID}
tag=Firebase from=AdMob key=RewardedVideo data={status:closed, unit_id:ca-app-pub-AD_UNIT_ID}
*/
Dictionary dataDict = (Dictionary)data;
string status = (string)dataDict["status"];
string[] split = status.Split(':');
switch (split[0])
{
case "on_rewarded_ad_loaded":
GD.Print($"Status = {split[0]}");
isRewardedVideoLoaded = true;
break;
case "on_rewarded_ad_failed_to_load":
switch (split[1])
{
case "0":
initState = false;
break;
}
GD.Print($"Status = {split[0]}:{split[1]}");
isRewardedVideoLoaded = false;
break;
case "earned":
GD.Print($"Status = {split[0]}");
isRewardedVideoLoaded = false;
break;
case "closed":
GD.Print($"Status = {split[0]}");
isRewardedVideoLoaded = false;
break;
}
}
}
public delegate void FirebaseEvent<T>(T data);
This is my personal implementation, it is not finished but whoever wants to use this plugin in C # will be useful thanks @ yalcin-ata for creating this useful plugin for Godot.