2015-05-05 8 views
5

Zasadniczo próbuję załadować baner reklamowy do mojego projektu Unity 5 i eksportować do iOS.Jak załadować reklamy AdMob do projektu Unity 5?

Oto kod ja dzwonię wnętrza jedności, która jest przymocowana do obiektu gra:

using UnityEngine; 
using System.Collections; 
using GoogleMobileAds.Api; 
using System; 

public class AdController : MonoBehaviour { 

    InterstitialAd interstitial; 
    BannerView bannerView; 

    void Start() { 

     //------ Banner Ad ------- 
     // Create a 320x50 banner at the top of the screen. 
     // Put your Admob banner ad id here 
     bannerView = new BannerView(
      "ca-app-pub-xxxxxxxxxxxxxxxx", AdSize.SmartBanner, AdPosition.Top); 
     // Create ad request 
     AdRequest request = new AdRequest.Builder().Build(); 
     // Load the banner with the request. 
     bannerView.LoadAd(request);   
     bannerView.Show(); 

     //---- Interstitial Ad ----- 
     // Initialize an InterstitialAd. 
     // Put your admob interstitial ad id here: 
     interstitial = new InterstitialAd("ca-app-pub-xxxxxxxxxxxxxxx"); 

     //Add callback for when ad is loaded 
     interstitial.AdLoaded += HandleAdLoaded; 

     // Create an ad request. 
     AdRequest requestInterstitial = new AdRequest.Builder().Build(); 
     // Load the interstitial with the request. 
     interstitial.LoadAd(requestInterstitial); 
    } 



    public void HandleAdLoaded(object sender, EventArgs args) { 

     interstitial.Show(); 
    } 


    void OnDestroy(){ 
     if (interstitial!=null) { 
      interstitial.AdLoaded -= HandleAdLoaded; 
      interstitial.Destroy(); 
     } 
     if(bannerView!=null){ 
      bannerView.Destroy(); 
     } 
    } 

} 

Używam:

  • Unity 5.0.1f1
  • Xcode 6.3
  • Wtyczka Google Unity 2.2.1
  • Pakiet reklam Google 7.2.1

Czy ktoś ma to do wyświetlania reklam? Uwaga: zastąpiłem xxxxx prawidłowym identyfikatorem jednostki reklamowej.

Odpowiedz

0
  1. dodać trochę kodu do projektu jedności
    • dodać ten C# klasy do projektu Unity
    • wywoływać funkcje tej klasy gdzieś z projektu
  2. wywołać konstruktor „AD_AdsiOS” najszybciej jak to możliwe i podaj swój identyfikator AdMob Ad ID:
  3. Zadzwoń "ShowInterstitialAd", aby wyświetlić reklamę pełnoekranową.
  4. Zadzwoń "Pokaż" BannerAdTopRight”, aby pokazać banerów reklamowych w prawym górnym rogu
  5. połączeń "HideBannerAds", aby ukryć baner

#if UNITY_IPHONE 
 
using UnityEngine; 
 
using System.Collections; 
 
using System.Runtime.InteropServices; 
 
    
 
public class AD_AdsiOS 
 
{ 
 
#if !UNITY_EDITOR 
 
    [DllImport ("__Internal")] 
 
    private static extern void _initAds(string p_adMobID); 
 
    [DllImport ("__Internal")] 
 
    private static extern void _showInterstitialAd(); 
 
    [DllImport ("__Internal")] 
 
    private static extern void _showBannerAdTopRight(); 
 
    [DllImport ("__Internal")] 
 
    private static extern void _hideBannerAds(); 
 
#endif 
 
    
 
    public AD_AdsiOS(string p_adMobID) 
 
    { 
 
#if UNITY_EDITOR 
 
     Debug.Log("AD_AdsiOS: will not work in editor."); 
 
#else 
 
     _initAds(p_adMobID); 
 
#endif 
 
    } 
 
    
 
    public void ShowInterstitialAd() 
 
    { 
 
#if UNITY_EDITOR 
 
     Debug.Log("AD_AdsiOS: ShowInterstitialAd called in editor."); 
 
#else 
 
     _showInterstitialAd(); 
 
#endif 
 
    } 
 
    
 
    public void ShowBannerAdTopRight() 
 
    { 
 
#if UNITY_EDITOR 
 
     Debug.Log("AD_AdsiOS: ShowBannerAdTopRight called in editor."); 
 
#else 
 
     _showBannerAdTopRight(); 
 
#endif 
 
    } 
 
    
 
    public void HideBannerAds() 
 
    { 
 
#if UNITY_EDITOR 
 
     Debug.Log("AD_AdsiOS: HideBannerAds called in editor."); 
 
#else 
 
     _hideBannerAds(); 
 
#endif 
 
    } 
 
} 
 
#endif

  • skompilować do Xcode
  • KROK 1 GOTOWE :)

    1. Zarządzanie bibliotekami w Xcode (źródło: https://developers.google.com/mobile-ads-sdk/docs/)
  • Pobierz AdMob SDK
  • Utwórz nowy folder w folderze głównym projektu o nazwie "GoogleAdMobAdsSdkiOS"
  • skopiuj wszystkie pliki z pobranego SDK (ale nie "Folder dodatków") do nowego "GoogleAdMobAdsSdkiOS"
  • Kliknij prawym przyciskiem myszy swój projekt ("Unity-iPhone") i naciśnij "Dodaj pliki do Unity iPhone" i wybierz nowy folder "GoogleAdMobAdsSdkiOS" w katalogu głównym projektu
  • Otwórz menu Połącz pliki binarne z bibliotekami w obszarze B uild Phases tab. Dodaj frameworki z zestawu SDK do iOS za pomocą przycisku +, który staje się widoczny. Dodaj SystemConfiguration, StoreKit, MessageUI, AVFoundation i AdSupport do obu celów (sprawdź kroki 1 i 2 rozwiązywania problemów).
  • Musisz teraz dodać -ObjC do flag innych łączników! PROJEKT!(A nie celami)
  • Krok 2 zrobienia: D

    1. dodać kod (źródło: https://developers.google.com/mobile-ads-sdk/docs/admob/fundamentals)
  • dodać następujące dwa pliki do „klas "folder projektu i ich importować

MyAdMobAdsImpl.h

#ifndef __Unity_iPhone__MyAdMobAdsImpl__ 
#define __Unity_iPhone__MyAdMobAdsImpl__ 


void InitMyAdMob(UIView* p_rootView, UIViewController* p_rootController); 
void DestroyMyAdMob(); 

#endif /* defined(__Unity_iPhone__MyAdMobAdsImpl__) */ 

MyAdMobAdsImpl.mm

#import "GADBannerView.h" 
 
#import "GADInterstitial.h" 
 
    
 
#include "MyAdMobAdsImpl.h" 
 
    
 
NSString* _adMobID; 
 
UIViewController* _adRootViewController; 
 
GADBannerView* _adBanner; 
 
GADInterstitial *_adInterstitial; 
 
float _adBannerRelWidth; 
 
float _adBannerRelHeight; 
 
    
 
extern "C" 
 
{ 
 
    void _initAds (const char* p_adMobID) 
 
    { 
 
     _adMobID = [NSString stringWithUTF8String:p_adMobID]; 
 
    
 
     _adBanner.adUnitID = _adMobID; 
 
    
 
     _adInterstitial.adUnitID = _adMobID; 
 
     GADRequest *request = [GADRequest request]; 
 
     [_adInterstitial loadRequest:request]; 
 
    
 
    } 
 
    
 
    void _showInterstitialAd() 
 
    { 
 
     [_adInterstitial presentFromRootViewController:_adRootViewController]; 
 
     // get next add 
 
     _adInterstitial = [[GADInterstitial alloc] init]; 
 
     _adInterstitial.adUnitID = _adMobID; 
 
     GADRequest *request = [GADRequest request]; 
 
     [_adInterstitial loadRequest:request]; 
 
    } 
 
    
 
    void _showBannerAdTopRight() 
 
    { 
 
     _adBanner.hidden = NO; 
 
     // force refresh 
 
     GADRequest *request = [GADRequest request]; 
 
     [_adBanner loadRequest:request]; 
 
    } 
 
    
 
    void _hideBannerAds() 
 
    { 
 
     _adBanner.hidden = YES; 
 
    } 
 
    
 
    float _getAdsRelativeWidth() { return _adBannerRelWidth; } 
 
    
 
    float _getAdsRelativeHeight() { return _adBannerRelHeight; } 
 
} 
 
    
 
void InitMyAdMob(UIView* p_rootView, UIViewController* p_rootController) 
 
{ 
 
    _adRootViewController = p_rootController; 
 
    // Initialize the banner at the bottom of the screen. 
 
    CGPoint origin = CGPointMake(0.0, 0.0); 
 
    // Use predefined GADAdSize constants to define the GADBannerView. 
 
    _adBanner = [[[GADBannerView alloc] initWithAdSize:kGADAdSizeBanner origin:origin] autorelease]; 
 
    [_adBanner setRootViewController:p_rootController]; 
 
    [p_rootView addSubview:_adBanner]; 
 
    // ios frame size is not rotated -> exchange width-height 
 
    _adBannerRelWidth = kGADAdSizeBanner.size.width/p_rootView.frame.size.height; 
 
    _adBannerRelHeight = kGADAdSizeBanner.size.height/p_rootView.frame.size.width; 
 
    _adBanner.center = CGPointMake(_adBanner.center.x+ 
 
            MAX(p_rootView.frame.size.height-kGADAdSizeBanner.size.width, 
 
             p_rootView.frame.size.width-kGADAdSizeBanner.size.width), 
 
            _adBanner.center.y); 
 
    
 
    // Initialize the interstitial ad 
 
    _adInterstitial = [[GADInterstitial alloc] init]; 
 
} 
 
    
 
void DestroyMyAdMob() 
 
{ 
 
    _adBanner.delegate = nil; 
 
    [_adBanner release]; 
 
    
 
    [_adInterstitial release]; 
 
}

Te dwa pliki realizować logikę AdMob. Za pomocą tego kodu można wyświetlać i ukrywać banery reklamowe w prawym górnym rogu i wyświetlać reklamy pełnoekranowe. Dodatkowo, przy pomocy getAdsRelative * można uzyskać rozmiar banera na względnym obszarze ekranu (0,1 dla szerokości oznacza, że ​​baner zajmuje 0.1 * Screen.width pixels). Te metody nie są odniesieniami w kroku pierwszym dla uproszczenia, ale możesz ich użyć, jeśli potrzebujesz.

  • Teraz "InitMyAdMob" i "metody" DestroyMyAdMob musi być wywoływana z Unity klas
  • otworzyć „UI/UnityAppController + ViewHandling.mm "file
  • Dodaj następujący kod poniżej ostatniego #include: Code (CSharp):

//// ******************* //// 
 
//// *** AdMob START *** //// 
 
//// ******************* //// 
 
    #import "MyAdMobAdsImpl.h" 
 
//// ******************* //// 
 
//// *** AdMob END *** //// 
 
//// ******************* ////

  • Dodaj następujący kod do funkcji "createViewHierarchy" tuż przed" [_window makeKeyAndVisible]; " Kod (CSharp):

//// ******************* //// 
 
    //// *** AdMob START *** //// 
 
    //// ******************* //// 
 
    InitMyAdMob(_rootView, _rootController); 
 
    //// ******************* //// 
 
    //// *** AdMob END *** //// 
 
    //// ******************* ////

  • Dodaj następujący kod na początku "releaseViewHierarchy" Funkcja Code (CSharp):

//// ******************* //// 
 
    //// *** AdMob START *** //// 
 
    //// ******************* //// 
 
    DestroyMyAdMob(); 
 
    //// ******************* //// 
 
    //// *** AdMob END *** //// 
 
    //// ******************* ////

  • KROK 3 Gotowe: p

    1. Rozwiązywanie
    1. jeśli się "biblioteka nie znaleziono -liPhone-lib" upewnij się, aby przenieść go do top w fazach Build Tab-> link binarnych z biblioteki rozwijane
    1. jeśli masz "Undefined symbol ... _OBJC_CLASS _ $ _ CTTelephonyNetworkInfo" dodać CoreTelephony w fazach Build Tab-> link Binarny z Biblioteki rozwijanej
    1. jeśli uzyska około 20 błędów wszystko w NSObjCRuntime.h lub jakiegoś podobnego pliku NSObjC *: upewnić się, że 'File Type' rozwijana jest ustawiona na "Objective-C++ Source" (w skrajnej prawej kolumnie po wybraniu pliku) dla plików dodawanych do projektu. W ten sposób traktuje pliki poprawnie i używa właściwych ścieżek i innych rzeczy. źródło: http://forum.thegamecreators.com/?m=forum_view&t=201075&b=41
    1. w nowej wersji XCode z nowszych AdMob wersja dodatkowych bibliotek muszą zostać dodane (EventKit.framework i EventKitUI.framework). Albo dostaniesz: "_OBJC_CLASS _ $ _ EKEvent", odwołuje się od: objc-klasa-ref w libGoogleAdMobAds.a (GADOpener.o) "_OBJC_CLASS _ $ _ EKEventEditViewController", odwołuje się od: objc-klasa-ref w libGoogleAdMobAds.a (GADOpener.o)

http: // stackoverflow.com/pytania/25950990/undefined-symbole-for-architektura-kiedy-add-AdMob

+0

nadzieję, że to pomaga .. –

+0

http://a2dr.blogspot.in/2015/03/how-to-integrate-admob-into-unity-5-ios_31.html aby uzyskać pomoc .. –

+0

powyższy przykład dotyczy starszej wersji AdMob SDK i starszej wersji Xcode. – loyalpenguin

0

Jest to projekt na GitHub:

Unity Admob Plugin

to łatwy w użyciu, a ja mam sukces z tego .

using admob; 
... 
Admob.Instance().initAdmob("admob banner id", "admob interstitial id");//admob id with format ca-app-pub-2796046890663330/756767388 
Admob.Instance().showBannerRelative(AdSize.Banner, AdPosition.BOTTOM_CENTER, 0); 
Powiązane problemy