背景
Xamarin.Firebase.iOS.AdMob
を使った場合のお話です
XamarinでAdMobのインタースティシャル、リワード広告について、日本語の記事がググってもパッと出なかったので載せることにしました。
前提
Firebase, AdMob側の設定は済みの前提です。
AdMobだけ使うとしてもGoogleService-Info.plist
は必要なのでFirebaseの設定が必要です。
実装
Xamarin.Firebase.iOS.AdMob
のnugetを追加
FinishedLaunchingで初期化
MobileAds.Configure(アプリID);
// 共通部側から広告を呼び出したいのでDependencyServiceとして実装
DependencyService.Get<適当なクラス>().LoadAd();
広告を出す時に実行
何かしらのDependencyServiceとして実装
Interstitial interstitial;
public void LoadAd()
{
// インタースティシャルの場合
interstitial = new Interstitial(広告ID);
interstitial.LoadRequest(Request.GetDefaultRequest());
// リワードの場合
RewardBasedVideoAd.SharedInstance.LoadRequest(Request.GetDefaultRequest(), 広告ID);
}
public void ShowAdInterstitial()
{
// インタースティシャルの場合
if (interstitial.IsReady)
{
interstitial.ScreenDismissed += (s, e) => LoadAd();
interstitial.PresentFromRootViewController(GetTopViewController());
}
}
public void ShowAdReward()
{
// リワードの場合はこちらを実行
if (RewardBasedVideoAd.SharedInstance.IsReady)
{
RewardBasedVideoAd.SharedInstance.Closed += (s, e) => LoadAd();
RewardBasedVideoAd.SharedInstance.UserRewarded += (object sender, RewardBasedVideoAdRewardEventArgs e) =>
{
_rewardReceive?.Invoke(e.Reward.Amount.Int32Value);
};
RewardBasedVideoAd.SharedInstance.PresentFromRootViewController(GetTopViewController());
}
else
{
// 万が一、広告が配信されていない場合救済処置
ShowToast("表示可能な広告がありませんでした");
_rewardReceive?.Invoke(5);
}
}
public void SetRewardCallback(Action<int> action)
{
_rewardReceive = action;
}
public static UIViewController GetTopViewController()
{
var window = UIApplication.SharedApplication.KeyWindow;
var vc = window.RootViewController;
while (vc.PresentedViewController != null)
vc = vc.PresentedViewController;
if (vc is UINavigationController navController)
vc = navController.ViewControllers.Last();
return vc;
}
こんなエラーが起きたら
以前のプロジェクトから適当にコピペして、ビルドすると・・・
Native linking failed
と出て、何かが足りずにリンクできない模様
あれやこれや試すも解決せず
ライブラリ提供元のIssueを眺めてると解決方法分かりました
これの最後の行のFirebase.Core.App.Configure()
を書けばビルドが通るようになりました
実装が足りないと上手くリンカーが動かないんですね
#ちなみにプロジェクト設定のリンカーの動作
は何を選んでもダメでした
#ちなみに2年前ぐらいにも「呼ばれることないけどこれを書けば上手くいくよ」的なものに遭遇しましたが、そういうものなんでしょうか