2017-08-08 6 views
0

AndroidでFacebook広告を表示しようとしています。私はAndroid StudioプロジェクトにAudience Network .jarを含めました。また、Androidマニフェストにアクティビティを追加しました。オーディエンスネットワークインタースティシャル/報酬付き広告ショーでユニティにAndroidクラッシュが発生する

com.facebook.ads.InterstitialAd interstitial; 
 
com.facebook.ads.RewardedVideoAd rewarded 
 

 
public void loadInterstitial() { 
 
\t activity.runOnUiThread(new Runnable() { 
 
\t \t @Override 
 
\t \t public void run() { 
 
\t \t \t if (interstitial == null) { 
 
\t \t \t \t interstitial = new com.facebook.ads.InterstitialAd(activity, interstitialAd.getCode()); 
 
\t \t \t \t CustomFacebookInterstitialAdListener interestitialListener = new CustomFacebookInterstitialAdListener(AudienceNetworkAdProvider.this); 
 
\t \t \t \t interstitial.setAdListener(interestitialListener); 
 
\t \t \t } 
 
\t \t \t interstitial.loadAd(); 
 
\t \t } 
 
\t }); 
 
} 
 

 
public void showInterstitial() { 
 
\t if (isInterstitialAvailable()) { 
 
\t \t activity.runOnUiThread(new Runnable() { 
 
\t \t \t @Override 
 
\t \t \t public void run() { 
 
\t \t \t \t interstitial.show(); 
 
\t \t \t } 
 
\t \t }); 
 
\t } 
 
} 
 

 
public void loadRewardedAd() { 
 
\t activity.runOnUiThread(new Runnable() { 
 
\t \t @Override 
 
\t \t public void run() { 
 
\t \t \t if (rewarded == null) { 
 
\t \t \t \t rewarded = new com.facebook.ads.RewardedVideoAd(activity, rewardedAd.getCode()); 
 
\t \t \t \t CustomFacebookRewardedAdListener rewardedListener = new CustomFacebookRewardedAdListener(AudienceNetworkAdProvider.this); 
 
\t \t \t \t rewarded.setAdListener(rewardedListener); 
 
\t \t \t } 
 
\t \t \t rewarded.loadAd(); 
 
\t \t } 
 
\t }); 
 
} 
 

 
public void showRewardedAd() { 
 
\t if (isRewardedAdAvailable()) { 
 
\t \t activity.runOnUiThread(new Runnable() { 
 
\t \t \t @Override 
 
\t \t \t public void run() { 
 
\t \t \t \t rewarded.show(); 
 
\t \t \t } 
 
\t \t }); 
 
\t } 
 
}

コード:

android { 
 
    compileSdkVersion 25 
 
    buildToolsVersion "25.0.2" 
 
    testOptions { 
 
     unitTests.returnDefaultValues = true 
 
    } 
 
    defaultConfig { 
 
     minSdkVersion 15 
 
     targetSdkVersion 25 
 
     versionCode 1 
 
     versionName "1.0" 
 
     testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" 
 
    } 
 
    buildTypes { 
 
     release { 
 
      minifyEnabled false 
 
      shrinkResources false 
 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
 
      debuggable false 
 
     } 
 
     debug { 
 
      debuggable true 
 
      jniDebuggable true 
 
      minifyEnabled false 
 
      shrinkResources false 
 
     } 
 
    } 
 
} 
 

 
dependencies { 
 
    // Required -- JUnit 4 framework 
 
    testCompile 'junit:junit:4.12' 
 
    // Optional -- Mockito framework 
 
    testCompile 'org.mockito:mockito-core:1.10.19' 
 
    compile 'com.google.android.gms:play-services:10.2.0' 
 
    compile files('libs/AudenceNetwork-4.24.0.jar') 
 
    compile 'com.android.support:appcompat-v7:25.0.0' 
 
    compile 'com.android.support:recyclerview-v7:25.0.0' 
 
}

は、これは私がロードし、ショーの格子間どのようにスニペットと報わです: これはbuild.gradleですAndroidのネイティブテストアプリで正常に動作します。

私はUnityに適応しているので、ゲームに広告を表示できます。しかし、私は広告を表示するたびにランダムにアプリケーションをクラッシュさせます。ほとんどの場合、私は1つのインタースティシャルや報酬を見ることができますが、その後はクラッシュします。 com.facebook.ads.RewardedVideoAd.show()メソッドが呼び出されたときにそれがクラッシュ

AndroidManifest.xml 
 
appcompat-v7-24.0.0 
 
myaudiencenetworkadapter.aar 
 
play-services-10.0.1.aar 
 
play-services-auth-10.0.1 
 
play-services-auth-base-10.0.1 
 
play-services-basement-10.0.1 
 
play-services-drive-10.0.1 
 
play-services-tasks-10.0.1 
 
recyclerview-v7-24.0.0 
 
support-v4-24.0.0

これは私のようなプラグイン/ Androidのフォルダがどのように見えるかです。 これは、クラッシュのログです:

08-07 16:51:30.861 16820-16820/? E/AndroidRuntime: FATAL EXCEPTION: main 
 
    Process: com.somepackage.test, PID: 16820 
 
    java.lang.Error: FATAL EXCEPTION [main] 
 
    Unity version  : 5.5.3f1 
 
    Device model  : samsung SM-G925I 
 
    Device fingerprint: samsung/zeroltedv/zerolte:6.0.1/MMB29K/G925IDVS3EQF1:user/release-keys 
 
    
 
    Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void com.facebook.ads.internal.DisplayAdController.c()' on a null object reference 
 
\t at com.facebook.ads.RewardedVideoAd.show(Unknown Source) 
 
\t at com.boxit.ads.facebook.AudienceNetworkAdProvider$3.run(AudienceNetworkAdProvider.java:168) 
 
\t at android.os.Handler.handleCallback(Handler.java:739) 
 
\t at android.os.Handler.dispatchMessage(Handler.java:95) 
 
\t at android.os.Looper.loop(Looper.java:158) 
 
\t at android.app.ActivityThread.main(ActivityThread.java:7229) 
 
\t at java.lang.reflect.Method.invoke(Native Method) 
 
\t at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) 
 
\t at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)

任意のアイデア?

答えて

0

私はついにこの問題を解決しました。 私はUnityアクティビティからonPauseイベントでオーディエンスネットワーク広告を破壊していました。広告が表示されるたびにonPauseイベントが呼び出され、混乱していました。

1

ユニティFacebookのプラグインがあるうちに、AndroidスタジオでJavaとFacebook jarを使いこなすべきではありません。これを設定する方法についてはlink、実際のSDKを入手するにはhereを参照してください。あなたはそれはあなたが探しているものですので、あなたがInterstitialAdSceneシーンをロードする必要があるため、サンプルコードが含まれていInterstitialAdSceneRewardedVideoAdSceneNativeAdSceneシーンがありますプラグインをダウンロード

以下

AudienceNetwork \試料中InterstitialAdTest.csファイルからC#インタースティシャル広告の例です\間質フォルダ。

public class InterstitialAdTest : MonoBehaviour 
{ 

    private InterstitialAd interstitialAd; 
    private bool isLoaded; 

    // UI elements in scene 
    public Text statusLabel; 

    // Load button 
    public void LoadInterstitial() 
    { 
     this.statusLabel.text = "Loading interstitial ad..."; 

     // Create the interstitial unit with a placement ID (generate your own on the Facebook app settings). 
     // Use different ID for each ad placement in your app. 
     InterstitialAd interstitialAd = new InterstitialAd ("YOUR_PLACEMENT_ID"); 
     this.interstitialAd = interstitialAd; 
     this.interstitialAd.Register (this.gameObject); 

     // Set delegates to get notified on changes or when the user interacts with the ad. 
     this.interstitialAd.InterstitialAdDidLoad = (delegate() { 
      Debug.Log ("Interstitial ad loaded."); 
      this.isLoaded = true; 
      this.statusLabel.text = "Ad loaded. Click show to present!"; 
     }); 
     interstitialAd.InterstitialAdDidFailWithError = (delegate(string error) { 
      Debug.Log ("Interstitial ad failed to load with error: " + error); 
      this.statusLabel.text = "Interstitial ad failed to load. Check console for details."; 
     }); 
     interstitialAd.InterstitialAdWillLogImpression = (delegate() { 
      Debug.Log ("Interstitial ad logged impression."); 
     }); 
     interstitialAd.InterstitialAdDidClick = (delegate() { 
      Debug.Log ("Interstitial ad clicked."); 
     }); 

     // Initiate the request to load the ad. 
     this.interstitialAd.LoadAd(); 
    } 

    // Show button 
    public void ShowInterstitial() 
    { 
     if (this.isLoaded) { 
      this.interstitialAd.Show(); 
      this.isLoaded = false; 
      this.statusLabel.text = ""; 
     } else { 
      this.statusLabel.text = "Ad not loaded. Click load to request an ad."; 
     } 
    } 

    void OnDestroy() 
    { 
     // Dispose of interstitial ad when the scene is destroyed 
     if (this.interstitialAd != null) { 
      this.interstitialAd.Dispose(); 
     } 
     Debug.Log ("InterstitialAdTest was destroyed!"); 
    } 

    // Next button 
    public void NextScene() 
    { 
     SceneManager.LoadScene ("AdViewScene"); 
    } 
} 
+0

Androidのカスタム広告メディエーションを担当しているため、Facebookプラグインを使用できません。 –

+0

あなたの質問は、AndroidでUnityを使ってFacebook広告を表示しようとしていると言います...あなたのために書かれたfacebookプラグインを使用できないのはなぜですか? – Programmer

関連する問題