So i tried to call showAd method but i get an error becaues it’s not a static method
I’m using cocos 2.4.9, i used jsb.reflection and it works on static methods.
my AppActivity.java file :
package org.cocos2dx.javascript;
import org.cocos2dx.lib.Cocos2dxActivity;
import org.cocos2dx.lib.Cocos2dxGLSurfaceView;
import android.os.Bundle;
import android.content.Intent;
import android.content.res.Configuration;
import com.google.android.gms.ads.AdError;
import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.FullScreenContentCallback;
import com.google.android.gms.ads.LoadAdError;
import com.google.android.gms.ads.MobileAds;
import com.google.android.gms.ads.OnUserEarnedRewardListener;
import com.google.android.gms.ads.initialization.InitializationStatus;
import com.google.android.gms.ads.initialization.OnInitializationCompleteListener;
import com.google.android.gms.ads.rewarded.RewardItem;
import com.google.android.gms.ads.rewardedinterstitial.RewardedInterstitialAd;
import com.google.android.gms.ads.rewardedinterstitial.RewardedInterstitialAdLoadCallback;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import android.util.Log;
import androidx.annotation.NonNull;
public class AppActivity extends Cocos2dxActivity {
private static final String AD_UNIT_ID = "ca-app-pub-3940256099942544/5354046379";
private static final String TAG = "MainActivity";
private boolean gameOver;
private boolean gamePaused;
private RewardedInterstitialAd rewardedInterstitialAd;
private Button startButton;
private boolean isLoadingAds;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Workaround in
// https://stackoverflow.com/questions/16283079/re-launch-of-activity-on-home-button-but-only-the-first-time/16447508
if (!isTaskRoot()) {
// Android launched another instance of the root activity into an existing task
// so just quietly finish and go away, dropping the user back into the activity
// at the top of the stack (ie: the last state of this task)
// Don't need to finish it again since it's finished in super.onCreate .
return;
}
// DO OTHER INITIALIZATION BELOW
SDKWrapper.getInstance().init(this);
// Log.d(TAG, "Google Mobile Ads SDK Version: " + MobileAds.getVersion());
MobileAds.initialize(
this,
new OnInitializationCompleteListener() {
@Override
public void onInitializationComplete(InitializationStatus initializationStatus) {
loadRewardedInterstitialAd();
}
});
Toast.makeText(AppActivity.this, "Toast from Java ! ", Toast.LENGTH_SHORT).show();
}
public static void test(){
int x = 5;
int y = 12;
Log.d("TAG","start Add Method Called");
}
public void startAd(){
Toast.makeText(AppActivity.this, "start Add Method Called ", Toast.LENGTH_SHORT).show();
if (rewardedInterstitialAd != null) {
showRewardedVideo();
}
}
@Override
public Cocos2dxGLSurfaceView onCreateView() {
Cocos2dxGLSurfaceView glSurfaceView = new Cocos2dxGLSurfaceView(this);
// TestCpp should create stencil buffer
glSurfaceView.setEGLConfigChooser(5, 6, 5, 0, 16, 8);
SDKWrapper.getInstance().setGLSurfaceView(glSurfaceView, this);
return glSurfaceView;
}
@Override
protected void onResume() {
super.onResume();
SDKWrapper.getInstance().onResume();
}
@Override
protected void onPause() {
super.onPause();
SDKWrapper.getInstance().onPause();
}
@Override
protected void onDestroy() {
super.onDestroy();
// Workaround in https://stackoverflow.com/questions/16283079/re-launch-of-activity-on-home-button-but-only-the-first-time/16447508
if (!isTaskRoot()) {
return;
}
SDKWrapper.getInstance().onDestroy();
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
SDKWrapper.getInstance().onActivityResult(requestCode, resultCode, data);
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
SDKWrapper.getInstance().onNewIntent(intent);
}
@Override
protected void onRestart() {
super.onRestart();
SDKWrapper.getInstance().onRestart();
}
@Override
protected void onStop() {
super.onStop();
SDKWrapper.getInstance().onStop();
}
@Override
public void onBackPressed() {
SDKWrapper.getInstance().onBackPressed();
super.onBackPressed();
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
SDKWrapper.getInstance().onConfigurationChanged(newConfig);
super.onConfigurationChanged(newConfig);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
SDKWrapper.getInstance().onRestoreInstanceState(savedInstanceState);
super.onRestoreInstanceState(savedInstanceState);
}
@Override
protected void onSaveInstanceState(Bundle outState) {
SDKWrapper.getInstance().onSaveInstanceState(outState);
super.onSaveInstanceState(outState);
}
@Override
protected void onStart() {
if (rewardedInterstitialAd != null && !isLoadingAds) {
loadRewardedInterstitialAd();
}
SDKWrapper.getInstance().onStart();
super.onStart();
}
private void loadRewardedInterstitialAd() {
if (rewardedInterstitialAd == null) {
isLoadingAds = true;
AdRequest adRequest = new AdRequest.Builder().build();
// Use the test ad unit ID to load an ad.
RewardedInterstitialAd.load(
AppActivity.this,
AD_UNIT_ID,
adRequest,
new RewardedInterstitialAdLoadCallback() {
@Override
public void onAdLoaded(RewardedInterstitialAd ad) {
Log.d(TAG, "onAdLoaded");
rewardedInterstitialAd = ad;
isLoadingAds = false;
Toast.makeText(AppActivity.this, "onAdLoaded", Toast.LENGTH_SHORT).show();
}
@Override
public void onAdFailedToLoad(LoadAdError loadAdError) {
Log.d(TAG, "onAdFailedToLoad: " + loadAdError.getMessage());
// Handle the error.
rewardedInterstitialAd = null;
isLoadingAds = false;
Toast.makeText(AppActivity.this, "onAdFailedToLoad", Toast.LENGTH_SHORT).show();
}
});
}
}
private void showRewardedVideo() {
if (rewardedInterstitialAd == null) {
Log.d(TAG, "The rewarded interstitial ad wasn't ready yet.");
return;
}
rewardedInterstitialAd.setFullScreenContentCallback(
new FullScreenContentCallback() {
/** Called when ad showed the full screen content. */
@Override
public void onAdShowedFullScreenContent() {
Log.d(TAG, "onAdShowedFullScreenContent");
Toast.makeText(AppActivity.this, "onAdShowedFullScreenContent", Toast.LENGTH_SHORT)
.show();
}
/** Called when the ad failed to show full screen content. */
@Override
public void onAdFailedToShowFullScreenContent(AdError adError) {
Log.d(TAG, "onAdFailedToShowFullScreenContent: " + adError.getMessage());
Toast.makeText(
AppActivity.this, "onAdFailedToShowFullScreenContent", Toast.LENGTH_SHORT)
.show();
}
/** Called when the ad dismissed the full screen content. */
@Override
public void onAdDismissedFullScreenContent() {
Log.d(TAG, "onAdDismissedFullScreenContent");
Toast.makeText(AppActivity.this, "onAdDismissedFullScreenContent", Toast.LENGTH_SHORT)
.show();
rewardedInterstitialAd = null;
loadRewardedInterstitialAd();
}
});
rewardedInterstitialAd.show(
this,
new OnUserEarnedRewardListener() {
@Override
public void onUserEarnedReward(@NonNull RewardItem rewardItem) {
Log.d(TAG, "onUserEarnedReward");
Toast.makeText(AppActivity.this, "onUserEarnedReward", Toast.LENGTH_SHORT).show();
}
});
}
}
Javascript method to call ad : startAddBtn() { jsb.reflection.callStaticMethod("org/cocos2dx/javascript/AppActivity", "startAd", "()V");
does anyone know how can i call a non static method … or how can i make the loadrewarderinterstitialad method static … when i make it static i get an error because i can’t pass appActivity.this here RewardedInterstitialAd.load( AppActivity.this,
Thanks for the help !