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 的標籤: