0

我正在使用下面的java代码:

public class MainActivity extends AppCompatActivity {


    private String unityGameID = "******";
    private Boolean testMode = false;
    private String placementIdbanner = "baner";
    private View bannerView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // Declare a new banner listener, and set it as the active banner listener:
        final IUnityBannerListener myBannerListener = new UnityBannerListener ();
        UnityBanners.setBannerListener (myBannerListener);
        // Initialize the Ads SDK:
        UnityAds.initialize (this, unityGameID, (IUnityAdsListener) myBannerListener, testMode);

    }

    public void ToggleBannerAd () {
        // If no banner exists, show one; otherwise remove the existing one:
        if (bannerView == null) {
            // Optionally specify the banner’s anchor position:
            UnityBanners.setBannerPosition(BannerPosition.BOTTOM_CENTER);
            // Request ad content for your Placement, and load the banner:
            UnityBanners.loadBanner(MainActivity.this, placementIdbanner);
        } else {
            UnityBanners.destroy();
        }
    }

    // Implement the banner listener interface methods:
    private class UnityBannerListener implements IUnityBannerListener {

        @Override
        public void onUnityBannerLoaded (String placementId, View view) {
            // When the banner content loads, add it to the view hierarchy:
            bannerView = view;
            //((ViewGroup) findViewById (R.id.unityads_example_layout_root)).addView (view);
        }

        @Override
        public void onUnityBannerUnloaded (String placementId) {
            // When the banner’s no longer in use, remove it from the view hierarchy:
            bannerView = null;
        }

        @Override
        public void onUnityBannerShow (String placementId) {
            // Called when the banner is first visible to the user.
        }

        @Override
        public void onUnityBannerClick (String placementId) {
            // Called when the banner is clicked.
        }

        @Override
        public void onUnityBannerHide (String placementId) {
            // Called when the banner is hidden from the user.
        }

        @Override
        public void onUnityBannerError (String message) {
            // Called when an error occurred, and the banner failed to load or show.
        }
    }

}

我在我的 logcat 中收到这些错误,如下所述:

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.firstapp, PID: 9228
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.firstapp/com.example.firstapp.MainActivity}: java.lang.ClassCastException: com.example.firstapp.MainActivity$UnityBannerListener cannot be cast to com.unity3d.ads.IUnityAdsListener
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3270)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3409)
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2016)
        at android.os.Handler.dispatchMessage(Handler.java:107)
        at android.os.Looper.loop(Looper.java:214)
        at android.app.ActivityThread.main(ActivityThread.java:7356)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
     Caused by: java.lang.ClassCastException: com.example.firstapp.MainActivity$UnityBannerListener cannot be cast to com.unity3d.ads.IUnityAdsListener
        at com.example.firstapp.MainActivity.onCreate(MainActivity.java:102)
        at android.app.Activity.performCreate(Activity.java:7802)
        at android.app.Activity.performCreate(Activity.java:7791)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1299)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3245)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3409) 
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83) 
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) 
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2016) 
        at android.os.Handler.dispatchMessage(Handler.java:107) 
        at android.os.Looper.loop(Looper.java:214) 
        at android.app.ActivityThread.main(ActivityThread.java:7356) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930) 

以上是我的 android 应用程序的代码和 logcat 输出。

我在我的应用程序中遵循了这个文档https://unityads.unity3d.com/help/android/integration-guide-android#banner-ads

请查看此文档并指导我如何从 UnityAds 实施此横幅广告。

4

2 回答 2

0

试试这个代码(它是 3.3.0 版本,请查看我在下面给出的新版本的 github 链接):

完整代码

private BannerView.IListener bannerAdViewListener= createBannerListener();
@Override
public View onCreateView(
    @NonNull LayoutInflater inflater, ViewGroup container,
    Bundle savedInstanceState) {
    View root = inflater.inflate(R.layout.fragment_unity_banners, container, false);
    this.bannerView= root.findViewById(R.id.top_banner_button);
   int widthInDp = Math.round(ViewUtilities.dpFromPx(self.getContext(), self.topBannerContainer.getWidth()));
                int heightInDp = Math.round(ViewUtilities.dpFromPx(self.getContext(), self.topBannerContainer.getHeight()));
                UnityBannerSize unityBannerSize = new UnityBannerSize(widthInDp, heightInDp);
    bannerView= new BannerView(getActivity(), "bannerads", unityBannerSize);
                bannerView.setListener(bannerAdViewListener);
                bannerView.load();
}

private BannerView.IListener createBannerListener() {
    final UnityBannersFragment self = this;
    return new BannerView.Listener() {
        @Override
        public void onBannerFailedToLoad(BannerView bannerAdView, BannerErrorInfo errorInfo) {
            if (self.topBannerView != null && self.topBannerView == bannerAdView) {
                self.topBannerContainer.removeView(self.topBannerView);
                self.topBannerView.destroy();
                self.topBannerView = null;
                self.topBannerButton.setText(R.string.show_top_banner);
            }
        }
        @Override
        public void onBannerLoaded(BannerView bannerAdView) {
            Log.d("UnityAdsExample", "onBannerLoded is called for: " + bannerAdView.getPlacementId());
        }

        @Override
        public void onBannerClick(BannerView bannerAdView) {
            Log.d("UnityAdsExample", "onBannerClick is called for: " + bannerAdView.getPlacementId());
        }

        @Override
        public void onBannerLeftApplication(BannerView bannerAdView) {
            Log.d("UnityAdsExample", "onBannerLeftApplication is called for: " + bannerAdView.getPlacementId());
        }
    };

}

有关更多详细信息,请使用 Unity github 链接中的此示例

于 2019-12-26T07:02:09.440 回答
0

您忘记在顶部实现 IUnityAdsListener :

public class MainActivity extends AppCompatActivity implements View.OnClickListener, IUnityAdsListener
于 2019-12-26T06:50:06.890 回答