顯示具有 android 標籤的文章。 顯示所有文章
顯示具有 android 標籤的文章。 顯示所有文章

2014年4月24日 星期四

Google think Gaming 投影片筆記(望文生義版)


Sam Lu 老師在FB非常佛心的PO了一篇文章, 分享Google think Gaming活動的slide:
http://event.e21magicmedia.com.tw/Google/ThinkGaming/TKL.htm

因為我自己開發的App都屬於應用比較多, 因此對前兩篇   "2014遊戲市場功略" 與 "決勝海外遊戲市場" 比較有興趣, 摘錄重點如下
但因小弟我並沒有到現場聽,望文生義難免會有錯誤, 還請到過現場的大大指導一下

另外2篇 "幻想神域"媒體計畫大公開", "遊戲營運商經驗分享" 我覺得有開發遊戲的朋友應該很值得一看

-----------------------------------------本文開始分隔線----------------------------------------
2014遊戲市場功略

1. 針對平板設計
2. 針對大陸與印度市場
3. 行動廣告增加
4. 2014 Q1 on Google Play, Revenue:日>美>韓>德>英, 下載:美>巴西>俄>南韓>印度
5. 手機收入的主要來源: 廣告, 付費功能
6. 新增了與過去不同的廣告種類 : 全版插頁式廣告, BPS(向優質廣告主推薦您的App)
7. 善用Mediatione廣告聯播中介服務(向多個廣告聯播網發出請求,確保有適當的聯播網供應廣告

決勝海外遊戲市場
1. 2013 Q4 IAP in Asia : 日>韓>中>台>港
2. 日本行動遊戲市場前景可觀
3. 日本應用程式消費世界第一
4. 進入日本市場的準備工作...(太多了請自行看投影片,但懷舊IP很吸引人啊.第一個想到FF系列.DQ咧?)
5. 大陸2011-2017年行動遊戲市場規模結構  -智慧型終端遊戲的天下!
6. 大陸行動遊戲用戶在 - 益智休閒遊戲、語錄笑話、棋牌遊戲上更願意點擊廣告 (像神魔應該就沒那個閒功夫吧...)
7. 大陸IP產品(特別是金庸三國等中國特色IP)占最多,但優質遊戲依然少數
8. 韓國2013年市場規模有大陸的2/3(10E)
9. 韓國優勢:高度高速網路覆蓋+隨地付費系統
10.韓國廣告投放 增加投放預算 最佳時間:休閒遊戲:1500- 2200(週五-週日) , RPG&SLG: 2100 - 0400(週六-週一)
11.在韓國,最受歡迎的行動遊戲類型: 設計&音效(簡單/可愛/高品質 3D)
12.總結2013美術推廣經驗:不止遊戲和美工,最重要的還有廣告美術 => 視覺設計師很重要!

2014年1月11日 星期六

好用的ORM library for Android : greenDAO (一) 簡介

本篇想要介紹greenDAO這個平台,對於簡單的SQL來說非常好用,也可以直行一些grouy by跟巢狀查詢的指令,只要不太複雜的功能都可以簡單的實作出來。本篇預設你已經有在Android中撰寫SQL相關程式的經驗。
這系列的文章總共分三篇

  • 簡介
  • greenDAO的使用
  • 進階使用與心得


Android平台有提供一個library SQLiteOpenHelper可以讓developer簡單的(?)呼叫資料庫,根據developer.android.com當中提供的例子,用中文快速回復一下記憶

首先,要先定義你的table schema
public final class FeedReaderContract {
    public FeedReaderContract() {}

    /* Inner class that defines the table contents */
    public static abstract class FeedEntry implements BaseColumns {
        public static final String TABLE_NAME = "entry";
        public static final String COLUMN_NAME_ENTRY_ID = "entryid";
        public static final String COLUMN_NAME_TITLE = "title";
        public static final String COLUMN_NAME_SUBTITLE = "subtitle";
        ...
    }
}
定義資料庫的創建(生)與刪除(死)的script
private static final String TEXT_TYPE = " TEXT";
private static final String COMMA_SEP = ",";
private static final String SQL_CREATE_ENTRIES =
    "CREATE TABLE " + FeedEntry.TABLE_NAME + " (" +
    FeedEntry._ID + " INTEGER PRIMARY KEY," +
    FeedEntry.COLUMN_NAME_ENTRY_ID + TEXT_TYPE + COMMA_SEP +
    FeedEntry.COLUMN_NAME_TITLE + TEXT_TYPE + COMMA_SEP +
    ... // Any other options for the CREATE command
    " )";
private static final String SQL_DELETE_ENTRIES =
    "DROP TABLE IF EXISTS " + FeedEntry.TABLE_NAME;
然後,要建立一個DBHelper,來幫助管理資料庫的創建、刪除與升級(復活)
public class FeedReaderDbHelper extends SQLiteOpenHelper {

    public static final int DATABASE_VERSION = 1;
    public static final String DATABASE_NAME = "FeedReader.db";

    public FeedReaderDbHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(SQL_CREATE_ENTRIES);
    }
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL(SQL_DELETE_ENTRIES);
        onCreate(db);
    }
    public void onDowngrade(SQLiteDatabase db, int oldVersion,int newVersion){
        onUpgrade(db, oldVersion, newVersion);
    }
}
接著,要新增資料的時後code長這樣
SQLiteDatabase db = mDbHelper.getWritableDatabase();

ContentValues values = new ContentValues();
values.put(FeedEntry.COLUMN_NAME_ENTRY_ID, id);
values.put(FeedEntry.COLUMN_NAME_TITLE, title);
values.put(FeedEntry.COLUMN_NAME_CONTENT, content);

long newRowId;
newRowId = db.insert(
         FeedEntry.TABLE_NAME,
         FeedEntry.COLUMN_NAME_NULLABLE,
         values);
要查詢資料的時候,code要寫這樣
SQLiteDatabase db = mDbHelper.getReadableDatabase();

String[] projection = {
    FeedEntry._ID,
    FeedEntry.COLUMN_NAME_TITLE,
    FeedEntry.COLUMN_NAME_UPDATED,
    ...
    };

String sortOrder =
    FeedEntry.COLUMN_NAME_UPDATED + " DESC";
Cursor c = db.query(
    FeedEntry.TABLE_NAME,  // The table to query
    projection,            // The columns to return
    selection,             // The columns for the WHERE clause
    selectionArgs,         // The values for the WHERE clause
    null,                  // don't group the rows
    null,                  // don't filter by row groups
    sortOrder              // The sort order
    );
刪除資料要寫這樣
// Define 'where' part of query.
String selection = FeedEntry.COLUMN_NAME_ENTRY_ID + " LIKE ?";
// Specify arguments in placeholder order.
String[] selectionArgs = { String.valueOf(rowId) };
// Issue SQL statement.
db.delete(table_name, selection, selectionArgs);
更新資料要寫這樣
SQLiteDatabase db = mDbHelper.getReadableDatabase();
// New value for one column
ContentValues values = new ContentValues();
values.put(FeedEntry.COLUMN_NAME_TITLE, title);
// Which row to update, based on the ID
String selection = FeedEntry.COLUMN_NAME_ENTRY_ID + " LIKE ?";
String[] selectionArgs = { String.valueOf(rowId) };
int count = db.update(
    FeedReaderDbHelper.FeedEntry.TABLE_NAME,
    values,
    selection,
    selectionArgs);
而上面的每一步,如果忘記更新到一個欄位,或是多/少一個欄位要的時候,就要在project裡面到處找了。

如果今天developer要寫的code加起來只有這樣,那生活不是簡單多了嗎?
至於要怎麼開始使用呢? 讓我們繼續看下去.......或上官網自己查文件XD


2013年12月18日 星期三

Google AdMob 2013 合作夥伴日 心得

話說Google AdMob合作夥伴日是我一直想要參加的活動,一方面可以參觀Google辦公室(自從參加開吃之後反而更常去XD),一方面也想要多了解這個產業
這次請來了中國的兩位獨立遊戲開發商來加持,並且有Gogolook的WhosCall經驗分享, AdSense的Yiwei 講2014年的展望跟台灣的Allen介紹AdMob的新功能

這次我有幾個心得

  1. 台灣的Game真的比我想像中的少人做,2014年主要還是Game與金磚四國的Game發行
  2. 雖然我還是對應用工具類情有獨鍾,但是Game跟新興市場有關的App還是會多注意
  3. 關於App的周邊library, 如AdMob, Wallet (Instant Buy / IAB) , 能夠專精也是一個高手
  4. 雖然有許多topic是對一個programmer來說有點遠,但對於business層面來講仍然實用。希望未來我能成為一個軟硬能整合,應用能入世,且能填飽肚子的programmer.


首先是Google Mobile team lead Yiwei Liu講 2014年的Mobile Market
總結幾個重點

  1. 80%以上的smartphone使用Android做OS
  2. Tablet的成長加速 (在Google I/O 2013說Tablet的成長Smartphone的1.7倍)
  3. 2013年初Android App的獲利是iOS的1/3, 現在已成長為1/2
  4. 2013Q3Android App的下載次數已超過iOS
  5. 使用者最愛Game與Social-network 類型的App, 在Tablet上Game為67%,與10%, Smartphone上為39%與24% (該學寫Game嗎XD)
  6. 工具類的App在手機上為17%. 平板上4% 
  7. 下載App主要的原因 : 娛樂(leisure)
  8. 金磚四國的App市場競爭不如成熟的歐美那般,成長空間也較大 
  9. 全世界各地,受歡迎的APP種類分布都差不多,
  10. 俄羅斯喜歡競技/力量型Game, 日韓愛可愛型
  11. 目前在歐美前十大受歡迎的遊戲App 有3~4個是中國開發的
  12. 中國有開發商已經在NYSE上市
  13. UX應轉為Flat平坦設計
  14. 強化使用者的retention rate(黏度) : 關鍵字.第一印象.使用者互動,Lose點,Cross Promotion, Wake Up 沉睡用戶
  15. 中小型的開發商應該避免針對特定族群開發遊戲: 應該老少咸宜
  16. Be social. Add Story Line to your game
  17. 跟網遊MMO學習
  18. 工具類的App可以加點遊戲趣味在裡頭
  19. AdMob + IAP 的時機 : 暫停頁,切換頁,節慶特惠,


Allen Ko 介紹Good New AdMob

  1. 新的全版插頁式廣告(舉例: KNY的交通App),eCPM提升十倍! ( eCPM請高手補完...)
  2. 申請高單價展示廣告 (須被審核)
  3. New in AdMob Mediation : 可管理20+個廣告聯播網與自家Ad. 從%轉換為$, 可Localize
  4. eCPM Floor設定(又是一個我不懂的東西)
  5. 更景準的廣告投置:In App搜尋廣告:如同用Google搜尋會有相關的廣告出來一樣, 在App裡用Search 你的廣告就會跟search的結果有關, 增加廣告的點擊率.
  6. DFP for mobile (完全不懂)
  7. Content URL : 經過Allan解釋, 由於App的資料無法像web一樣被Google的Robot craw過分析,那怎麼辦呢? 就是申請Content url,把你的App資料用網站呈現給Google,需要另外申請,這我正在研究中...
  8. Google Play排名大解密 : 演算法重要指標: 
    1. 安裝率(越高越好)
    2. 卸載率(越低越好)
    3. 安裝時間(越長越好)
    4. 用戶活躍程度
    5. 用戶評分
    6. APK新上傳一個月內有加權
  9. 增加下載的方法
    1. 簡潔明瞭,有識別度的icon
    2. 名稱,說明
    3. 真實畫面截圖
    4. 影音御覽
    5. G+
    6. 針對不同地區優化
    7. 避免過多關鍵字(比如"跟Angry Bird一樣的.....")
接下來是兩個來自對岸的遊戲開發大牛
Wesley Bao, CEO & Co-Founder , Coconut Island (啪啪英雄還蠻好玩的XD)
主講: 獨立出版或是尋找出版商

  1. 這兩個talk真的很棒, 原來在大陸Google Play很麻煩, 所有的下載必須透過這些才有辦法安裝 
    1. 91手機助手 
    2. 360手機助手 
    3. baidu手機助手 
    4. 金山手機助手
  2. 在大陸手機付費沒辦法用in-app-billing,常要使用第三方如Paypal之類(聽說現在台灣Google Play In App Billing只能用IAB with Google Wallet, 不然會被下架,請指正)
  3. 選擇與出版商合作的好處
    1. 借重出版商的知名度以推廣付費版的APP
    2. 借重出版商的銷售渠道,得已被feature或者報導
    3. 借重出版商的名氣與品牌得到較好的推薦位置
    4. 專職製作人為遊戲把關
    5. QA團隊會保證你的遊戲符合APP STORE的要求,因此縮短上架時間
    6. 一手包辦所有銷售工作
  4. 可能有的缺點
    1. 出版商沒有立即拿出真金白銀來推廣
    2. 為了要整合API,免費版遲遲無法推出
    3. 如果前兩周銷售量一般,更不會有後續推廣
    4. 出版商推廣不給力
    5. 溝通成本太高,執行效率太低
    6. 沒有集成第三方SDK的自由
    7. 全球發行沒有細緻的本地化
  5. 因此獨立開發商對於出版商可有以下交涉手段
    1. 要求預付(代理)金,COVER開發成本
    2. 要求承諾推廣力度
    3. 分成
    4. 保留IP
    5. 謹慎全球發行
  6. 找到出版商的方法
    1. Email
    2. 參展 : GDC  , Game Connection
    3. 參賽 : IGF , Selected projects , IMGA, Game Jam
另外是華樂互動信息技術的周海林
因為時間不太夠了,所以講得很快,他非常熱情,我憑印象有幾點重點
  1. 一開始求快,公司每個月都要有產品上架,因此每個團隊都為各自的最後期限再拼。到了後來發現要加強retention rate,所以開始加強social與online功能
  2. 建議多參加AdMob這類的活動,可以跟Google尋求幫忙
  3. 硬卡點(非得付費否則不能過關)在Google Play是被禁止的,但因為大陸不靠Google Play,因此也行
  4. 限時大力包,是個非常好的搶錢時機點(XD)
最後是Gogolook的Talk抱歉我沒有看到講者是誰
介紹的是最近被Google Feature的Whos Call
  1. 前百萬與許多的下載來自中東
  2. 壞的Icon設計(雖然看起來很酷)會讓使用者不知道這是甚麼功能以至於下載量減少
  3. 介紹了Business Model,準備往B2B發展跟B 收錢
基本上這次真的是收穫滿滿
由於有些東西有著作權的部分可能不能PO上網
就附上一張當天的餐點做Ending吧


本篇文章純屬個人分享
若有錯誤請不吝指教 : cnevinchen@gmail.com




2013年7月18日 星期四

Install Eclipse in Ubuntu 13.04 64 bit

If your OS is Ubuntu 13.04 . I can provide some suggestion.
1. install or upgrade ia32-lib
   sudo apt-get upgrade ia32-libs
2. check if you have the right permission on aapt and sdk manager folder
   chmod 777 <adt tool path>/sdk
3. start eclipse
   sudo eclipse
4. Run Project->Clean in Eclipseh

2013年7月17日 星期三

Install Android Studio in Ubuntu 13.04 64 bit

1. Install JDK :
Steps : http://apexu.com/apexu/tw/modules/publisher/item.php?itemid=35
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java7-installer
sudo update-java-alternatives -s java-7-oracle (update version, not required)
sudo apt-get remove oracle-java7-installer (remove JDK, not required) 

2. Download Android Studio
http://developer.android.com/sdk/installing/studio.html


3. Download NDK(Optional):
http://developer.android.com/tools/sdk/ndk/index.html

4. Launch! Go to <extraction path>/android-studio/bin/ , ./idea.sh.

5. Add idea.sh to PATH(Optional) :
@>export PATH=$PATH:/home/nevin/ANDROID/IDEA/android-studio/bin

6. Install ADB
sudo apt-get install android-tools-adb