回答編集履歴

1

全面的に修正

2018/05/30 15:05

投稿

keroxp
keroxp

スコア114

test CHANGED
@@ -2,83 +2,83 @@
2
2
 
3
3
 
4
4
 
5
- **まず、アプリdevelopmentモードでビルドて、XcodeでRunしたとき、ログエリアにAdMob関連のエラーログが出ていないかを確認してみてください**
5
+ ※2018/05/30 コメント受け回答を修正した。
6
+
7
+ [https://developers.google.com/admob/unity/interstitial](https://developers.google.com/admob/unity/interstitial)によると、そもそもインターシティシャル広告のロードの仕方が間違っているようです。InterstitialAdsオブジェクトを作成した後、AdRequstを作成してLoadAdメソッドを呼ぶ必要があるようです。
6
8
 
7
9
 
8
10
 
9
- 加えて、以下のメソッドが気になります。
11
+ ```cs
10
12
 
11
- ```ここに言語を入力
13
+ using GoogleMobileAds.Api;
12
14
 
13
- public void interstitialShow()
15
+
14
16
 
15
- {
16
-
17
- if (interstitial.IsLoaded())//※注釈
18
-
19
- {
20
-
21
- interstitial.Show();
22
-
23
- num = 0;
24
-
25
- }
26
-
27
- else
28
-
29
- {
30
-
31
- if (num <= 10)
32
-
33
- {
34
-
35
- Invoke("interstitialShow", 0.2f);
36
-
37
- num++;
38
-
39
- }
40
-
41
- }
42
-
43
- }
44
-
45
-
46
-
47
- ```
48
-
49
-
50
-
51
- AdMobのインターシティシャル広告は、リクエストを受けてから現在有効な広告があるかどうかを探しに行き、さらにコンテンツ自体のロードも挟まるために、すぐには表示されません。このメソッドはそのため0.2秒感覚でロード完了をポーリングしているようです。
52
-
53
-
54
-
55
- しかし、この実装では単純に0.2 * 10 = 5秒以内にロードが終わらなかった場合リトライされなくなってしましますし、リトライ回数を表す変数がfloatなのもよくありません。
56
-
57
-
58
-
59
- 本当にロードを完了まで待ちたいのであれば、Update()かLateUpdate()で毎フレーム確認するほうがいいです。
60
-
61
-
62
-
63
- ```ここに言語を入力
64
-
65
- void Start(){
17
+ private void Start() {
66
18
 
67
19
  RequestInterstitial();
68
20
 
69
21
  }
70
22
 
71
- boolean adShown;
23
+ private InterstitialAd interstitial;
72
24
 
73
- void Update() {
25
+ private void RequestInterstitial()
74
26
 
75
- if (interstitial.IsLoaded() && !adShown) {
27
+ {
76
28
 
77
- interstitial.Show();
29
+ #if UNITY_ANDROID
78
30
 
31
+ string adUnitId = "ca-app-pub-3940256099942544/1033173712";
32
+
33
+ #elif UNITY_IPHONE
34
+
35
+ string adUnitId = "ca-app-pub-3940256099942544/4411468910";
36
+
37
+ #else
38
+
39
+ string adUnitId = "unexpected_platform";
40
+
41
+ #endif
42
+
43
+
44
+
45
+ // Initialize an InterstitialAd.
46
+
47
+ interstitial = new InterstitialAd(adUnitId);
48
+
49
+ // Create an empty ad request.
50
+
51
+ var request = new AdRequest.Builder().Build();
52
+
53
+ // Load the interstitial with the request.
54
+
55
+ interstitial.LoadAd(request);
56
+
57
+ }
58
+
59
+ private boolean isGameover = false;
60
+
61
+ private void Update() {
62
+
63
+ if (isGameOver) {
64
+
65
+ // ゲームオーバーになったら表示する
66
+
79
- adShown = true;
67
+ ShowAds();
68
+
69
+ }
70
+
71
+ }
72
+
73
+ private void ShowAds() {
74
+
75
+ if (interstitial.IsLoaded()) {
76
+
77
+ interstitial.Show();
80
78
 
81
79
  }
80
+
81
+ // 当然、ロードされていない場合もある
82
82
 
83
83
  }
84
84
 
@@ -86,4 +86,4 @@
86
86
 
87
87
 
88
88
 
89
- 、どうった場面インターシティシャル広告を表示いのかわかりませんが、アプ内でいついかなる状況でもすぐにインタシティシャル広告を出したいのであれば、MonoBehaviourのようライフサイクルのあるコンポーネントではなく、別の自分のクラスで管理し、アプリ起動時かロードをはじめておき、使ったらすぐにロードするようにしたほういいと思います
89
+ 私もInterstitialAdsは使っこと無しいのかわかりませんが、試してみてください。(ド動画広告なら使ったことあります