123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392 |
- #import "adview_ios.h"
- #import <AdSupport/ASIdentifierManager.h>
- #import <CommonCrypto/CommonDigest.h>
- #import <SDL.h>
- //Ugly stuff, but need these 'coz admob interstitial/rewardedvideo don't suspend/resume app?
- //
- static void suspendApp(){
- //send a 'fake' SDL_APP_WILLENTERBACKGROUND to app.
-
- SDL_Event event={0};
- event.type=SDL_APP_WILLENTERBACKGROUND;
-
- if( SDL_PeepEvents( (SDL_Event*)&event,1,SDL_ADDEVENT,SDL_FIRSTEVENT,SDL_LASTEVENT )!=1 ){
- printf( "SDL_PeepEvents error: %s\n",SDL_GetError() );fflush( stdout );
- }
- }
- static void resumeApp(){
- //send a 'fake' SDL_APP_DIDENTERFOREGROUND to app.
-
- SDL_Event event={0};
- event.type=SDL_APP_DIDENTERFOREGROUND;
-
- if( SDL_PeepEvents( (SDL_Event*)&event,1,SDL_ADDEVENT,SDL_FIRSTEVENT,SDL_LASTEVENT )!=1 ){
- printf( "SDL_PeepEvents error: %s\n",SDL_GetError() );fflush( stdout );
- }
- }
- @implementation BBAdmobDelegate{
- BBAdView *_view;
- }
- -(id)initWithView:(BBAdView*)view{
- self=[super init];
-
- if( self ){
- _view=view;
- }
-
- return self;
- }
- -(void)adViewDidReceiveAd:(GADBannerView*)bannerView{
- printf( "Monkey2 AdViewDelegate: adViewDidReceiveAd\n" );fflush( stdout );
-
- _view->setState( 2 ); //Ready
- }
- -(void)adView:(GADBannerView*)bannerView didFailToReceiveAdWithError:(GADRequestError*)error{
- NSString *err=error.localizedDescription;
-
- printf( "Monkey2 AdViewDelegate: bannerView didFailToReceiveAdWithError '%s' code=%ld\n",[err UTF8String],(long)error.code );fflush( stdout );
-
- _view->_error=error.code==9 ? 1 : -1;
-
- _view->setState( 3 ); //Error
- }
- -(void)interstitialDidReceiveAd:(GADInterstitial*)interstitial{
- printf( "Monkey2 AdViewDelegate: interstitialDidReceivedAd\n" );fflush( stdout );
- _view->setState( 2 ); //Ready
- }
- -(void)interstitial:(GADInterstitial*)ad didFailToReceiveAdWithError:(GADRequestError*)error{
- NSString *err=error.localizedDescription;
-
- printf( "Monkey2 AdViewDelegate: interstitial didFailToReceiveAdWithError '%s' code=%ld\n",[err UTF8String],(long)error.code );fflush( stdout );
-
- _view->_error=error.code==9 ? 1 : -1;
- _view->setState( 3 ); //Error
- }
- -(void)interstitialWillPresentScreen:(GADInterstitial*)interstitial{
- printf( "Monkey2 AdViewDelegate: interstitialWillPresentScreen\n" );fflush( stdout );
-
- suspendApp();
- }
- -(void)interstitialDidDismissScreen:(GADInterstitial*)interstitial{
- printf( "Monkey2 AdViewDelegate: interstitialDidDismissScreen\n" );fflush( stdout );
-
- _view->setState( 0 ); //Initial
-
- resumeApp();
- }
- -(void)rewardBasedVideoAd:(GADRewardBasedVideoAd*)rewardBasedVideoAd didRewardUserWithReward:(GADAdReward*)reward{
- printf( "Monkey2 AdViewDelegate: rewardBasedVideoAd didRewardUserWithReward, type='%s', amount=%l\n",[reward.type UTF8String],[reward.amount doubleValue] );fflush( stdout );
-
- _view->_rewardType=bbString( reward.type ); //careful! threading...
-
- _view->_rewardAmount=(int)[reward.amount doubleValue];
- }
- -(void)rewardBasedVideoAdDidReceiveAd:(GADRewardBasedVideoAd*)rewardBasedVideoAd{
- printf( "Monkey2 AdViewDelegate: rewardBasedVideoAdDidReceiveAd\n" );fflush( stdout );
- _view->setState( 2 ); //Ready
- }
- -(void)rewardBasedVideoAd:(GADRewardBasedVideoAd*)rewardBasedVideoAd didFailToLoadWithError:(NSError*)error{
- NSString *err=error.localizedDescription;
-
- printf( "Monkey2 AdViewDelegate: rewardBasedVideoAd didFailToLoadWithError '%s' code=%ld\n",[err UTF8String],(long)error.code );fflush( stdout );
-
- _view->_error=error.code==9 ? 1 : -1;
- _view->setState( 3 ); //Error
- }
- -(void)rewardBasedVideoAdDidOpen:(GADRewardBasedVideoAd*)rewardBasedVideoAd{
- printf( "Monkey2 AdViewDelegate: rewardBasedVideoAdDidOpen\n" );fflush( stdout );
- // _view->setState( 4 ); //Playing
-
- suspendApp();
- }
- -(void)rewardBasedVideoAdDidClose:(GADRewardBasedVideoAd*)rewardBasedVideoAd{
- printf( "Monkey2 AdViewDelegate: rewardBasedVideoAdDidClose\n" );fflush( stdout );
-
- _view->setState( 0 ); //Initial
- resumeApp();
- }
- -(void)rewardBasedVideoAdDidStartPlaying:(GADRewardBasedVideoAd*)rewardBasedVideoAd{
- printf( "Monkey2 AdViewDelegate: rewardBasedVideoAdDidStartPlaying\n" );fflush( stdout );
- }
- -(void)rewardBasedVideoAdWillLeaveApplication:(GADRewardBasedVideoAd*)rewardBasedVideoAd{
- printf( "Monkey2 AdViewDelegate: rewardBasedVideoAdWillLeaveApplication\n" );fflush( stdout );
- }
- @end
- static NSString *admobDeviceID(){
- NSUUID* adid = [[ASIdentifierManager sharedManager] advertisingIdentifier];
- const char *cStr = [adid.UUIDString UTF8String];
- unsigned char digest[16];
- CC_MD5( cStr, strlen(cStr), digest );
- NSMutableString *output = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH * 2];
- for(int i = 0; i < CC_MD5_DIGEST_LENGTH; i++)
- [output appendFormat:@"%02x", digest[i]];
- return output;
- }
- BBAdView::BBAdView( bbString size,bbString layout,bbString adUnitId,bbBool visible ):_size( size ),_layout( layout ),_adUnitId( adUnitId ),_visible( visible ){
- }
- void BBAdView::start( int callback ){
- _callback=callback;
- _adDelegate=[[BBAdmobDelegate alloc] initWithView:this];
-
- _adRequest=[GADRequest request];
-
- if( _size=="rewardedvideo" ){
-
- if( _adUnitId=="" ) _adUnitId="ca-app-pub-3940256099942544/1712485313";
-
- createRewardBasedVideoAd();
-
- }else if( _size=="interstitial" ){
-
- if( _adUnitId=="" ) _adUnitId="ca-app-pub-3940256099942544/1033173712";
-
- createInterstitialAd();
-
- }else{
-
- if( _adUnitId=="" ) _adUnitId="ca-app-pub-3940256099942544/6300978111";
- createBannerAd();
- }
- }
- void BBAdView::setState( int state ){
- if( state==_state ) return;
-
- _state=state;
-
- bbAsync::invokeAsyncCallback( _callback );
- }
- void BBAdView::createRewardBasedVideoAd(){
- _rewardBasedVideoAd=[GADRewardBasedVideoAd sharedInstance];
-
- _rewardBasedVideoAd.delegate=_adDelegate;
-
- [_rewardBasedVideoAd loadRequest:[GADRequest request] withAdUnitID:[NSString stringWithUTF8String:_adUnitId.c_str()]];
-
- setState( 1 );
- }
- void BBAdView::createInterstitialAd(){
-
- _interstitialAd=[[GADInterstitial alloc] initWithAdUnitID:[NSString stringWithUTF8String:_adUnitId.c_str()]];
-
- _interstitialAd.delegate=_adDelegate;
-
- [_interstitialAd loadRequest:[GADRequest request]];
-
- setState( 1 );
- }
- void BBAdView::createBannerAd(){
-
- UIWindow *keyWindow=[UIApplication sharedApplication].keyWindow;
- if( !keyWindow ) return;
-
- UIViewController *rootViewController=keyWindow.rootViewController;
- if( !rootViewController ) return;
-
- GADAdSize adSize=kGADAdSizeBanner;
- if( _size=="banner" ){
- adSize=kGADAdSizeBanner;
- }else if( _size=="large-banner" ){
- adSize=kGADAdSizeLargeBanner;
- }else if( _size=="medium-rectangle" ){
- adSize=kGADAdSizeMediumRectangle;
- }else if( _size=="full-banner" ){
- adSize=kGADAdSizeFullBanner;
- }else if( _size=="leaderboard" ){
- adSize=kGADAdSizeLeaderboard;
- }
-
- _adView=[[GADBannerView alloc] initWithAdSize:adSize];
- _adView.delegate=_adDelegate;
- _adView.adUnitID=[NSString stringWithUTF8String:_adUnitId.c_str()];
- _adView.rootViewController=rootViewController;
- _adView.hidden=_visible ? NO : YES;
-
- CGRect b1=keyWindow.bounds;
- CGRect b2=_adView.frame;
-
- if( _layout=="top-left" ){
- _adView.autoresizingMask=UIViewAutoresizingFlexibleRightMargin|UIViewAutoresizingFlexibleBottomMargin;
- }else if( _layout=="top" ){
- b2.origin.x=(b1.size.width-b2.size.width)/2;
- _adView.autoresizingMask=UIViewAutoresizingFlexibleLeftMargin|UIViewAutoresizingFlexibleRightMargin|UIViewAutoresizingFlexibleBottomMargin;
- }else if( _layout=="top-right" ){
- b2.origin.x=(b1.size.width-b2.size.width);
- _adView.autoresizingMask=UIViewAutoresizingFlexibleLeftMargin|UIViewAutoresizingFlexibleBottomMargin;
- }else if( _layout=="bottom-left" ){
- b2.origin.y=(b1.size.height-b2.size.height);
- _adView.autoresizingMask=UIViewAutoresizingFlexibleRightMargin|UIViewAutoresizingFlexibleTopMargin;
- }else if( _layout=="bottom" ){
- b2.origin.x=(b1.size.width-b2.size.width)/2;
- b2.origin.y=(b1.size.height-b2.size.height);
- _adView.autoresizingMask=UIViewAutoresizingFlexibleLeftMargin|UIViewAutoresizingFlexibleRightMargin|UIViewAutoresizingFlexibleTopMargin;
- }else if( _layout=="bottom-right" ){
- b2.origin.x=(b1.size.width-b2.size.width);
- b2.origin.y=(b1.size.height-b2.size.height);
- _adView.autoresizingMask=UIViewAutoresizingFlexibleLeftMargin|UIViewAutoresizingFlexibleTopMargin;
- }else{
- b2.origin.x=(b1.size.width-b2.size.width)/2;
- b2.origin.y=(b1.size.height-b2.size.height)/2;
- _adView.autoresizingMask=UIViewAutoresizingFlexibleLeftMargin|UIViewAutoresizingFlexibleRightMargin|UIViewAutoresizingFlexibleTopMargin|UIViewAutoresizingFlexibleBottomMargin;
- }
-
- _adView.frame=b2;
-
- [_adView.rootViewController.view addSubview:_adView];
-
- [_adView loadRequest:_adRequest];
-
- setState( 1 );
- }
-
- void BBAdView::setVisible( bool visible ){
- if( _adView ){
- _adView.hidden=!visible;
- return;
- }
-
- if( !visible ) return;
- if( _state!=2 ){
- printf( "Monkey2 AdView setVisible error, expecting _state==2, but _state==%i\n",_state );fflush( stdout );
- return;
- }
- if( _rewardBasedVideoAd ){
-
- if( _rewardBasedVideoAd.isReady ){
-
- UIWindow *keyWindow=[UIApplication sharedApplication].keyWindow;
- if( !keyWindow ) return;
-
- UIViewController *rootViewController=keyWindow.rootViewController;
- if( !rootViewController ) return;
-
- [_rewardBasedVideoAd presentFromRootViewController:rootViewController];
-
- }
-
- }else if( _interstitialAd ){
-
- if( _interstitialAd.isReady ){
-
- UIWindow *keyWindow=[UIApplication sharedApplication].keyWindow;
- if( !keyWindow ) return;
-
- UIViewController *rootViewController=keyWindow.rootViewController;
- if( !rootViewController ) return;
-
- [_interstitialAd presentFromRootViewController:rootViewController];
- }
- }
- }
- bool BBAdView::getVisible(){
- return _adView && _adView.hidden==NO;
- }
- int BBAdView::getState(){
- return _state;
- }
- int BBAdView::getError(){
- return _error;
- }
- bbString BBAdView::getRewardType(){
- return _rewardType;
- }
- int BBAdView::getRewardAmount(){
- return _rewardAmount;
- }
- void BBAdView::consumeReward(){
- _rewardType="";
-
- _rewardAmount=0;
- }
- void BBAdView::reload(){
- _state=0;
- if( _size=="rewardedvideo" ){
-
- createRewardBasedVideoAd();
-
- }else if( _size=="interstitial" ){
-
- createInterstitialAd();
-
- }else{
-
- createBannerAd();
- }
- }
|