前提・実現したいこと
unityでiOSゲームアプリを作成しiphoneでゲームを問題なくプレイするところまで行きました。
その後Admodで広告を表示させようとしました。
発生している問題・エラーメッセージ
Admobの設定後ビルドするところまでは問題ないように思えたのですが
アプリを立ち上げるためにタップすると一瞬だけホーム画面上で画面が薄暗くなるだけで
ゲームアプリが起動しません。すぐに通常のホーム画面に戻ります。
スプラッシュ画面前でクラッシュします。
エラー表示なし
該当のソースコード
using System.Collections; using System.Collections.Generic; using UnityEngine; using GoogleMobileAds.Api; public class GoogleAds : MonoBehaviour { // Use this for initialization void Start() { #if UNITY_ANDROID string appId = "ca-app-pub-3940256099942544~3347511713"; #elif UNITY_IPHONE string appId = "ここには自分で取得したアプリIDを貼り付け"; #else string appId = "unexpected_platform"; #endif // Initialize the Google Mobile Ads SDK. MobileAds.Initialize(appId); RequestBanner(); } private void RequestBanner() { #if UNITY_ANDROID string adUnitId = "ca-app-pub-3940256099942544/6300978111"; #elif UNITY_IPHONE string adUnitId = "ここには自分で取得した広告ユニットIDを貼り付け"; #else string adUnitId = "unexpected_platform"; #endif // Create a 320x50 banner at the top of the screen. BannerView bannerView = new BannerView(adUnitId, AdSize.Banner, AdPosition.Bottom); // Create an empty ad request. AdRequest request = new AdRequest.Builder().Build(); // Load the banner with the request. bannerView.LoadAd(request); } }
試したこと
https://simanezumi1989.hatenablog.com/entry/2020/03/17/175109
https://developers.google.com/admob/ios/quick-start?hl=ja
上記のサイト(動画)を参考にさせていただきました。
GoogleMobileAds-v5.0.1.unitypackage
をインストール。
GoogleMobileAds.framework
GoogleAppMeasurement.framework
GoogleUtilities.framework
nanopb.framework
を
https://edunity.hatenablog.com/entry/20200128/1580144428
の、サイトを参考にAssetsのPluginsフォルダ内のiOSフォルダに入れました。
初めは
GoogleUtilities.xcframework と
nanopb.xcframework
を間違えてフォルダーに入れてしまいましたが
https://picxpic.com/?p=3764 のサイト参考に
フォルダーの中にios-armv7_arm64がありその中の
GoogleUtilities.framework
nanopb.frameworkを入れました。
UnityのAssets→Google Mobile Ads→Settings を開き
Enabled にチェックを入れてAdMob App IDを入力。
Androidにはテスト用のアプリIDを入れています。
iOSには自分で取得したアプリIDを入れています。
Assets → iOSResolver → Settings → Cocoapods Integration を
Xcode Project - Add Cocoapods to the Xcode Project に変更
Assets → Play Services Resolver → iOS Resolver → InstallCocoapods をクリック
該当のソースコードをメインシーンの空のオブジェクトに適用
UnityでiOSようにビルドしたデーターをUSBでMacBookに移動。
https://developers.google.com/admob/ios/quick-start?hl=ja の
「プロジェクトのビルド設定で、以下のように [Other Linker Flags] に -ObjC リンカー フラッグを追加します。」
と
「Info.plist を更新する」を実施後
iphoneにビルドしました。
しかしアプリを起動しようとしても一瞬だけ画面が薄暗くなるだけで
起動しません。
https://qiita.com/VeyronSakai/items/2c3b01ba6dfed84c3405
のサイトを参考にしようとしましたが
Assets/GoogleMobileAds/Editor ディレクトリで PListProcessor.cs を開いても
「ADMOB_APPLICATION_ID」というのがなく試せません。
#if UNITY_IPHONE || UNITY_IOS using System.IO; using UnityEditor; using UnityEditor.Callbacks; using UnityEditor.iOS.Xcode; using GoogleMobileAds.Editor; public static class PListProcessor { [PostProcessBuild] public static void OnPostProcessBuild(BuildTarget buildTarget, string path) { string plistPath = Path.Combine(path, "Info.plist"); PlistDocument plist = new PlistDocument(); plist.ReadFromFile(plistPath); if (!GoogleMobileAdsSettings.Instance.IsAdManagerEnabled && !GoogleMobileAdsSettings.Instance.IsAdMobEnabled) { NotifyBuildFailure("Neither Ad Manager nor AdMob is enabled yet."); } if (GoogleMobileAdsSettings.Instance.IsAdManagerEnabled) { plist.root.SetBoolean("GADIsAdManagerApp", true); } if (GoogleMobileAdsSettings.Instance.IsAdMobEnabled) { string appId = GoogleMobileAdsSettings.Instance.AdMobIOSAppId; if (appId.Length == 0) { NotifyBuildFailure( "iOS AdMob app ID is empty. Please enter a valid app ID to run ads properly."); } else { plist.root.SetString("GADApplicationIdentifier", appId); } } if (GoogleMobileAdsSettings.Instance.DelayAppMeasurementInit) { plist.root.SetBoolean("GADDelayAppMeasurementInit", true); } File.WriteAllText(plistPath, plist.WriteToString()); } private static void NotifyBuildFailure(string message) { string prefix = "[GoogleMobileAds] "; bool openSettings = EditorUtility.DisplayDialog( "Google Mobile Ads", "Error: " + message, "Open Settings", "Close"); if (openSettings) { GoogleMobileAdsSettingsEditor.OpenInspector(); } #if UNITY_2017_1_OR_NEWER throw new BuildPlayerWindow.BuildMethodException(prefix + message); #else throw new OperationCanceledException(prefix + message); #endif } } #endif
補足情報(FW/ツールのバージョンなど)
アプリ作成はWindowsでしています。
Windows 10 Pro バージョン1903
Unity 2019.3.9f1
GoogleMobileAds-v5.0.1
GoogleMobileAdsSdkiOS-7.64.0
MacBook Air 11インチEarly2015
MacOS Catalina バージョン10.15.6
Xcode バージョン11.6(11E708)
iPhoneXR iOS13.5.1
ご教示いただければ幸いです。
Xcode クラッシュレポート
#import "PLCrashReporter.h" #import "CrashReporter.h" #include "UndefinePlatforms.h" #include <mach-o/ldsyms.h> #include "RedefinePlatforms.h" extern "C" NSString* UnityGetCrashReportsPath(); static NSUncaughtExceptionHandler* gsCrashReporterUEHandler = NULL; static decltype(_mh_execute_header) * sExecuteHeader = NULL; extern "C" void UnitySetExecuteMachHeader(const decltype(_mh_execute_header)* header) { sExecuteHeader = header; } extern "C" const decltype(_mh_execute_header) * UnityGetExecuteMachHeader() { return sExecuteHeader; } static void SavePendingCrashReport() { if (![[UnityPLCrashReporter sharedReporter] hasPendingCrashReport]) return; NSFileManager *fm = [NSFileManager defaultManager]; NSError *error; if (![fm createDirectoryAtPath: UnityGetCrashReportsPath() withIntermediateDirectories: YES attributes: nil error: &error]) { ::printf("CrashReporter: could not create crash report directory: %s\n", [[error localizedDescription] UTF8String]); return; } NSData *data = [[UnityPLCrashReporter sharedReporter] loadPendingCrashReportDataAndReturnError: &error]; if (data == nil) { ::printf("CrashReporter: failed to load crash report data: %s\n", [[error localizedDescription] UTF8String]); return; } NSString* file = [UnityGetCrashReportsPath() stringByAppendingPathComponent: @"crash-"]; unsigned long long seconds = (unsigned long long)[[NSDate date] timeIntervalSince1970]; file = [file stringByAppendingString: [NSString stringWithFormat: @"%llu", seconds]]; file = [file stringByAppendingString: @".plcrash"]; if ([data writeToFile: file atomically: YES]) { ::printf("CrashReporter: saved pending crash report.\n"); if (![[UnityPLCrashReporter sharedReporter] purgePendingCrashReportAndReturnError: &error]) { ::printf("CrashReporter: couldn't remove pending report: %s\n", [[error localizedDescription] UTF8String]); } } else { ::printf("CrashReporter: couldn't save crash report.\n"); } // Now copy out a pending version that we can delete if/when we send it file = [UnityGetCrashReportsPath() stringByAppendingPathComponent: @"crash-pending.plcrash"]; if ([data writeToFile: file atomically: YES]) { ::printf("CrashReporter: saved copy of pending crash report.\n"); } else { ::printf("CrashReporter: couldn't save copy of pending crash report.\n"); } } static void InitCrashReporter() { NSError *error; UnityInstallPostCrashCallback(); if ([[UnityPLCrashReporter sharedReporter] enableCrashReporterAndReturnError: &error]) ::printf("CrashReporter: initialized\n"); else NSLog(@"CrashReporter: could not enable crash reporter: %@", error); SavePendingCrashReport(); } static void UncaughtExceptionHandler(NSException *exception) { NSLog(@"Uncaught exception: %@: %@\n%@", [exception name], [exception reason], [exception callStackSymbols]); if (gsCrashReporterUEHandler) gsCrashReporterUEHandler(exception); } static void InitObjCUEHandler() { // Crash reporter sets its own handler, so we have to save it and call it manually gsCrashReporterUEHandler = NSGetUncaughtExceptionHandler(); NSSetUncaughtExceptionHandler(&UncaughtExceptionHandler); } void InitCrashHandling() { #if ENABLE_CUSTOM_CRASH_REPORTER InitCrashReporter(); #endif #if ENABLE_OBJC_UNCAUGHT_EXCEPTION_HANDLER InitObjCUEHandler(); #endif } // This function will be called when AppDomain.CurrentDomain.UnhandledException event is triggered. // When running on device the app will do a hard crash and it will generate a crash log. extern "C" void CrashedCheckBelowForHintsWhy() { #if ENABLE_IOS_CRASH_REPORTING || ENABLE_CUSTOM_CRASH_REPORTER // Make app crash hard here __builtin_trap(); // Just in case above doesn't work abort(); #endif }
回答1件
あなたの回答
tips
プレビュー