Windows Phone - Nokia Ad Exchange (NAX)

Windows Phone - Nokia Ad Exchange (NAX)

撰寫App發佈至Marketplace,除了是爽度證明自己開發的能力與創意之外,當然會希望多少能為自己賺一些外快。

之前撰寫過<Windows Phone - Microsoft Advertising的使用心得>,讓我自己在App裡使用廣告,偶爾還是會收到錢。

今天要介紹的主要是Nokia Ad Exchange,其實Nokia是在WP投入最有心的廠商,因此,來看一下他廣告怎麼使用吧。

 

按照以下歩驟,應能很快速地在App建立起Advertising:

 

(1) 申請帳號:

      請至「https://nax.nokia.com/iamp/nokia/signup」,依下圖畫面將必要的資料進行填寫,填寫後將會收到mail通知已註冊:

      imageimage

      需注意的是,這個申請跟一般申請hotmail帳號不一樣,需等待幾天的審核之後才會進行Mail的通知。

      如果通過申請的話,將會收到如下方的Mail,告知您可以去登入Nokia Ad Exchange建立自己的App ID:

      image

 

 

(2) 設定帳號資料與匯款機制:

     申請成功後,第一次登入Nokia Ad Exchange會需填寫個人資料與匯款資料,可參考以下的填寫內容,

不過要記得「中文不可行」,它的問題與過去Dev Center一樣無法正確儲存中文,所以建議以英文來撰寫個人資料;

     a. 填寫個人資料;

          0000

 

     b. 填寫匯款方式;

         00001

          此部分我以Paypal為例,它有很多種匯款的方式供我們選擇,但避免像Dev Center(現在有Paypal)或Advertising比較複雜的付款方式,

          我建議選擇Paypal,只要申請一個Paypal帳號後,它在建立時會需要您輸入登入Paypal的帳號與密碼。

 

 

(3) 建立需要App ID:

     建立App ID需要必填以下的項目內容:

     image

欄位 說明
Platform 選擇Windows Phone;
App Name 該App Name與實際發佈至Dev Center的不需一致,主要是用於識別該App ID為何物而已;(無法輸入中文);
該App Name即為AppID;
Store Download Link 請輸入App在http://www.windowsphone.com網頁市集中的URL,也可以至Dev Center針對該App取得Deep Link;
Category 選擇該App所屬的類型;具有多種,建議與Dev Center中選擇的一致
App Descrption 描述該App ID的內容;(無法輸入中文,儲存會變成亂碼);
Age group 建議選擇All,如果您的App有年紀限制,再選擇其他的選項;
Use location 根據您的App是否有使用Location功能再選擇;

    

 

(4) 下載SDK,並且加入自己的專案中;

      image 

      具有多種SDK版本以支持不同的平台使用,目前我們以下載「Windows Phone 8」為例。

 

a. 下載好SDK後,進行解壓縮取得「InneractiveAdSDK」目錄;

 

b. 將「InneractiveAdSDK」目錄中的「Inneractive.Ad.dll」進行解鎖;

    b-1. 在Inneractive.Ad.dll按滑鼠右鍵,選擇「內容」;

    b-2. 點擊「解除封鎖」,按下「確認」或「套用」;

           0002

 

c. 複製「InneractiveAdSDK」目錄中的「Inneractive.Ad.dll」與「InneractiveAdLocation.cs」至自己的WP專案;

    c-1. InneractiveAdLocation.cs 放置與其他.cs或.xaml同一層目錄;

    c-2. Inneractive.Ad.dll 放置專案中的 [\bin」目錄;

 

d. 將Inneractive.Ad.dll加入專案參考;

    0003

 

e. 打開WMAppManifest.xml中加入必要的<Capabilities/>;

<Capabilities>
  <Capability Name="ID_CAP_NETWORKING" />
  <Capability Name="ID_CAP_WEBBROWSERCOMPONENT" />
  <Capability Name="ID_CAP_PHONEDIALER" />
  <Capability Name="ID_CAP_IDENTITY_DEVICE" />
</Capabilities>

   ID_CAP_NETWORKING、ID_CAP_WEBBROWSERCOMPONENT、ID_CAP_PHONEDILAER、ID_CAP_IDENTITY_DEVICE;

 

f. 開啟要加入Nokia Ad Exchange的Page,在xaml中加入Nokia Ad Exchange的xaml內容:

<!-- AppID即是在Nokia Ad Exchange網站登錄的app name -->
<ad:InneractiveAd 
   xmlns:ad="clr-namespace:Inneractive.Nokia.Ad;assembly=Inneractive.Ad" 
   AppID="MyCompany_MyApp" 
   AdType="IaAdType_Banner" 
   ReloadTime="60"
   Name="InneractiveXamlAd" />

 

g. 接著啟動設備來看一下結果:

    wp_ss_20130821_0006[1]

 

以上是介紹簡單將Nokia Ad Exchange加到自己的App之中,是不是非常容易呢!但Nokia Ad Exchange不只有這樣而已,它還提供很多,

包括:廣告的類型、事件的操控、用戶點擊廣告事件的擷取等,往下便一一說明。

 

〉InneractiveAd:

    建立該物件或使用XAML撰寫時,必要的屬性如下:

(1) AppID:

     An App ID is provided to you upon the creation of an app  on your inneractive console . (即是上述步驟所建立的App Name);

 

(2) AdType:

     具有三種類型:

     a. IaAdType_Banner:橫幅圖像廣告;

     b. IaAdType_Text:純文字(連結)廣告;

     c. IaAdType_Interstitial:插入性整頁廣告;(該廣告要搭配事件,讓用戶點擊後,不再呈現,不然會一直出現關不掉)

    透過下圖來識別:

    wp_ss_20130821_0007 wp_ss_20130821_0008

 

(3) Reload Time:

      The number of seconds between ad refreshes.  (This value is not relevant for interstitial ads.)

      The minimum interval is 30 seconds. The default interval is 60 seconds. (最小30秒;預設60秒;)

      廣告重新整理(取得)的間隔時間。建議使用預設即可,因為用戶不會一直點,所以僅要有呈現才是我們的重點;

    

 

 

〉利用程式控制InneractiveAd:

    inneractive SDK 提供二種方式讓開發人員可以掌握更多功能:

    a. calling a method:

// optionalParams為一個dictionary可放置有關設定InneractiveAd物件的參數;
InneractiveAd.DisplayAd("MyCompany_MyApp", 
                        InneractiveAd.IaAdType.IaAdType_Banner, 
                        ContentPanel, 
                        60,
                        optionalParams);

       如果未設定optionalParams,系統將會出現:「Object reference not set to an instance of an object.」的錯誤;

 

    b.using a control;

// optionalParams為一個dictionary可放置有關設定InneractiveAd物件的參數;
InneractiveAd iaBanner = new InneractiveAd(
                            "MyCompany_MyApp", 
                            InneractiveAd.IaAdType.IaAdType_Banner, 
                            60, 
                            optionalParams);
// 加入畫面中
ContentPanel.Children.Add(iaBanner);
 

 

 

〉改善InneractivtAd的Performance:

    上述有描述到一個參數「optionalParams」與其他作法可以調整InneractiveAd的效果,並建立比較好的user experience。

根據<WindowsPhone 8 SDK guidelines>的內容,針對幾個主題來加以說明:

 

(A) Supplying additional parameters to improve ad targeting:

       以下提供多種參數以控件InneractiveAd有更好的呈現,並且能夠投遞用戶於該App預計可收到的廣告內容。

Paramaters name (C#) Paramaters name (XML) Description
Key_Location Location 填入國家別,以「,」隔開,中間沒有空格。
例如:US,NY,NY。

(註) 填TW有無廣告呢?有的,但不會是中文的廣告;
Key_keywords Keywords 類似用戶的特定會話相關的關鍵詞,以「,」隔開,中間沒有空格。
例如:cars,music,sport。
Key_Gps_Coordinates GPS GPS標準代碼資料,包括經/緯度,以「,」隔開,中間沒有空格。
例如:53.542132,-2.239856。

(註) 如果使用了該屬性,要記得至WMAppManifest.xml加入「ID_CAP_LOCATION」這個Capability。(建議最好一開始就加入該特性)
如果沒有設定該值的話,SDK仍會自己取得。
Key_Gender Gender 用戶的性別。值:M, m, F, f, Male, and Female。
Key_Age Age 用戶的年紀。
Key_Ad_Alignment AdAlignment IaAdType_Banner專用,橫幅廣告在容器內(例如:Grid)的對齊方式。
其值如下:

•InneractiveAd.IaAdAlignment.TOP_LEFT
•InneractiveAd.IaAdAlignment.TOP_CENTER
•InneractiveAd.IaAdAlignment.TOP_RIGHT
•InneractiveAd.IaAdAlignment.BOTTOM_LEFT
•InneractiveAd.IaAdAlignment.BOTTOM_CENTER
•InneractiveAd.IaAdAlignment.BOTTOM_RIGHT
•InneractiveAd.IaAdAlignment.CENTER_LEFT
•InneractiveAd.IaAdAlignment.CENTER
•InneractiveAd.IaAdAlignment.CENTER_RIGHT
Key_OptionalAdWidth OptionalAdWidth IaAdType_Banner專用,指定該width值並不能保證每次都能收到指定width的廣告,除非遇到廣告的容器可以納入指定的size。

如果需要指定廣告的寬度,可以使用該參數。
Key_OptionalAdHeight OptionalAdHeight IaAdType_Banner專用,指定該height值並不能保證每次都能收到指定height的廣告,除非遇到廣告的容器可以納入指定的size。

如果需要指定廣告的寬度,可以使用該參數。
Key_RequiredAdWidth RequiredAdWidth 為廣告元件指定一個執行時需要的width。
指定該值後不管廣告有無被找到,均會保留固定的width。

使用這個參數會影響畫面的填充率,建議使用於當畫面只有一個有限位置來呈現廣告的情境,再使用這屬性。
Key_RequiredAdHeight RequiredAdHeight 為廣告元件指定一個執行時需要的height。
指定該值後不管廣告有無被找到,均會保留固定的height。

使用這個參數會影響畫面的填充率,建議使用於當畫面只有一個有限位置來呈現廣告的情境,再使用這屬性。

關於指定Ad的width/height範圍有:

‧300 x 50

‧320 x 50

‧480 x 80

‧300 x 250 (rectangle)

‧320 x 480 (interstitial)

 

了解有那些參數後,舉例程式範例:

private void AddNokiaAd()
{
    // 設定Ad元件需要的參數
    Dictionary<InneractiveAd.IaOptionalParams, string> tOptionParams =
            new Dictionary<Inneractive.Ad.InneractiveAd.IaOptionalParams, string>
    {
        {InneractiveAd.IaOptionalParams.Key_Age, "25"},
        {InneractiveAd.IaOptionalParams.Key_Gender, "m"},
        {InneractiveAd.IaOptionalParams.Key_Keywords, "test,inneractive"},
        {InneractiveAd.IaOptionalParams.Key_Gps_Coordinates, "53.5422,-2.2396"},
        {InneractiveAd.IaOptionalParams.Key_Location, "US,NY,NY"},
        {InneractiveAd.IaOptionalParams.Key_Ad_Alignment, InneractiveAd.IaAdAlignment.CENTER.ToString()},
        {InneractiveAd.IaOptionalParams.Key_OptionalAdWidth, "480"},
        {InneractiveAd.IaOptionalParams.Key_OptionalAdHeight, "80"}
    };
 
    // 建立Ad物件,因上述使用了Key_OptionalAdWidth/Key_OptionalAdHeight,
    // 所以Ad Type選用:IaAdType_Banner
    InneractiveAd tAd1 = new InneractiveAd("MyCompany_MyApp",
                            InneractiveAd.IaAdType.IaAdType_Banner,
                            60, tOptionParams);
    ContentPanel.Children.Add(tAd1);
}

 

 

(B) Providing a more seamless integration between ads and application content:

       上述介紹了Ad元件的參數讓廣告內容投遞可以更加符合需求。接下來,討論如何讓Ad元件與App做一些互動,例如:

用戶點擊了廣告的事件後要暫停廣告的投遞、廣告元件收到廣告或無廣告的訊息…等。

 

InneractiveAd提供了以下四種事件:

Event name Description
AdReceived 當一個新的付費廣告資訊被收到與顯示於畫面上,觸發該事件;
DefaultAdReceived 當一個新的house ad資訊被收到與顯示畫面上,觸發該事件;
AdFailed 當一個廣告請求失敗無法取到廣告資訊時,觸發該事件;
AdClicked 當用戶點擊了該廣告,觸發該事件。

 

範例程式如下:

private void InitAdd()
{
    InneractiveAd tAd1 = new InneractiveAd("MyCompany_MyApp",
                            InneractiveAd.IaAdType.IaAdType_Banner,
                            60, tOptionParams);
    // 註冊相關事件的處理
    tAd1.DefaultAdReceived += tAd1_DefaultAdReceived;
    tAd1.AdReceived += tAd1_AdReceived;
    tAd1.AdFailed += tAd1_AdFailed;
    tAd1.AdClicked += tAd1_AdClicked;
}
 
void tAd1_AdClicked(object sender)
{
    System.Diagnostics.Debug.WriteLine("InneractiveAd: AdClicked");
}
 
void tAd1_AdFailed(object sender)
{
    // failed事件一定要處理,因為當沒有廣告收到時,
     // 如果你有設定RequiredWidth/RequireHeight的話,記得把Ad隱藏才不會留一個空白;
    System.Diagnostics.Debug.WriteLine("InneractiveAd: AdFailed");
}
 
void tAd1_AdReceived(object sender)
{
    System.Diagnostics.Debug.WriteLine("InneractiveAd: AdReceived");
}
 
void tAd1_DefaultAdReceived(object sender)
{
    System.Diagnostics.Debug.WriteLine("InneractiveAd: DefaultAdReceived");
}

failed事件一定要處理,當沒有廣告收到時, 如果你有設定RequiredWidth/RequireHeight的話,記得把Ad隱藏才不會留一個空白;

 

 

(C) Using location-based ads:

       另一個使用NAX Ad的重點在於使用location-based,增加投遞廣告的效果。在使用上有幾點要注意:

a. 由於需要使用Location的功能,要記得至WMAppManifest.xml加入「ID_CAP_LOCATION」的Capability;

b. 應用程式要加上處理Location的擷取與定位;

c. Nokia Ad Exchange對於location-based的Ad很貼心的提供了「InneractiveAdLocation.cs」讓開發人員可以直接使用;

 

這三點是搭配location特性要注意的,透過範例程式來說明藉由「InneractiveAdLocation.cs」如何操作:

private void AddAdUnitByLocation()
{
    IaLocationClass iaLocation = new IaLocationClass();
    iaLocation.Done += new System.EventHandler<IaLocationEventArgs>(iaLocation_Done);
    iaLocation.StartWatchLocation(); 
}
 
void iaLocation_Done(object sender, IaLocationEventArgs e)
{
    // 設定Ad元件需要的參數
    Dictionary<InneractiveAd.IaOptionalParams, string> tOptionParams =
            new Dictionary<Inneractive.Ad.InneractiveAd.IaOptionalParams, string>
    {
        {InneractiveAd.IaOptionalParams.Key_Age, "25"},
        {InneractiveAd.IaOptionalParams.Key_Gender, "m"},
        {InneractiveAd.IaOptionalParams.Key_Keywords, "test,inneractive"},
        {InneractiveAd.IaOptionalParams.Key_Location, "US,NY,NY"},
        {InneractiveAd.IaOptionalParams.Key_Ad_Alignment, InneractiveAd.IaAdAlignment.CENTER.ToString()},
        {InneractiveAd.IaOptionalParams.Key_OptionalAdWidth, "480"},
        {InneractiveAd.IaOptionalParams.Key_OptionalAdHeight, "80"}
    };
    if (e != null && e.location != null)
    {
        try
        {
            tOptionParams.Add(InneractiveAd.IaOptionalParams.Key_Gps_Coordinates, e.location);
        }
        catch (ArgumentException ex)
        {
            System.Diagnostics.Debug.WriteLine("Location problem: " + e.location);
        }
    }
    // 建立Ad物件,因上述使用了Key_OptionalAdWidth/Key_OptionalAdHeight,
    // 所以Ad Type選用:IaAdType_Banner
    InneractiveAd tAd1 = new InneractiveAd("MyCompany_MyApp",
                            InneractiveAd.IaAdType.IaAdType_Banner,
                            60, tOptionParams);
    ContentPanel.Children.Add(tAd1);
}

利用IaLocationClass啟動Location服務來擷取目前用戶的所在位置,接著在Done的Event Handler來處理廣告單元的建立。

如果找不到IaLocationClass可以到「InneractiveAdSDK」目錄中的「InneractiveAdLocation.cs」至自己的WP專案。

 

相關Location的使用,另外可參考以下文章的說明:

‧Windows Phone 7 - 學習Location Service與Map地圖

‧Windows Phone 7 - 使用Google Map API將地址轉成座標

‧Windows Phone - 深入使用Bing Map - 客製Pushpin

 

更完整的官方程式可以參考<Windows Phone 8 SDK guidelines>的內容。

 

[注意]

1. inneractive SDK不支援在Visual Studio designer呈現內容;

2. inneractive SDK不支援透過XAML來呈現插播性( Interstitial )廣告的呈現,建議使用code的方式呼叫DisplayAd()方法來呈現插播性廣告。

 

======

以上是簡單介紹Nokia Ad Exchange的部分,我個人覺得非常容易上手,至於廣告投遞的成效如何,

可能還需要時間來證明一下,但我相信如果使用Nokia Ad Exchange的人多,廠商看到也會到Nokia Ad Exchange中增加廣告內容,

這樣我們開發人員也能更有賺錢的機會。

 

References:

‧Nokia Ad Exchange - FAQ

‧Windows Phone - NAX

‧Nokia Launches NAX Cross-Platform Ad Exchange With 120 Ad Networks & Agencies, Powered By Inneractive

‧Nokia opens up two developer programs

‧SDK integration - Windows Phone (重要)

‧Windows Phone 8 SDK guidelines (重要)

 

Dotblogs 的標籤: