İlk adım, Android PAL SDK'sını uygulamanıza eklemektir.
Android PAL SDK'sını kitaplık olarak ekleme
18.0.0 sürümü itibarıyla PAL SDK'sı Google'ın Maven deposunda barındırılmaktadır ve uygulamanıza aşağıdaki şekilde eklenebilir:
app/build.gradle
...
dependencies {
implementation 'com.google.android.gms:play-services-pal:22.0.0'
...
}
Alternatif olarak, PAL SDK'sı Google'ın Maven deposundan indirilebilir ve uygulamanıza manuel olarak eklenebilir.
Tek seferlik sayı oluşturma
"Tek seferlik", PAL tarafından NonceLoader
kullanılarak oluşturulan tek bir şifrelenmiş dizedir.
PAL SDK'sı, her yeni akış isteğinin yeni oluşturulmuş bir tek seferlik sayı ile birlikte gönderilmesini gerektirir. Ancak tek seferlik değerler, aynı akıştaki birden fazla reklam isteği için yeniden kullanılabilir. PAL SDK'sını kullanarak tek seferlik bir sayı oluşturmak için MyActivity.java
dosyasında değişiklik yapın. Tek seferlik bir değer oluşturmak için PAL'ı kullanan örnek bir uygulama görmek istiyorsanız GitHub'dan Android örneğini indirin.
Önce PAL SDK'sını içe aktarmanız, NonceLoader
ve NonceManager
değerlerini saklayacak bazı özel mülkler oluşturmanız ve ardından NonceLoader'ınızı başlatmanız gerekir.
Uygulamanızda birden fazla sayfa veya eşdeğer yapı yoksa uygulamanızdaki her kullanıcı oturumu için NonceLoader
sınıfının yalnızca bir örneğini oluşturmanızı öneririz. Bu işlem, sayfa ilişkilendiricisinin (&correlator
) bir sayfanın veya kullanıcının uygulamadaki oturumunun süresi boyunca değişmemesini sağlar. Her yeni akış için bir kez sıfırlanması gereken akış ilişkilendiricisi (&scor
) üzerinde yine de kontrol sahibi olursunuz.
Sıklık sınırı ve rakip hariç tutma özelliklerinin düzgün çalışması için aynı yayının tüm reklam isteklerinin aynı NonceLoader
ve yayın ilişkilendirici değerini paylaşması gerekir.
import android.app.Activity;
import android.os.Bundle;
import com.google.ads.interactivemedia.pal.NonceLoader;
import com.google.ads.interactivemedia.pal.NonceManager;
import com.google.ads.interactivemedia.pal.NonceRequest;
import com.google.ads.interactivemedia.pal.ConsentSettings;
import com.google.android.gms.tasks.OnFailureListener;
import com.google.android.gms.tasks.OnSuccessListener;
import java.util.HashSet;
import java.util.Set;
public class MainActivity extends Activity {
...
private NonceLoader nonceLoader;
private NonceManager nonceManager = null;
private ConsentSettings consentSettings;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// The default value for allowStorage() is false, but can be
// changed once the appropriate consent has been gathered. The
// getConsentToStorage() method is a placeholder for the publisher's own
// method of obtaining user consent, either by integrating with a CMP or
// based on other methods the publisher chooses to handle storage consent.
boolean isConsentToStorage = getConsentToStorage();
videoView = findViewById(R.id.video_view);
videoView.setOnTouchListener(this::onVideoViewTouch);
consentSettings = ConsentSettings.builder()
.allowStorage(isConsentToStorage)
.build();
// It is important to instantiate the NonceLoader as early as possible to
// allow it to initialize and preload data for a faster experience when
// loading the NonceManager. A new NonceLoader will need to be instantiated
//if the ConsentSettings change for the user.
nonceLoader = new NonceLoader(this, consentSettings);
...
}
Ardından, tek seferlik şifre oluşturmayı tetikleyecek bir işlev oluşturun. Tek bir akış oynatımındaki tüm reklam istekleri için yalnızca bir tek seferlik rastgele sayı gerekir. Test amacıyla, test uygulamanızda bir düğmeyi tıkladığınızda bu işlevi çağırabilirsiniz. Burada ayarlanan NonceRequest
parametreleri örnek parametrelerdir. Parametrelerinizi kendi uygulama özelliklerinize göre ayarlamanız gerekir.
Bu işlev, tek seferlik şifre oluşturma işlemini eşzamansız olarak tetikler. Bu nedenle, tek seferlik şifre isteğinin başarılı veya başarısız sonuçlarını işlemek için bir AsyncTask
uygulamanız gerekir:
public void generateNonceForAdRequest() {
Set supportedApiFrameWorksSet = new HashSet();
// The values 2, 7, and 9 correspond to player support for VPAID 2.0,
// OMID 1.0, and SIMID 1.1.
supportedApiFrameWorksSet.add(2);
supportedApiFrameWorksSet.add(7);
supportedApiFrameWorksSet.add(9);
NonceRequest nonceRequest = NonceRequest.builder()
.descriptionURL("https://example.com/content1")
.iconsSupported(true)
.omidPartnerVersion("6.2.1")
.omidPartnerName("Example Publisher")
.playerType("ExamplePlayerType")
.playerVersion("1.0.0")
.ppid("testPpid")
.sessionId("Sample SID")
.supportedApiFrameworks(supportedApiFrameWorksSet)
.videoPlayerHeight(480)
.videoPlayerWidth(640)
.willAdAutoPlay(true)
.willAdPlayMuted(false)
.build();
NonceCallbackImpl callback = new NonceCallbackImpl();
nonceLoader
.loadNonceManager(nonceRequest)
.addOnSuccessListener(callback)
.addOnFailureListener(callback);
}
private class NonceCallbackImpl implements OnSuccessListener<NonceManager>, OnFailureListener {
@Override
public void onSuccess(NonceManager manager) {
nonceManager = manager;
String nonceString = manager.getNonce();
Log.i("PALSample", "Generated nonce: " + nonceString);
// from here you would trigger your ad request and move on to initialize content
}
@Override
public void onFailure(Exception error) {
Log.e("PALSample", "Nonce generation failed: " + error.getMessage());
}
}
Bir tek seferlik sayı yöneticisi oluşturulduktan sonra tek seferlik sayı, nonceManager.getNonce()
kullanılarak herhangi bir zamanda alınabilir.
Reklam isteğine tek seferlik sayı ekleme
Oluşturulan tek seferlik rastgele sayıyı kullanmak için reklam isteklerinizi göndermeden önce reklam etiketinize bir givn
parametresi ve tek seferlik rastgele sayı değeri ekleyin.
/**
* The ad tag for your ad request, for example:
* https://pubads.g.doubleclick.net/gampad/ads?sz=640x480&iu=/124319096/external\
* /single_ad_samples&ciu_szs=300x250&impl=s&gdfp_req=1&env=vp&output=vast&unviewed_position_start=1\
* &cust_params=deployment%3Ddevsite%26sample_ct%3Dlinear&correlator=
*
* For more sample ad tags, see
* developers.google.com/interactive-media-ads/docs/sdks/html5/client-side/tags
*/
private static final String DEFAULT_AD_TAG = "Your ad tag";
...
@Override
public void onSuccess(NonceManager manager) {
nonceManager = manager;
String nonceString = manager.getNonce();
Log.i("PALSample", "Generated nonce: " + nonceString);
// Append the nonce to the ad tag URL.
makeAdRequest(DEFAULT_AD_TAG + "&givn=" + nonceString);
}
Oynatma etkinliklerini izleme
Son olarak, oynatıcınız için çeşitli etkinlik işleyicileri uygulamanız gerekir. Test amacıyla bunları düğme tıklama etkinliklerine ekleyebilirsiniz ancak gerçek bir uygulamada bunlar uygun oynatıcı etkinlikleri tarafından tetiklenir:
public void sendAdClick() {
if (nonceManager != null) {
nonceManager.sendAdClick();
}
}
public void sendPlaybackStart() {
if (nonceManager != null) {
nonceManager.sendPlaybackStart();
}
}
public void sendPlaybackEnd() {
if (nonceManager != null) {
nonceManager.sendPlaybackEnd();
}
}
public void onVideoViewTouch(MotionEvent e) {
if (nonceManager != null) {
nonceManager.sendTouch(e);
}
}
Uygulamanızdaki her işlevi ne zaman çağıracağınızı aşağıda bulabilirsiniz:
sendPlaybackStart()
: Video oynatma oturumunuz başladığındasendPlaybackEnd()
: Video oynatma oturumunuz sona erdiğindesendAdClick()
: İzleyici bir reklamı her tıkladığındasendTouch()
: Oynatıcıyla her dokunma etkileşiminde
(İsteğe bağlı) Google Ad Manager sinyallerini üçüncü taraf reklam sunucuları aracılığıyla gönderme
Üçüncü taraf reklam sunucunuzu Google Ad Manager ile çalışacak şekilde ayarlarken her reklam isteğinde tek seferlik değeri yakalayıp iletmek için sunucunuzun dokümanlarına bakın. Sağlanan örnekte, nonce parametresinin dahil edildiği bir reklam isteği URL'si gösterilmektedir. Tek seferlik rastgele sayı parametresi, PAL SDK'sından aracı sunucularınıza ve ardından Ad Manager'a iletilerek daha iyi para kazanma olanağı sağlar.
Üçüncü taraf reklam sunucunuzu, sunucunun Ad Manager'a gönderdiği isteğe tek seferlik kimliği dahil edecek şekilde yapılandırın. Aşağıda, üçüncü taraf reklam sunucusunun içinde yapılandırılmış bir reklam etiketi örneği verilmiştir:
'https://pubads.serverside.net/gampad/ads?givn=%%custom_key_for_google_nonce%%&...'
Daha fazla bilgi için Google Ad Manager sunucu tarafı uygulama kılavuzuna bakın.
Ad Manager, tek seferlik değer belirlemek için givn=
değerini arar. Üçüncü taraf reklam sunucusunun, %%custom_key_for_google_nonce%%
gibi kendi makrosunu desteklemesi ve bunu önceki adımda sağladığınız tek seferlik sorgu parametresiyle değiştirmesi gerekir. Bunu nasıl yapacağınızla ilgili daha fazla bilgiyi üçüncü taraf reklam sunucusunun belgelerinde bulabilirsiniz.