「Facebook/ビジネスマネージャ/アプリ広告/AndroidNative」の版間の差分
提供: 初心者エンジニアの簡易メモ
(→テストデバイス) |
(→サンプル) |
||
行22: | 行22: | ||
} | } | ||
} | } | ||
+ | </pre> | ||
+ | |||
+ | MainActivity.javaをNativeAdActivity.javaへリネームして以下の通り記述 | ||
+ | <pre> | ||
+ | package geniee.co.jp.facebookad; | ||
+ | |||
+ | import android.support.v7.app.AppCompatActivity; | ||
+ | import android.os.Bundle; | ||
+ | import android.util.Log; | ||
+ | import android.view.LayoutInflater; | ||
+ | import android.view.View; | ||
+ | import android.widget.Button; | ||
+ | import android.widget.LinearLayout; | ||
+ | import android.widget.TextView; | ||
+ | |||
+ | import com.facebook.ads.*; | ||
+ | |||
+ | import java.util.ArrayList; | ||
+ | import java.util.List; | ||
+ | |||
+ | public class NativeAdActivity extends AppCompatActivity { | ||
+ | |||
+ | private final String TAG = NativeAdActivity.class.getSimpleName(); | ||
+ | private NativeAd nativeAd; | ||
+ | private NativeAdLayout nativeAdLayout; | ||
+ | private LinearLayout adView; | ||
+ | |||
+ | @Override | ||
+ | protected void onCreate(Bundle savedInstanceState) { | ||
+ | super.onCreate(savedInstanceState); | ||
+ | setContentView(R.layout.activity_main); | ||
+ | |||
+ | loadNativeAd(); | ||
+ | } | ||
+ | |||
+ | private void loadNativeAd() { | ||
+ | // Instantiate a NativeAd object. | ||
+ | // NOTE: the placement ID will eventually identify this as your App, you can ignore it for | ||
+ | // now, while you are testing and replace it later when you have signed up. | ||
+ | // While you are using this temporary code you will only get test ads and if you release | ||
+ | // your code like this to the Google Play your users will not receive ads (you will get a no fill error). | ||
+ | //nativeAd = new NativeAd(this, "YOUR_PLACEMENT_ID"); | ||
+ | nativeAd = new NativeAd(this, "373457953523149_373458780189733"); | ||
+ | |||
+ | nativeAd.setAdListener(new NativeAdListener() { | ||
+ | @Override | ||
+ | public void onMediaDownloaded(Ad ad) { | ||
+ | // Native ad finished downloading all assets | ||
+ | Log.e(TAG, "Native ad finished downloading all assets."); | ||
+ | } | ||
+ | |||
+ | @Override | ||
+ | public void onError(Ad ad, AdError adError) { | ||
+ | // Native ad failed to load | ||
+ | Log.e(TAG, "Native ad failed to load: " + adError.getErrorMessage()); | ||
+ | } | ||
+ | |||
+ | @Override | ||
+ | public void onAdLoaded(Ad ad) { | ||
+ | // Native ad is loaded and ready to be displayed | ||
+ | Log.d(TAG, "Native ad is loaded and ready to be displayed!"); | ||
+ | // Race condition, load() called again before last ad was displayed | ||
+ | if (nativeAd == null || nativeAd != ad) { | ||
+ | return; | ||
+ | } | ||
+ | // Inflate Native Ad into Container | ||
+ | inflateAd(nativeAd); | ||
+ | } | ||
+ | |||
+ | @Override | ||
+ | public void onAdClicked(Ad ad) { | ||
+ | // Native ad clicked | ||
+ | Log.d(TAG, "Native ad clicked!"); | ||
+ | } | ||
+ | |||
+ | @Override | ||
+ | public void onLoggingImpression(Ad ad) { | ||
+ | // Native ad impression | ||
+ | Log.d(TAG, "Native ad impression logged!"); | ||
+ | } | ||
+ | }); | ||
+ | AdSettings.addTestDevice("0bd2a93b-6ff5-4a95-8b1c-b3b4e0f0f35c"); | ||
+ | // Request an ad | ||
+ | nativeAd.loadAd(); | ||
+ | } | ||
+ | private void inflateAd(NativeAd nativeAd) { | ||
+ | |||
+ | nativeAd.unregisterView(); | ||
+ | |||
+ | // Add the Ad view into the ad container. | ||
+ | nativeAdLayout = findViewById(R.id.native_ad_container); | ||
+ | LayoutInflater inflater = LayoutInflater.from(NativeAdActivity.this); | ||
+ | // Inflate the Ad view. The layout referenced should be the one you created in the last step. | ||
+ | adView = (LinearLayout) inflater.inflate(R.layout.native_ad_layout, nativeAdLayout, false); | ||
+ | nativeAdLayout.addView(adView); | ||
+ | |||
+ | // Add the AdOptionsView | ||
+ | LinearLayout adChoicesContainer = findViewById(R.id.ad_choices_container); | ||
+ | AdOptionsView adOptionsView = new AdOptionsView(NativeAdActivity.this, nativeAd, nativeAdLayout); | ||
+ | adChoicesContainer.removeAllViews(); | ||
+ | adChoicesContainer.addView(adOptionsView, 0); | ||
+ | |||
+ | // Create native UI using the ad metadata. | ||
+ | AdIconView nativeAdIcon = adView.findViewById(R.id.native_ad_icon); | ||
+ | TextView nativeAdTitle = adView.findViewById(R.id.native_ad_title); | ||
+ | MediaView nativeAdMedia = adView.findViewById(R.id.native_ad_media); | ||
+ | TextView nativeAdSocialContext = adView.findViewById(R.id.native_ad_social_context); | ||
+ | TextView nativeAdBody = adView.findViewById(R.id.native_ad_body); | ||
+ | TextView sponsoredLabel = adView.findViewById(R.id.native_ad_sponsored_label); | ||
+ | Button nativeAdCallToAction = adView.findViewById(R.id.native_ad_call_to_action); | ||
+ | |||
+ | // Set the Text. | ||
+ | nativeAdTitle.setText(nativeAd.getAdvertiserName()); | ||
+ | nativeAdBody.setText(nativeAd.getAdBodyText()); | ||
+ | nativeAdSocialContext.setText(nativeAd.getAdSocialContext()); | ||
+ | nativeAdCallToAction.setVisibility(nativeAd.hasCallToAction() ? View.VISIBLE : View.INVISIBLE); | ||
+ | nativeAdCallToAction.setText(nativeAd.getAdCallToAction()); | ||
+ | sponsoredLabel.setText(nativeAd.getSponsoredTranslation()); | ||
+ | |||
+ | // Create a list of clickable views | ||
+ | List<View> clickableViews = new ArrayList<>(); | ||
+ | clickableViews.add(nativeAdTitle); | ||
+ | clickableViews.add(nativeAdCallToAction); | ||
+ | |||
+ | // Register the Title and CTA button to listen for clicks. | ||
+ | nativeAd.registerViewForInteraction( | ||
+ | adView, | ||
+ | nativeAdMedia, | ||
+ | nativeAdIcon, | ||
+ | clickableViews); | ||
+ | } | ||
+ | } | ||
+ | </pre> | ||
+ | res/layout/activity_main.xml | ||
+ | <pre> | ||
+ | <?xml version="1.0" encoding="utf-8"?> | ||
+ | <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" | ||
+ | xmlns:app="http://schemas.android.com/apk/res-auto" | ||
+ | xmlns:tools="http://schemas.android.com/tools" | ||
+ | android:layout_width="match_parent" | ||
+ | android:layout_height="match_parent" | ||
+ | tools:context=".NativeAdActivity"> | ||
+ | |||
+ | <TextView | ||
+ | android:layout_width="wrap_content" | ||
+ | android:layout_height="wrap_content" | ||
+ | android:text="Hello World!" | ||
+ | app:layout_constraintBottom_toBottomOf="parent" | ||
+ | app:layout_constraintLeft_toLeftOf="parent" | ||
+ | app:layout_constraintRight_toRightOf="parent" | ||
+ | app:layout_constraintTop_toTopOf="parent" /> | ||
+ | |||
+ | <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" | ||
+ | android:layout_width="match_parent" | ||
+ | android:layout_height="match_parent" | ||
+ | android:gravity="center_horizontal" | ||
+ | android:paddingTop="50dp"> | ||
+ | <ScrollView | ||
+ | android:layout_width="match_parent" | ||
+ | android:layout_height="match_parent" | ||
+ | android:paddingBottom="50dp"> | ||
+ | |||
+ | <com.facebook.ads.NativeAdLayout | ||
+ | android:id="@+id/native_ad_container" | ||
+ | android:layout_width="match_parent" | ||
+ | android:layout_height="wrap_content" | ||
+ | android:orientation="vertical" /> | ||
+ | </ScrollView> | ||
+ | </RelativeLayout> | ||
+ | |||
+ | </android.support.constraint.ConstraintLayout> | ||
+ | </pre> | ||
+ | |||
+ | native_ad_layout.xml | ||
+ | <pre> | ||
+ | <?xml version="1.0" encoding="utf-8"?> | ||
+ | <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" | ||
+ | android:id="@+id/ad_unit" | ||
+ | android:layout_width="match_parent" | ||
+ | android:layout_height="wrap_content" | ||
+ | android:background="@android:color/white" | ||
+ | android:orientation="vertical" | ||
+ | android:paddingLeft="10dp" | ||
+ | android:paddingRight="10dp"> | ||
+ | |||
+ | <LinearLayout | ||
+ | android:layout_width="match_parent" | ||
+ | android:layout_height="wrap_content" | ||
+ | android:orientation="horizontal" | ||
+ | android:paddingBottom="10dp" | ||
+ | android:paddingTop="10dp"> | ||
+ | |||
+ | <com.facebook.ads.AdIconView | ||
+ | android:id="@+id/native_ad_icon" | ||
+ | android:layout_width="35dp" | ||
+ | android:layout_height="35dp" /> | ||
+ | |||
+ | <LinearLayout | ||
+ | android:layout_width="wrap_content" | ||
+ | android:layout_height="wrap_content" | ||
+ | android:orientation="vertical" | ||
+ | android:paddingLeft="5dp" | ||
+ | android:paddingRight="5dp"> | ||
+ | |||
+ | <TextView | ||
+ | android:id="@+id/native_ad_title" | ||
+ | android:layout_width="wrap_content" | ||
+ | android:layout_height="wrap_content" | ||
+ | android:ellipsize="end" | ||
+ | android:lines="1" | ||
+ | android:textColor="@android:color/black" | ||
+ | android:textSize="15sp" /> | ||
+ | |||
+ | <TextView | ||
+ | android:id="@+id/native_ad_sponsored_label" | ||
+ | android:layout_width="wrap_content" | ||
+ | android:layout_height="wrap_content" | ||
+ | android:ellipsize="end" | ||
+ | android:lines="1" | ||
+ | android:textColor="@android:color/darker_gray" | ||
+ | android:textSize="12sp" /> | ||
+ | |||
+ | </LinearLayout> | ||
+ | |||
+ | <LinearLayout | ||
+ | android:id="@+id/ad_choices_container" | ||
+ | android:layout_width="match_parent" | ||
+ | android:layout_height="wrap_content" | ||
+ | android:gravity="end" | ||
+ | android:orientation="horizontal" /> | ||
+ | |||
+ | </LinearLayout> | ||
+ | |||
+ | <com.facebook.ads.MediaView | ||
+ | android:id="@+id/native_ad_media" | ||
+ | android:layout_width="match_parent" | ||
+ | android:layout_height="wrap_content" | ||
+ | android:gravity="center" /> | ||
+ | |||
+ | <LinearLayout | ||
+ | android:layout_width="match_parent" | ||
+ | android:layout_height="wrap_content" | ||
+ | android:orientation="horizontal" | ||
+ | android:padding="5dp"> | ||
+ | |||
+ | <LinearLayout | ||
+ | android:layout_width="wrap_content" | ||
+ | android:layout_height="wrap_content" | ||
+ | android:layout_weight="3" | ||
+ | android:orientation="vertical"> | ||
+ | |||
+ | <TextView | ||
+ | android:id="@+id/native_ad_social_context" | ||
+ | android:layout_width="match_parent" | ||
+ | android:layout_height="wrap_content" | ||
+ | android:ellipsize="end" | ||
+ | android:lines="1" | ||
+ | android:textColor="@android:color/darker_gray" | ||
+ | android:textSize="12sp" /> | ||
+ | |||
+ | <TextView | ||
+ | android:id="@+id/native_ad_body" | ||
+ | android:layout_width="match_parent" | ||
+ | android:layout_height="wrap_content" | ||
+ | android:ellipsize="end" | ||
+ | android:gravity="center_vertical" | ||
+ | android:lines="2" | ||
+ | android:textColor="@android:color/black" | ||
+ | android:textSize="12sp" /> | ||
+ | |||
+ | </LinearLayout> | ||
+ | |||
+ | <Button | ||
+ | android:id="@+id/native_ad_call_to_action" | ||
+ | android:layout_width="100dp" | ||
+ | android:layout_height="30dp" | ||
+ | android:layout_gravity="center_vertical" | ||
+ | android:layout_weight="1" | ||
+ | android:background="#4286F4" | ||
+ | android:paddingLeft="3dp" | ||
+ | android:paddingRight="3dp" | ||
+ | android:textColor="@android:color/white" | ||
+ | android:textSize="12sp" | ||
+ | android:visibility="gone" /> | ||
+ | |||
+ | </LinearLayout> | ||
+ | |||
+ | </LinearLayout> | ||
</pre> | </pre> | ||
2019年6月11日 (火) 17:56時点における版
native広告のandroid組込
https://developers.facebook.com/docs/audience-network/android-native
準備
app/build.gradle追加
dependencies { compile 'com.android.support:recyclerview-v7:25.3.1' // Required Dependency by Audience Network SDK compile 'com.facebook.android:audience-network-sdk:5.+' }
https://developers.facebook.com/docs/audience-network/android
サンプル
MyApplication.java
public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); // Initialize the Audience Network SDK AudienceNetworkAds.initialize(this); } }
MainActivity.javaをNativeAdActivity.javaへリネームして以下の通り記述
package geniee.co.jp.facebookad; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.widget.Button; import android.widget.LinearLayout; import android.widget.TextView; import com.facebook.ads.*; import java.util.ArrayList; import java.util.List; public class NativeAdActivity extends AppCompatActivity { private final String TAG = NativeAdActivity.class.getSimpleName(); private NativeAd nativeAd; private NativeAdLayout nativeAdLayout; private LinearLayout adView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); loadNativeAd(); } private void loadNativeAd() { // Instantiate a NativeAd object. // NOTE: the placement ID will eventually identify this as your App, you can ignore it for // now, while you are testing and replace it later when you have signed up. // While you are using this temporary code you will only get test ads and if you release // your code like this to the Google Play your users will not receive ads (you will get a no fill error). //nativeAd = new NativeAd(this, "YOUR_PLACEMENT_ID"); nativeAd = new NativeAd(this, "373457953523149_373458780189733"); nativeAd.setAdListener(new NativeAdListener() { @Override public void onMediaDownloaded(Ad ad) { // Native ad finished downloading all assets Log.e(TAG, "Native ad finished downloading all assets."); } @Override public void onError(Ad ad, AdError adError) { // Native ad failed to load Log.e(TAG, "Native ad failed to load: " + adError.getErrorMessage()); } @Override public void onAdLoaded(Ad ad) { // Native ad is loaded and ready to be displayed Log.d(TAG, "Native ad is loaded and ready to be displayed!"); // Race condition, load() called again before last ad was displayed if (nativeAd == null || nativeAd != ad) { return; } // Inflate Native Ad into Container inflateAd(nativeAd); } @Override public void onAdClicked(Ad ad) { // Native ad clicked Log.d(TAG, "Native ad clicked!"); } @Override public void onLoggingImpression(Ad ad) { // Native ad impression Log.d(TAG, "Native ad impression logged!"); } }); AdSettings.addTestDevice("0bd2a93b-6ff5-4a95-8b1c-b3b4e0f0f35c"); // Request an ad nativeAd.loadAd(); } private void inflateAd(NativeAd nativeAd) { nativeAd.unregisterView(); // Add the Ad view into the ad container. nativeAdLayout = findViewById(R.id.native_ad_container); LayoutInflater inflater = LayoutInflater.from(NativeAdActivity.this); // Inflate the Ad view. The layout referenced should be the one you created in the last step. adView = (LinearLayout) inflater.inflate(R.layout.native_ad_layout, nativeAdLayout, false); nativeAdLayout.addView(adView); // Add the AdOptionsView LinearLayout adChoicesContainer = findViewById(R.id.ad_choices_container); AdOptionsView adOptionsView = new AdOptionsView(NativeAdActivity.this, nativeAd, nativeAdLayout); adChoicesContainer.removeAllViews(); adChoicesContainer.addView(adOptionsView, 0); // Create native UI using the ad metadata. AdIconView nativeAdIcon = adView.findViewById(R.id.native_ad_icon); TextView nativeAdTitle = adView.findViewById(R.id.native_ad_title); MediaView nativeAdMedia = adView.findViewById(R.id.native_ad_media); TextView nativeAdSocialContext = adView.findViewById(R.id.native_ad_social_context); TextView nativeAdBody = adView.findViewById(R.id.native_ad_body); TextView sponsoredLabel = adView.findViewById(R.id.native_ad_sponsored_label); Button nativeAdCallToAction = adView.findViewById(R.id.native_ad_call_to_action); // Set the Text. nativeAdTitle.setText(nativeAd.getAdvertiserName()); nativeAdBody.setText(nativeAd.getAdBodyText()); nativeAdSocialContext.setText(nativeAd.getAdSocialContext()); nativeAdCallToAction.setVisibility(nativeAd.hasCallToAction() ? View.VISIBLE : View.INVISIBLE); nativeAdCallToAction.setText(nativeAd.getAdCallToAction()); sponsoredLabel.setText(nativeAd.getSponsoredTranslation()); // Create a list of clickable views List<View> clickableViews = new ArrayList<>(); clickableViews.add(nativeAdTitle); clickableViews.add(nativeAdCallToAction); // Register the Title and CTA button to listen for clicks. nativeAd.registerViewForInteraction( adView, nativeAdMedia, nativeAdIcon, clickableViews); } }
res/layout/activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".NativeAdActivity"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World!" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" /> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center_horizontal" android:paddingTop="50dp"> <ScrollView android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="50dp"> <com.facebook.ads.NativeAdLayout android:id="@+id/native_ad_container" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" /> </ScrollView> </RelativeLayout> </android.support.constraint.ConstraintLayout>
native_ad_layout.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/ad_unit" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@android:color/white" android:orientation="vertical" android:paddingLeft="10dp" android:paddingRight="10dp"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:paddingBottom="10dp" android:paddingTop="10dp"> <com.facebook.ads.AdIconView android:id="@+id/native_ad_icon" android:layout_width="35dp" android:layout_height="35dp" /> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" android:paddingLeft="5dp" android:paddingRight="5dp"> <TextView android:id="@+id/native_ad_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:ellipsize="end" android:lines="1" android:textColor="@android:color/black" android:textSize="15sp" /> <TextView android:id="@+id/native_ad_sponsored_label" android:layout_width="wrap_content" android:layout_height="wrap_content" android:ellipsize="end" android:lines="1" android:textColor="@android:color/darker_gray" android:textSize="12sp" /> </LinearLayout> <LinearLayout android:id="@+id/ad_choices_container" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="end" android:orientation="horizontal" /> </LinearLayout> <com.facebook.ads.MediaView android:id="@+id/native_ad_media" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:padding="5dp"> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="3" android:orientation="vertical"> <TextView android:id="@+id/native_ad_social_context" android:layout_width="match_parent" android:layout_height="wrap_content" android:ellipsize="end" android:lines="1" android:textColor="@android:color/darker_gray" android:textSize="12sp" /> <TextView android:id="@+id/native_ad_body" android:layout_width="match_parent" android:layout_height="wrap_content" android:ellipsize="end" android:gravity="center_vertical" android:lines="2" android:textColor="@android:color/black" android:textSize="12sp" /> </LinearLayout> <Button android:id="@+id/native_ad_call_to_action" android:layout_width="100dp" android:layout_height="30dp" android:layout_gravity="center_vertical" android:layout_weight="1" android:background="#4286F4" android:paddingLeft="3dp" android:paddingRight="3dp" android:textColor="@android:color/white" android:textSize="12sp" android:visibility="gone" /> </LinearLayout> </LinearLayout>
テストデバイス
AdSettings.addTestDevice("0bd2axxxxxxxxxxxxxxxxxxxxxxxxx"); nativeAd.loadAd();
loadAd()直前にaddTestDeviceを追加
addTestDeviceは実機をつないで接続するとその端末のTestDeviceがlogcatに表示されるので、それを入力する。
AudienceNetworkAds.initialize()の下とかだとだめっぽい。