네이티브 광고

인모비 네이티브 광고는 앱의 콘텐츠에 원활하게 섞여 들어가 사용자 경험에 영향을 주지 않으면서 사용자 참여를 최대화합니다. 앱의 디자인과 가장 잘 맞는 레이아웃을 선택하여 사용자 지정할 수 있습니다. 인모비 네이티브 광고는 뉴스, 유틸리티 및 커뮤니케이션 앱에 이상적입니다.

인모비 네이티브 광고는 비디오 및/또는 정적 이미지를 모두 포함할 수 있습니다. 배치 위치에 따라 다음을 선택할 수 있습니다.

  • 인피드 광고 - 음소거된 자동 재생 HD 비디오 또는 간단한 정적 이미지 광고입니다.
  • 스플래시 광고 - 앱 실행 화면에 혼합되어 앱이 백그라운드에서 로드될 때 사용자 시간으로 수익을 창출합니다. 음소거된 자동 재생 HD 비디오 광고 또는 간단한 정적 이미지 광고가 사용될 수 있습니다.

다음의 간단한 단계에 따라 네이티브 광고를 통해 수익을 창출하십시오.

네이티브 광고 배치 위치 설정

  1. 네이티브 콘텐츠 배치를 생성합니다.
  2. 인피드 비디오 광고 배치

    1. 네이티브 광고 레이아웃으로 STREAM을 선택합니다.
    2. 인피드 비디오의 경우 가로 세로 비율 256:135 또는 16:9를 선택합니다. 두 가로 세로 비율을 선택할 경우 비슷한 가로 세로 비율로 기본 정적 네이티브 폴백이 활성화됩니다.


    정적 피드 광고 배치

    1. 네이티브 광고 레이아웃으로 FEED를 선택합니다.
    2. 통합 코드에서 nativeAd.getPrimaryViewOfWidth(context,convertView, parent, width);를 확인합니다.
      primaryView를 가져오는 동안 너비를 25로 지정합니다. 그러면 AdChoices 아이콘이 표시되고 광고 렌더링 이벤트가 실행됩니다.


    스플래시 비디오 광고 배치

    • 옵션 1 - 320*568 스플래시 광고의 경우:

      네이티브 광고 레이아웃으로 SPLASH를 선택합니다.

    • 옵션 2 - 320*480 스플래시 광고의 경우:
      1. 네이티브 광고 레이아웃으로 STREAM을 선택합니다.
      2. 가로 세로 비율 2:3을 선택합니다. 그러면 비슷한 가로 세로 비율로 기본 정적 네이티브 폴백이 활성화됩니다.

앱에 네이티브 광고 추가

네이티브 광고 생성

네이티브 광고를 생성하려면 InMobiNative 인스턴스를 생성합니다.

public class NativeAdsActivity extends Activity {
private final List<inmobinative> mNativeAds = new ArrayList<>();
InMobiNative nativeAd = new InMobiNative(NativeAdsActivity.this, YOUR_PLACEMENT_ID, nativeAdEventListener);
nativeAd.load();
mNativeAds.add(nativeAd);
	</inmobinative>

여기서 nativeAdEventListenerNativeAdEventListener 추상 클래스의 구현입니다. 네이티브 광고를 작성하려면 이 인터페이스의 구현을 제공해야 합니다.

필수: InMobiNative 생성자에 컨텍스트 구현을 제공해야합니다.. 구현 시 InMobiNative에 대한 강력한 참조가 있는지 확인하십시오. 그렇지 않으면 SDK에서 이 참조를 위해 콜백을 받을 수 없습니다. 이를 위해서는 클래스의 멤버 변수로 만들거나 애플리케이션 수명 주기 동안 존재하는 컬렉션에 저장합니다.

NativeAdListener 인터페이스를 사용하면 네이티브 광고의 키 수명 주기 이벤트를 수신할 수 있습니다.

  • inMobiNative 는 항상 강력한 참조 여야합니다. 그렇지 않으면이 참조에 대해 콜백 (로드 성공,로드 실패 등)을 수신하지 못할 수 있습니다.
  • inMobiNative 가 모든 변수에 의해 참조되는 경우 해당 참조가 강력한 참조인지 확인하십시오.
  • android 프로파일 러를 사용하여 가비지 수집으로 인해 inMobiNative 가 제거되지 않도록하십시오.

NativeAdEventListener추상 클래스를 사용하면 기본 광고의 주요 수명주기 이벤트를 수신 할 수 있습니다.

/**
* A listener for receiving notifications during the lifecycle of a Native ad.
*/
public abstract class NativeAdEventListener {
/**
* Called to indicate that an ad is available in response to a request for an ad (by calling
* {@link InMobiNative#load()}. 

<strong>Note</strong> This does not * indicate that the ad can be shown yet. 
Your code should show an ad <strong>after</strong> the 
* {@link #onAdLoadSucceeded(InMobiNative)} method is called. 
Alternately, if you do not * want to handle this event, 
you must test if the ad is ready to be shown by checking the * result of calling the 
{@link InMobiNative#isReady()} method.* * 

@param ad Represents the {@link InMobiNative} ad for which ad content was received 
*/ public void onAdReceived(InMobiNative ad) {} 
/** * Called to indicate that an ad was loaded and it can now be shown. 
This will always be called * after the {@link #onAdReceived(InMobiNative)} callback. 
* * @param ad Represents the {@link InMobiNative} ad which was loaded */ 

public void onAdLoadSucceeded(InMobiNative ad) {} 
/** * Called to notify that a native ad failed to load. 
* * @param ad Represents the {@link InMobiNative} ad which failed to load 
* @param requestStatus Represents the {@link InMobiAdRequestStatus} status containing error reason */ 

public void onAdLoadFailed(InMobiNative ad, InMobiAdRequestStatus requestStatus) {} 
/** * * @param ad Represents the {@link InMobiNative} ad whose fullscreen was dismissed */ 

public void onAdFullScreenDismissed(InMobiNative ad) {} 
/** * Called to notify that the ad will open an overlay that covers the screen. 
* * @param ad Represents the {@link InMobiNative} ad which will go fullscreen */ 

public void onAdFullScreenWillDisplay(InMobiNative ad) {} 
/** * Called to notify that the ad opened an overlay that covers the screen. 
* * @param ad Represents the {@link InMobiNative} ad whose fullscreen will be displayed */ 

public void onAdFullScreenDisplayed(InMobiNative ad) {} 
/** * Called to notify that the user is about to leave the application as a result of interacting with it. 
* * @param ad Represents the {@link InMobiNative} ad */ 

public void onUserWillLeaveApplication(InMobiNative ad) {} 
/** * Called to notify impression has been recorded for this ad. Note:Override this method to notify 
* viewable impression to the Mediation Adapter. 
* * @param ad Represents the {@link InMobiNative} ad for which impression is recorded. */ 

public void onAdImpressed(InMobiNative ad) {} 
/** * Called to notify ad was clicked. Note:Override this method to notify click to the Mediation Adapter. 
* * @param ad Represents the {@link InMobiNative} ad which was clicked */ 

public void onAdClicked(InMobiNative ad) {} 
/** * Called to notify that the ad status has changed. 
* * @param nativeAd Represents the {@link InMobiNative} ad */ 

public void onAdStatusChanged(InMobiNative nativeAd) {} }

VideoEventListener추상 클래스를 사용하면 기본 광고의 동영상주기 이벤트를 수신 할 수 있습니다.

/**
* A listener for receiving notifications during the lifecycle of a Native ad.
*/
public abstract class VideoEventListener {
   /**
    * Called to notify that the video has finished playing.
    *
    * @param ad Represents the {@link InMobiNative} ad
    */
   public void onVideoCompleted(InMobiNative ad) {
   }
   /**
    * Called to notify that the user has skipped video play.
    *
    * @param ad Represents the {@link InMobiNative} ad
    */
   public void onVideoSkipped(InMobiNative ad) {
   }
   /**
    * Called to notify when media audio state changes.
    *
    * @param isMuted Represents whether media is muted or not.
    */
   public void onAudioStateChanged(InMobiNative inMobiNative, boolean isMuted) {
   }
}
	

네이티브 광고 로드

네이티브 광고를 요청하려면 위에 생성한 InMobiNative 인스턴스의 load() 메서드를 호출하십시오.

nativeAd.load();
	

NativeAdEventListener 추상 클래스는이 메서드의 결과를 알립니다. 광고 요청이 완료되면 onAdReceived(InMobiNative) 이벤트가 생성됩니다. 그 다음에 onAdLoadSucceeded 또는 onAdLoadFailed 이벤트가옵니다. onAdLoadFailed 이벤트가 생성되면이 이벤트에서 전달 된 InMobiAdRequestStatus 개체의 이유가 표시됩니다.

비디오 이벤트 듣기

비디오 이벤트를 받으려면 위에 작성한 InMobiNative 인스턴스에 setVideoEventListener (VideoEventListener videoEventListener ) 메소드를 사용하여 videoEventListener

nativeAd.setVideoEventListener (videoEventListener);
	

VideoEventListener 추상 클래스는 네이티브 광고에 대한 비디오 이벤트를 알립니다.

네이티브 광고 API

광고를 연결하는 데 도움이 되는 InMobiNative의 중요한 API는 다음과 같습니다.

  • View getPrimaryViewOfWidth(context, convertView, parent, width) - 지정된 너비의 뷰를 반환합니다(실제 픽셀 크기로 지정됨). 네이티브 광고의 메인 광고 콘텐츠입니다. 네이티브 배치를 생성하는 동안 인모비 대시보드에서 선택한 것과 동일한 가로 세로 비율의 뷰가 반환됩니다. 이 기본 뷰가 화면에 표시될 때 모든 광고노출 렌더링 이벤트도 자동으로 실행됩니다.

    배치를 생성하는 동안 피드 레이아웃을 선택한 경우 primaryView를 가져오는 동안 너비를 25로 지정하십시오. 그러면 AdChoices 아이콘이 표시되고 광고 렌더링 이벤트가 실행됩니다.

    getPrimaryViewOfWidth(..) 4가지 매개 변수가 사용됩니다.

    • context - 렌더링되는 광고의 컨텍스트입니다.
    • convertView - ListView의 행에 대한 전체 뷰입니다. 이 매개 변수를 사용하여 광고를 효과적으로 재활용할 수 있기 때문에 이 값을 NULL로 제공해서는 안 됩니다. 이렇게 하면 원활한 스크롤 성능을 얻을 수 있습니다.
    • parentView - 기본 뷰(getPrimaryViewOfWidth() 함수로 반환됨)를 배치할 부모 뷰입니다. 기본 뷰의 레이아웃 매개 변수를 결정하는 데 필요합니다.
    • adViewWidthInPixels - 기본 뷰가 차지할 너비(픽셀 단위)입니다.
  • String getAdTitle() - 광고의 문자열 제목을 반환합니다.
  • String getAdDescription() - 광고의 문자열 설명을 반환합니다.
  • String getAdIconUrl() - 광고의 아이콘 이미지 문자열 URL을 반환합니다.
  • String getAdCtaText() - 광고의 CTA(Click To Action) 문자열을 반환합니다.
  • String getAdRating() - 광고 평가를 반환합니다(옵션).
  • String getAdLandingPageUrl() - 광고 연결 URL을 반환합니다.
  • boolean isAppDownload - 주요 광고가 앱 설치 광고주의 것이면 True를 반환합니다.
  • boolean isReady() - True는 광고를 표시할 준비가 되었음을 의미합니다.
  • Boolean isVideo() - 반환 된 광고가 동영상을 포함하거나 포함하지 않으면 Boolean을 반환하고 잘못된 상태에서 호출 된 경우 null을 반환합니다.
  • void reportAdClickAndOpenLandingPage() - 이 함수는 클릭 이벤트를 실행하고 연결 페이지를 엽니다. 이 함수를 사용하는 동안 연결 페이지를 직접 열지 않아도 됩니다.
  • JSONObject getCustomAdContent() - 이 함수는 JSONObject를 반환합니다. 이 json에는 광고의 기본 뷰 주변에 사용자화된 UI를 생성하는 데 사용될 수 있는 추가 정보(설명, 이미지 URL 등)가 있습니다.

네이티브 광고 연결

네이티브 광고는 세 가지 방식으로 앱에서 연결할 수 있습니다.

  • 인피드 광고
  • 스플래시 광고
  • 프리롤 광고
인피드 광고 통합
  1. 피드에 광고를 표시할 위치를 선언합니다.

    예를 들면 4번째 위치에 광고를 표시합니다.

    private static final int AD_POSITION = 4;
    
    
  2. 광고가 성공적으로 로드되면 콜백 onAdLoadSucceeded(InMobiNative)를 가져옵니다. 그런 다음 이 리스너 안의 데이터 소스에 InMobiNativeAd 개체를 추가해야 합니다. 앱의 피드가 ListView인 경우 ListView의 샘플 구현은 다음과 같습니다.

    @Override
           public void onAdLoadSucceeded(@NonNull InMobiNative nativeAd) {
    		AdFeedItem nativeAdFeedItem = new AdFeedItem(nativeAd);
    		mFeedItems.add(AD_POSITION, nativeAdFeedItem);
    		mFeedAdapter.notifyDataSetChanged();
           }
    
    


    위의 단계에서 AdFeedItemFeedItem 클래스의 확장 클래스입니다. 여기서 FeedItemListView의 각 행에 적용되는 클래스입니다. 또한 mItemsArrayList로, 이 ListView의 어댑터를 지원합니다.

  3. 지금까지 광고를 로드하여 데이터 소스에 추가했습니다. 이제 광고를 표시할 차례입니다. ListView의 샘플 구현은 다음과 같습니다.

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
       final int itemViewType = getItemViewType(position);
       if (itemViewType == VIEW_TYPE_CONTENT_FEED) {
    		//Your app code
       } else {
    	//Since this content type is InMobi Ad, you need to get native Ad view		
           final InMobiNative nativeAd = ((AdFeedItem) feedItem).mNativeAd;
    	View primaryView = nativeAd.getPrimaryViewOfWidth(context, convertView, parent, parent.getWidth());
    		       if(convertView==null){
              convertView = mLayoutInflater.inflate(R.layout.ad_item, parent, false);
           }
                            ((RelativeLayout)convertView.findViewById(R.id.primaryView)).addView(primaryView);
          ((TextView)convertView.findViewById(R.id.title)).setText(nativeAd.getTitle());
          ((TextView)convertView.findViewById(R.id.desc)).setText(nativeAd.getDescription());
          ((TextView)convertView.findViewById(R.id.cta)).setText(nativeAd.getCtaText());
           return convertView;
       }
    }
    
    


    getItemViewType(position) 함수는 아래와 같이 콘텐츠 유형이 FEED 또는 AD인지 여부를 확인합니다.

    @Override
    public int getItemViewType(int position) {
       FeedItem feedItem = getItem(position);
       if (feedItem instanceof AdFeedItem) {
           return VIEW_TYPE_INMOBI_STRAND;
       }
       return VIEW_TYPE_CONTENT_FEED;
    }
    
    


    위에서 설명한 일부 API를 사용하여 광고의 제목, 설명 및 CTA 텍스트를 표시했습니다. 마찬가지로 다른 API를 사용하여 광고의 해당 부분을 표시할 수 있습니다.

스플래시 통합

스플래시 경험은 동일한 InMobiNative 클래스를 사용하여 구현할 수 있습니다. 그러나 유의해야 할 몇 가지 사항이 있습니다.

  • InMobiNativeAd.isReady() 함수를 사용하여 광고를 표시할 준비가 되었는지 확인해야 합니다. 때로는 주 스레드가 점유된 상태일 수 있으므로 onAdLoadSucceeded을 제때 수신하지 못할 수 있습니다. 그러므로 차단 기간이 경과된 직후에 광고가 준비되었는지 사전에 확인하는 것이 좋습니다.
  • 중요: 광고의 두 번째 화면이 표시되면 광고를 닫거나 삭제하지 마십시오. onAdFullScreenDisplayed에서 이를 확인하고 이 콜백이 실행되면 광고를 닫지 않을 수 있습니다.

샘플 구현은 다음과 같습니다.

@Override
public void onAdFullScreenDisplayed(InMobiNative nativeAd) {
	isSecondScreenDisplayed = YES;
}
public void dismissAd() {
   if(isSecondScreenDisplayed){
       Log.d(TAG, "DO NOT DISMISS THE AD WHILE THE SCREEN IS BEING DISPLAYED");
   }
   else
   {
	splashAdView.setVisibility(View.GONE);
	nativeAd.destroy();
   }
}
	
프리롤 통합

프리 롤 비디오 경험은 동일한 InMobiNative 클래스를 사용하여 구현할 수 있습니다. videoEventListener 를 등록해야하며 다음 콜백에서 광고보기를 닫아야합니다.

@Override
public void onVideoCompleted(@NonNull InMobiNative nativeAd) {
	Log.d(TAG, "Media playback complete " + mPosition);
}
	

프리롤 광고는 다음과 같이 닫을 수 있습니다.

public void dismissAd() {
	splashAdView.setVisibility(View.GONE);
	nativeAd.destroy();
}
	


네이티브 광고 새로 고침

사용자에 대한 광고 노출을 최적화하려면 다양한 시점에 광고를 새로 고침해야 합니다. 광고를 새로 고침하려면 정확한 순서로 다음 함수를 호출해야 합니다.

참고: 새로 고치기 전에 adFeedItem 개체를 데이터 소스에서 제거하고 삭제해야 합니다. 그런 후 다음 코드와 같이 새 개체를 생성하고 load를 호출해야 합니다.

private void refreshAd() {
       Iterator<feeditems> feedItemIterator = mFeedItems.iterator();
       while (feedItemIterator.hasNext()) {
           final FeedItem feedItem = feedItemIterator.next();
           if (feedItem instanceof AdFeedItem) {
               feedItemIterator.remove();
           }
       }
       // refresh feed
       mFeedAdapter.notifyDataSetChanged();
       // destroy InMobiNative object
       inMobiNativeAd.destroy();
       // create InMobiNative object again
	InMobiNative inMobiNativeAd = new InMobiNative(
	<<activity instance="">>,
	<<your id="" placement="">>,
	<<inmobinativeadlistener 1="" created="" in="" step="">>);
	inMobiNativeAd.load();
}
	</inmobinativeadlistener></your></activity></feeditems>

InMobiNative 인스턴스 관리

  1. InMobiNative의 모든 인스턴스는 정확히 하나의 광고를 나타냅니다.
  2. 콘텐츠 피드 내의 여러 위치에 광고를 배치하려면 광고 배치 위치 수만큼 InMobiNative의 인스턴스를 생성합니다.
  3. onCreate() Activity 콜백 또는 onActivityCreated() Fragment 콜백에서 InMobiNative 인스턴스를 생성해야 합니다.
  4. onDestroy() Activity 콜백 또는 OnDestroyView() Fragment 콜백에서 InMobiNative 인스턴스를 삭제해야 합니다.
  5. InMobiNativeAd 개체는 데이터 소스에서 제거한 후에는 항상 삭제해야 합니다. InMobiNativeAd가 삭제되면 광고 뷰와의 모든 사용자 상호 작용이 존중되지 않습니다. 따라서 InMobiNativeAd를 삭제하기 전에 광고 뷰를 삭제해야 합니다.
  6. InMobiNativeAd 인스턴스를 호스팅하는 구성 요소(이 경우 해당 활동)가 destroy () API를 사용하여 삭제되면 모든 InMobiNativeAd 인스턴스도 삭제해야 합니다.

Tracking on Ad Views(광고 뷰 추적)를 클릭합니다.

클릭 보고 이외에 인모비 SDK에서 연결 URL을 열려면 네이티브 광고 인스턴스에서 reportAdClickAndOpenLandingPage() 메서드를 호출하십시오.

nativeAd.reportAdClickAndOpenLandingPage();
	

다운로더 통합(중국 트래픽으로 수익을 창출하려는 경우)

소개

중국에는 Google Play가 없기 때문에 InMobi Downloader라는 도구를 통해 APK를 직접 다운로드할 수 있습니다. 이 기능은 InMobi Android SDK의 중국 버전에서만 사용할 수 있습니다. InMobi Downloader는 광고주 앱 다운로드 및 설치를 관리합니다. 게시자와 사용자에게 맞춤식 환경을 제공하면서 귀속을 활성화하기 위해 이벤트를 광고주에게 전달합니다.

매니페스트 파일 변경

다음과 같이 매니페스트 파일에 새 서비스를 추가해야 합니다.

<service android:enabled="true" android:name="com.inmobi.ads.ApkDownloader$ApkDownloadService">
</service>
	

다운로더는 다음과 같이 외부 저장소에 쓸 수 있는 권한을 필요로 합니다.

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE">
	</uses-permission>

Android 7(누가 이상)

파일 공유를 위한 설계가 변경되었으므로 Android N 이후부터 새로운 변화가 필요합니다. 다른 애플리케이션은 앱의 파일에 액세스할 수 없으므로 우리가 다운로드한 APK 파일을 설치하려면 PackageInstaller 앱이 필요합니다. 여기를 참조하십시오.

  • 다음을 추가합니다. res/xml/provider.xml

    <!--?xml version="1.0" encoding="utf-8"?-->
    <paths xmlns:android="http://schemas.android.com/apk/res/android">
       <external-path name="external_files" path=".">
    </external-path></paths>
    
    
  • AndroidManifest.xml에서 다음을 추가합니다.

    <provider android:authorities="{appPackageName}.fileprovider" android:exported="false" android:granturipermissions="true" android:name="android.support.v4.content.FileProvider">
       <meta-data
           android:name="android.support.FILE_PROVIDER_PATHS"
           android:resource="@xml/provider" />
    </provider>
    
    
  • Android Oreo(8 이상)의 경우 AndroidManifest.xml에 다음을 추가합니다.

    <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES">
    		</uses-permission>
    

InMobi Downloader 호출

다음과 같이 InMobi 네이티브 광고 개체를 생성하는 동안 다운로더를 활성화해야 합니다.

@Override
public void onCreate(Bundle savedInstanceState) {
	super.onCreate(savedInstanceState);
	InMobiNative nativeAd = new InMobiNative(
	<<activity instance="">>,
	<<your id="" placement="">>,
	<<inmobinativeadlistener>>);
	nativeAd.setDownloaderEnabled(true);
	nativeAd.load();
	//Your App code here
}
	</inmobinativeadlistener></your></activity>

다운로더 콜백 가져오기

InMobi Downloader는 onAdStatusChanged()라는 리스너 메소드에서 콜백을 제공합니다.. 이것은 다운로더 상태가 바뀔 때마다 실행됩니다. 다운로더 상태는 getDownloadStatus() 메소드를 통해 액세스할 수 있습니다. 가능한 상태 및 해당 상태 메시지는 다음과 같습니다.

STATE_UNINITIALIZED = -2;
STATE_INITIALIZING = -1;
STATE_DOWNLOADING = 0;
STATE_DOWNLOADED = 1;
STATE_ERROR = 2;
	

다운로더가 APK( STATE_DOWNLOADING = 0)를 다운로드하는 동안 getDownloadProgress() 메서드를 사용하여 다운로드 진행률에 액세스할 수 있습니다. 이 진행 상황을 사용하여 사용자에게 진행률 표시줄을 표시할 수 있습니다.

참고: STATE_DOWNLOADING = 0인 상태에서 다운로드 비율이 변경될 때마다 onAdStatusChanged()가 실행된다는 점에 유의하십시오. 이 샘플 구현은 아래와 같습니다.

public void onAdStatusChanged(@NonNull InMobiNative nativeAd) {
	Log.d("InMobi Downloader status is", "value: " + nativeAd.getDownloader().getDownloadStatus());
	if (nativeAd.getDownloader().getDownloadStatus() == InMobiNative.Downloader.STATE_DOWNLOADING) {
	progressBar.setProgress(nativeAd.getDownloader().getDownloadProgress());
	}  
}
	

백필 구현

인모비의 SDK는 네이티브 배치에 대해 HTML과 네이티브 유닛을 모두 실행할 수 있습니다. 기본 배치 위치에 예약된 자산에 따라 다음과 같은 크기의 광고를 실행할 수 있습니다.

  • 320x50 HTML 배너
  • 300x250 HTML 배너
  • 320x480 HTML 전체 화면 배너
  • 320x568 HTML 전체 화면 배너

이 기능을 설정하려면 원하는 백필 크기로 담당 파트너 관리자에게 문의해야 합니다. 또한 코드에서 다음과 같이 처리해야 합니다.

@Override
public View getView(int position, View convertView, ViewGroup parent) {
   final int itemViewType = getItemViewType(position);
   if (itemViewType == VIEW_TYPE_CONTENT_FEED) {
		//Your app code
 	} 
   else {
   		//Since this content type is InMobi Ad, you need to get native Ad view
		final InMobiNative nativeAd = ((AdFeedItem) feedItem).mNativeAd;
		//Render according to the type of response served
		if(currentNativeAd.getCustomAdContent().has("isHTMLResponse")){	
			View primaryView = nativeAd.getPrimaryViewOfWidth(context, convertView, parent, Math.round(getResources().getDisplayMetrics().density*250));
 		   	if(convertView==null){
 	         		convertView = mLayoutInflater.inflate(R.layout.ad_item, parent, false);
 	       		}
			((RelativeLayout)convertView.findViewById(R.id.primaryView)).addView(primaryView);
			return convertView;
		} 
		else {
		 	View primaryView = nativeAd.getPrimaryViewOfWidth(context, convertView, parent, parent.getWidth());
		   	if(convertView==null){
	         		 convertView = mLayoutInflater.inflate(R.layout.ad_item, parent, false);
	       		}
		  	((RelativeLayout)convertView.findViewById(R.id.primaryView)).addView(primaryView);
		   	((TextView)convertView.findViewById(R.id.title)).setText(nativeAd.getTitle());
		   	((TextView)convertView.findViewById(R.id.desc)).setText(nativeAd.getDescription());
		   	((TextView)convertView.findViewById(R.id.cta)).setText(nativeAd.getCtaText());
		  	 return convertView;
   		}
	}
}
	

참고:

  • 응답이 백필인지 확인하기 위해 customAdContent에 isHTMLResponse라는 문자열이 포함됩니다.
  • HTML 배너 응답의 너비를 조정하지 마십시오. 예를 들어 300x250의 백필을 선택한 경우 제공된 너비가 하드 코딩된 250인지 확인하십시오.
  • 백필 응답의 경우 CTA 버튼을 추가하지 마십시오. 이 버튼을 광고 옆에 추가하면 클릭 수로 수익이 창출되지 않습니다.

CreativeID 검색 중

진행되고 있는 모든 광고 품질 검사를 피해나와, 관련성이없고 불쾌한 소재 또는 사용자에게 혼란을주는 광고를 보여줌으로써 앱의 사용자 경험을 손상시키는 불량 광고주가 가끔 있습니다. 이러한 상황을 극복하기 위해 광고 인스턴스의 creativeID를 검색하고 InMobi 담당자에게 암호화 된 creativeID를보고 할 수 있습니다.

mNativeAd.getCreativeId()// mNativeAd는 예제 인스턴스입니다.

통합 테스트

  1. 인모비 포털에서 테스트 모드를 구성할 수 있습니다.

    Tools(도구) - Diagnostics(진단)로 이동하여 테스트 모드를 Global ON(전역 켜기) 또는 Selective ON(선택 켜기)으로 전환합니다.

    광고 단위를 처음으로 통합하는 경우 Test Mode(테스트 모드)를 Global ON(전역 켜기)으로 설정합니다.
    한 세트의 장치에 대한 테스트 트래픽을 선택적으로 켜려는 경우

    이 특정 광고 단위에 SDK의 이전 버전이 이미 통합되어 있으므로 테스트를 일부 장치에만 제한해야 합니다.
    Test Mode(테스트 모드)를 Selective ON(선택 켜기)으로 설정합니다.

    장치 섹션에서:

    1. Device ID(장치 ID) 상자에 장치 ID를 입력합니다.
    2. Device Name(장치 이름) 상자에 원하는 이름을 입력합니다.
    3. Add Device(장치 추가)를 클릭하여 테스트 장치를 추가합니다.

    이미 장치가 구성되어 있으면 장치를 선택하고 테스트 모드를 사용할 수 있습니다.

    참고: 게시하기 전에 반드시 테스트 모드를 해제해야 합니다. 그렇지 않으면 앱에서 수익을 창출하지 못합니다.

    이제는 모두 테스트 광고를 가져올 준비가 되었습니다.

    장치 ID 가져오기

    장치 ID는 GPID(Google Play Advertising ID)입니다. 장치 ID를 얻으려면 디버그 로그를 콘솔에 출력하도록 SDK를 구성하십시오. 이렇게 하려면 네이티브 광고를 통합하는 Activity에 다음 행을 추가하십시오.

       InMobiSdk.setLogLevel(LogLevel.DEBUG);
    
    


    이제 장치 ID가 다음과 같이 DDMS 콘솔의 디버그 로그에 출력됩니다.

  2. 광고 단위 및 광고 요청의 진단 탭에서 피드백도 받게 되며, 이는 통합 과정에서 특히 유용할 수 있습니다.

유용한 디버그 정보

1단계에서 설명한 대로 디버그 로그를 활성화하면 SDK가 초기화 및 광고 로드 수명 주기에 대한 유용한 정보를 제공하는 키 로그를 DDMS 콘솔에 출력합니다.

다음 표에는 이러한 로그가 캡처되어 있습니다.

SDK 초기화

시나리오 로그 수준 로그 메시지
게시자가 null 또는 빈 계정 ID를 전달함 오류 Account id cannot be null or empty. Please provide a valid Account id. (계정 ID는 null이거나 비워 둘 수 없습니다. 올바른 계정 ID를 입력하십시오.)
게시자가 올바른 계정 ID를 전달함 디버그 InMobi SDK initialized with account id: (<계정 -ID> 계정 ID로 InMobi SDK 초기화됨) <account id="" />
게시자가 잘못된 계정 ID를 전달함 오류 Invalid account id passed to init. Please provide a valid account id. (init에 잘못된 계정 ID가 전달되었습니다. 올바른 계정 ID를 입력하십시오.)
게시자가 필수 권한을 부여하지 않음 디버그 Please grant the mandatory permissions : INTERNET & ACCESS_NETWORK_STATE, SDK could not be initialized. (다음의 필수 권한을 부여하십시오. INTERNET & ACCESS_NETWORK_STATE, SDK를 초기화하지 못했습니다.)
SDK에 권한이 부여됨 디버그 Permissions granted to the SDK are : <list granted="" of="" permissions="" /> (SDK에 다음 권한이 부여됨: <부여된 권한 목록>) <list granted="" of="" permissions="" />
SDK의 최신 버전이 제공됨 디버그 A newer version (ver. 6.0.0) of the InMobi SDK is available! You are currently on an older version (ver. 5.3.1). Download the latest InMobi SDK from http://www.inmobi.com/products/sdk/#downloads (InMobi SDK의 최신 버전(버전 6.0.0)을 사용할 수 있습니다! 현재 이전 버전(버전 5.3.1)입니다. 최신 인모비 SDK는 http://www.inmobi.com/products/sdk/#downloads에서 다운로드하십시오.)

일반적인 광고 수명 주기 메시지

시나리오 로그 수준 로그 메시지
네트워크를 사용할 수 없을 때 광고가 요청됨 오류 Network not reachable currently. Please try again. (현재 네트워크에 연결할 수 없습니다. 다시 시도하십시오.)
광고 상태가 로드 중 또는 사용 가능일 때 광고가 요청됨 오류 An ad load is already in progress. Please wait for the load to complete before requesting for another ad (Placement id : <placement id="" />). (광고 로드가 이미 진행 중입니다. 다른 광고를 요청하기 전에 로드가 완료되기를 기다리십시오(배치 ID: <배치 id>).
게시자 장치 ID 디버그 Publisher device id is <device id="" /> (게시자 장치 ID가 <장치 Id>입니다.)

네이티브 광고 통합 메시지

시나리오 로그 수준 로그 메시지
게시자가 null 컨텍스트를 제공함 오류 Unable to create InMobiNative ad with null Activity object (null Activity 개체로 InMobiNative 광고를 생성할 수 없습니다.)
게시자가 SDK를 초기화하지 않고 네이티브 광고를 생성함 오류 Please initialize the SDK before creating a Native ad (네이티브 광고를 생성하기 전에 SDK를 초기화하십시오.)
게시자가 올바른 배치 ID로 네이티브 광고를 생성함 오류 NA
게시자가 제공하는 다음 항목이 null임 - InMobiNativeAdListenerobject 오류 Listener supplied is null,the Native Ad cannot be created (리스너가 null을 제공했습니다. 네이티브 광고를 생성할 수 없습니다.)
게시자가 네이티브에서 load를 호출함 디버그 Fetching a Native ad for placement id: <placement id="" /> (<배치 id>에 대한 네이티브 광고를 가져오는 중)
광고를 서버에서 성공적으로 가져옴 디버그 Native ad successfully fetched for placement id: <placement id="" /> (<배치 id>에 대한 네이티브 광고를 성공적으로 가져왔습니다.)
광고 가져오기 실패 오류 Failed to fetch Native ad for placement id : <placement id="" /> with error : <status code="" message="" /> (<배치 id>에 대한 네이티브 광고를 가져오지 못했습니다. 오류 <상태 코드/메시지> 발생)
AdView가 객체화(inflate)될 때 디버그 Ad markup loaded into the container will be inflated into a View (컨테이너에 로드된 광고 마크업이 뷰에 객체화됩니다.)

고급

잠금 화면 광고

잠금 화면 통합의 경우 광고를 미리 가져와 특정 활동에 연결하지 않을 수 있습니다. 인모비 SDK를 사용하면 Application 하위 클래스에서 유지 관리할 수있는 기본 광고 단위를 생성할 수 있습니다. 그러면 앱에서 수익 창출 이벤트가 발생하는 잠금 화면 Activity의 네이티브 광고 단위를 사용할 수 있습니다.

  • 네이티브 광고 미리 가져오기: 광고 서버에 특정 타겟팅 정보를 제공하는 InMobiAdRequest를 생성합니다.
  • 아래에 설명된 대로 NativeAdRequestListener 인터페이스에 대한 구현을 제공하여 InMobiNative.requestAd(Context, InMobiAdRequest, NativeAdRequestListener)를 호출합니다.

    public class YourApplication extends Application {
        ... 
        private InMobiAdRequest mInMobiAdRequest;
        private NativeAdRequestListener mListener;
        Private InMobiNative mNativeAd;
        ...
        public void onCreate() {
            mInMobiAdRequest = new InMobiAdRequest.Builder(PlacementId.YOUR_PLACEMENT_ID)
                    .build();
            mListener = new InMobiNative.NativeAdRequestListener() {
                @Override
                public void onAdRequestCompleted(InMobiAdRequestStatus status, InMobiNative nativeAd) {
                    if (status.getStatusCode() == NO_ERROR && nativeAd != null) {
                        mNativeAd = nativeAd;
                    } 
                }
            };
            InMobiNative.requestAd(this, mInMobiAdRequest, mListener);
            ...
        }
        public InMobiNative getNativeAd() {
            return mNativeAd;
        }
    }
    
    
  • 그런 다음 Activity에서 Application 하위 클래스의 getNativeAd() 메서드를 호출하여 이 광고 단위의 인스턴스를 가져올 수 있습니다.

    showOnLockScreen(LockScreenListener lockScreenListener)를 사용하여 잠금 화면 활동에 대한 이 네이티브 인스턴스를 등록합니다. 이 리스너는 사용자가 광고와 상호 작용하자마자 호출되며 이 상호 작용을 완료하려면 잠금 화면을 닫아야 합니다.

    * 이 메서드는 load(Context) 또는 load()보다 먼저 호출되어야 합니다.

  • load(Context)를 호출하여 광고 마크업을 로드하고 수익 창출 이벤트가 발생할 위치에 Activity를 제공합니다.
  • 광고 로드를 게시하고 자산을 가져오기 위해 getAdContent()를 호출하여 광고 자산을 요청합니다.
    takeAction()

    이 메서드를 호출하면 사용자가 잠금 화면에서 광고 뷰와 상호 작용할 때 발생하는 활동을 수행할 수 있습니다. 이 상호 작용은 com.inmobi.ads.InMobiNative.LockScreenListener#onActionRequired(InMobiNative)에 의해 보고됩니다. 이 메서드는 android.content.Intent.ACTION_USER_PRESENT 브로드캐스트 후 앱에서 호출해야 합니다.

이 페이지가 도움이 되었나요?

이 페이지에서

마지막 업데이트 날짜: 17 Sep, 2020