2013-07-19 2 views
0

Android Advertising SDK가 새로운 DreamService 기능과 함께 작동하는지 알고있는 사람이 있습니까? AdMob을 사용해 보았는데 Interstitial 클래스 생성자가 명시 적으로 Activity가 필요하다는 것을 처음 보았습니다. AdView에 컨텍스트가 필요한 컨스트럭터가있어서 봤지만 런타임 예외가 발생하여 Activity가 아닌 Context를 사용하여 AdView를 부풀려했습니다. Amazon Mobile Ads API를 사용해 보았지만 AdMob과 동일하게 보입니다.Android Daydream/DreamService의 광고?

삽입 광고를 만드는 내 DreamService에서 다른 활동을 시작하려했지만 DreamService UI 뒤에 생성되었습니다 (Daydream이 모든 것을 오버레이하므로 다소 이해가됩니다). 백일몽에서 광고를 사용하는 데 대한 해결책을 아는 사람이 있습니까?

+0

정상적으로 작동 했습니까? 금전적/기술적으로? 나는 이것이 배터리/UX에 좋지 않다고 생각했다. – you786

답변

2

나는 아직도 해결책을 좋아하지 않지만이 문제를 해결하는 것을 생각해 냈습니다. 아무도 모른다면 더 우아한 접근을 환영 할 것입니다.

내가 한 것은 AdMob 대신 mMedia SDK를 사용하는 것입니다. Interstitial 및 AdView 클래스는 모두 생성자의 Activity가 아닌 Context를 취할 수 있습니다. 삽입 광고는 Dream 오버레이 뒤에 열리기 때문에 여전히 효과가 없습니다. 그래서 결국 DreamView의 XML 레이아웃에 AdView를 추가 한 다음 표시 할 때까지 View.GONE에 대한 가시성을 설정했습니다. 광고를 표시 할 때 View.VISIBLE로 설정했습니다.

내가 만난 다른 문제는 AdView를 클릭하면 광고의 목적을 무시하고 Dream의 뒤에서 열리는 광고의 URL로 브라우저를 시작한다는 것입니다. 그래서 나는 Dream를 interactive로 설정하고, onTouchEvent를 잡았고, click이 발생했을 때 Ad의 callOnClick 메소드를 호출하면 광고가 VISIBLE인지를 판단합니다. 또한 광고의 RequestListener를 내 Dream Service에 설정하고 광고가 브라우저를 시작할 때 호출되는 MMAdOverlayLaunched 메서드를 구현해야했습니다. 이 메소드에서 나는 Dream을 멈추고 브라우저에 광고를 표시하도록 finish()를 호출했습니다.

@Override 
public void onAttachedToWindow() { 
    super.onAttachedToWindow(); 
    // Exit dream upon user touch 
    setInteractive(true); 
    // Hide system UI 
    setFullscreen(true); 
    // Set the dream layout 
    setContentView(R.layout.dream_layout); 
    //Initialize Ads 
    this.initAdvertising(); 
} 

private void initAdvertising(){ 
    MMSDK.initialize(this); 
    mDreamAd = (MMAdView) findViewById(R.id.adView); 
    //Separate thread will handle showing the ad 
    mDreamAd.setVisibility(View.GONE); 
    mAdRequest = new MMRequest(); 
    //TODO add metadata to Request 
    mDreamAd.setMMRequest(mAdRequest); 
    mDreamAd.setListener(this); 
    mDreamAd.getAd(); 
} 

@Override 
public boolean dispatchTouchEvent(MotionEvent event){ 
    super.dispatchTouchEvent(event); 
    if(mDreamAd != null && mDreamAd.isShown()){ 
     mDreamAd.callOnClick(); 
    } 
    return true; 
} 

@Override 
public void MMAdOverlayLaunched(MMAd ad) { 
    //Finish so we can display the ad the user has clicked 
    if(ad.equals(this.mDreamAd)) 
     this.finish(); 

}