AdWhirl我們在前一篇有介紹過了,主要是可以一次輪播好幾種Ad (AdMob、IAd、Google AdSense),今天我們試著來接Vpon。
早先接Vpon比較麻煩,還要自己在AdWhirl內新增Custom Event,然後自己實作event的內容,但現在Vpon已經有跟AdWhirl整合在一起了,連結在此 (注意下面網址的差異):
AdWhirl http://www.adwhirl.com/
Vpon + AdWhirl http://med.adon.vpon.com/
使用第二個連結來註冊,進去後就會發現已經有現成的欄位,只要填上Vpon的Key就可以了!
程式的部份
1. 把Vpon SDK 拉到 project內,並加入framework。參考iOS App + Vpon 廣告商
2. 加入AdWhirl的adapter
3. AdWhirl network type 裡面要有Vpon的
4. 新增AdWhirlView到想呈現廣告的地方。參考在iOS App 中加入 AdWhirl (以AdMob為例)
5. 跑跑看摟
參考資料
AdWhirl iPhone SDK Manual
IPhone AdWhirl SDK Document - Vpon官方文件
Google AdWhirl with Vpon » 蛙齋 - Android平台
2012/03/17
2012/03/07
iOS App + Vpon 廣告商
可以參考官方文件 - IPhone SDK,寫得還算清楚
1. 註冊Vpon
2. 新增應用程式與版位
和 AdMob 不一樣的地方,Vpon 在同一個應用程式內可以規劃不同版位。例如:首頁的banner、列表上的banner,使用者可以藉此觀察哪個版位曝光率比較高。
每個版位都有自己的版位ID,記下來等下程式裡面會用到。
3. 下載SDK
For iPhone最新的版本為 3.2.3
1. 註冊Vpon
2. 新增應用程式與版位
和 AdMob 不一樣的地方,Vpon 在同一個應用程式內可以規劃不同版位。例如:首頁的banner、列表上的banner,使用者可以藉此觀察哪個版位曝光率比較高。
每個版位都有自己的版位ID,記下來等下程式裡面會用到。
3. 下載SDK
For iPhone最新的版本為 3.2.3
在 UIScrollView 裡面的 UITextView 會 auto scrolling?
很奇怪的問題,我把 UITextView 放在 UIScrollView 裡面,當我 assign 文字給 UITextView 時,捲軸會自動跳到 UITextView 的位置!
Google 一下,發現其他人也會遇到一樣的問題:
試了網路上的解法都沒有用,最後我的做法是:
It's work! 供大家參考一下
Google 一下,發現其他人也會遇到一樣的問題:
- Disabling UIScrollView autoscroll - iPhone Dev SDK Forum
- Disable UIScrollView scrolling when UITextField becomes first responder
- Unwanted automatic scrolling with UIScrollView and UITextFields as subviews
試了網路上的解法都沒有用,最後我的做法是:
- 把原本畫面上的 UITextView 改用 UIView 取代
- 自己 alloc 一個 UITextView 然後把 text 與 style 都設定好
- 最後用 addSubview 的方式加到畫面裡
UITextView *txtView = [[UITextView alloc] initWithFrame:self.tempView.frame]; txtView.text = @"Message what you want"; txtView.backgroundColor = [UIColor clearColor]; txtView.editable = NO; txtView.font = [UIFont systemFontOfSize:16]; [self.view addSubview:txtView]; [txtView release];
It's work! 供大家參考一下
2012/03/04
實現網頁即時傳訊 Web instant message (IM)
最近想弄一個Web IM,在web上做即時聊天有一定的困難,因為受限在http協定原生的特性:
client:request -> server:response -> 結束
傳輸一定要從client開始,而且一來一往誰也不能多,想做到server push有一定的難度,不像tcp raw socket自由度那麼高。
早期的聊天室會使用polling的方式定期 refresh (post back) 來更新頁面,同步的時間取決於refresh的頻率,但server loading也隨著頻率上升而增加。後來有了Ajax,頁面更新不用再一直閃爍,但還是有原本耗資源的問題。
近期較廣泛被使用的是Ajax搭配long polling,做到省資源又可以與server同步的效果。
Polling就是client定期的發request,long polling就是定期發request,但server不馬上response,而是等到有需要的時候再response (例如有人傳新訊息給你時),通常browser timeout都蠻長的,所以這段等待的期間相對polling就很省資源。如果還不是很懂,可以參考這一篇:Browser 與 Server 持續同步的作法介紹。
要做到long polling這個效果需要server support,server必需要把request object先keep住,等到有需要的時候再抓出來回應給client。用Tornado來舉例,就是RequestHandler被call時,先把Handler存起來,等到時機到了再執行finish() function。
下面列出幾種IM的 model,我想實現的是最後一種 ── 跨平台而且server可以隨著loading scale-up。
client:request -> server:response -> 結束
傳輸一定要從client開始,而且一來一往誰也不能多,想做到server push有一定的難度,不像tcp raw socket自由度那麼高。
早期的聊天室會使用polling的方式定期 refresh (post back) 來更新頁面,同步的時間取決於refresh的頻率,但server loading也隨著頻率上升而增加。後來有了Ajax,頁面更新不用再一直閃爍,但還是有原本耗資源的問題。
近期較廣泛被使用的是Ajax搭配long polling,做到省資源又可以與server同步的效果。
Polling就是client定期的發request,long polling就是定期發request,但server不馬上response,而是等到有需要的時候再response (例如有人傳新訊息給你時),通常browser timeout都蠻長的,所以這段等待的期間相對polling就很省資源。如果還不是很懂,可以參考這一篇:Browser 與 Server 持續同步的作法介紹。
要做到long polling這個效果需要server support,server必需要把request object先keep住,等到有需要的時候再抓出來回應給client。用Tornado來舉例,就是RequestHandler被call時,先把Handler存起來,等到時機到了再執行finish() function。
下面列出幾種IM的 model,我想實現的是最後一種 ── 跨平台而且server可以隨著loading scale-up。
2012/03/03
在iOS App 中加入 AdWhirl (以AdMob為例)
什麼是AdWhirl?
簡單來說就是一個廣告容器,讓你可以依據自己設定的百分比來播放各家廣告。你可能想知道哪種類型的廣告收益較大,較容易受到使用者點閱,藉由AdWhirl就可以統計出來。
我們先試著把AdMob整合到AdWhirl裡:
在開始之前請先參考:在 iOS App 加入 AdMob 廣告,把AdMob先申請起來
1. 申請AdWhirl
填寫一些基本資料
2. 加入Application
設定App的名字、URL、背景顏色。
簡單來說就是一個廣告容器,讓你可以依據自己設定的百分比來播放各家廣告。你可能想知道哪種類型的廣告收益較大,較容易受到使用者點閱,藉由AdWhirl就可以統計出來。
我們先試著把AdMob整合到AdWhirl裡:
在開始之前請先參考:在 iOS App 加入 AdMob 廣告,把AdMob先申請起來
1. 申請AdWhirl
填寫一些基本資料
2. 加入Application
設定App的名字、URL、背景顏色。
在 iOS App 加入 AdMob 廣告
下面把我在iOS App上申請、使用AdMob的過程紀錄起來
1. 需要有一個google account
2. 用google account登入,開始申請AdMob。填入一些基本資料。
3. 設定帳戶資料,選擇付款方式(我是用Paypal)
帳戶類型:個人
企業名稱:(個人姓名)
本地稅務ID:(身分證字號)
付款詳細資料:輸入Paypal的帳號
4. 新增網站/應用程式
選擇應用程式類型為iPhone應用程式,並填一些App的基本資料
5. 進到應用程式設定頁面,記下自己的發佈商ID,等下會用到
可以依據自己的需求設定廣告的文字/背景顏色
1. 需要有一個google account
2. 用google account登入,開始申請AdMob。填入一些基本資料。
3. 設定帳戶資料,選擇付款方式(我是用Paypal)
帳戶類型:個人
企業名稱:(個人姓名)
本地稅務ID:(身分證字號)
付款詳細資料:輸入Paypal的帳號
4. 新增網站/應用程式
選擇應用程式類型為iPhone應用程式,並填一些App的基本資料
5. 進到應用程式設定頁面,記下自己的發佈商ID,等下會用到
可以依據自己的需求設定廣告的文字/背景顏色
2012/02/29
Tornado web framework + HTTPS
從官網得知 Tornado web framework 原本就有支援SSL協定
SSL Sample
過程中需要ssl certificate 與 private key,可以用openssl產生,不過過程很繁雜,建議可以利用online tool:Create self-signed SSL certificates online
測試
開啓 http://localhost:8080 遇到錯誤:
少了甚麼module嗎?
重裝openssl 0.9.8t -> 不行
安裝ssl package
安裝pyopenssl package
最後把deploy系統從mac os換到centos 5,一模一樣的步驟就...成功了!上面的問題至今未解...
如果看到這個warning,表示client的request是用http不是https,並不是server的問題唷!
HTTPServer can serve SSL traffic with Python 2.6+ and OpenSSL. To make this server serve SSL traffic, send the ssl_options dictionary argument with the arguments required for the ssl.wrap_socket method, including “certfile” and “keyfile”:
HTTPServer(applicaton, ssl_options={
"certfile": os.path.join(data_dir, "mydomain.crt"),
"keyfile": os.path.join(data_dir, "mydomain.key"),
})
SSL Sample
import os
from tornado.httpserver import HTTPServer
from tornado.web import Application, RequestHandler
from tornado.ioloop import IOLoop
class MainHandler(RequestHandler):
def get(self):
self.write("Hello world!")
def main():
application = Application([
(r"/", MainHandler),
])
http_server = HTTPServer(application,
ssl_options={
"certfile": os.path.join(os.path.abspath("."), "test.crt"),
"keyfile": os.path.join(os.path.abspath("."), "test.key"),
}
)
http_server.listen(8080)
IOLoop.instance().start()
if __name__ == "__main__":
main()
過程中需要ssl certificate 與 private key,可以用openssl產生,不過過程很繁雜,建議可以利用online tool:Create self-signed SSL certificates online
測試
開啓 http://localhost:8080 遇到錯誤:
ERROR:root:Exception in I/O handler for fd 3 Traceback (most recent call last): File "/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/tornado-2.0-py2.6.egg/tornado/ioloop.py", line 287, in start self._handlers[fd](fd, events) File "/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/tornado-2.0-py2.6.egg/tornado/stack_context.py", line 159, in wrapped callback(*args, **kwargs) File "/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/tornado-2.0-py2.6.egg/tornado/httpserver.py", line 294, in _handle_events except ssl.SSLError, err: AttributeError: 'module' object has no attribute 'SSLError'
少了甚麼module嗎?
重裝openssl 0.9.8t -> 不行
安裝ssl package
# pip install ssl ValueError: This extension should not be used with Python 2.6 or later (already built in), and has not been tested with Python 2.3.4 or earlier.python 2.6以後的版本已經內建了
安裝pyopenssl package
# pip install pyopenssl安裝成功,但結果還是一樣。看起來該有的都有了阿!
最後把deploy系統從mac os換到centos 5,一模一樣的步驟就...成功了!上面的問題至今未解...
如果看到這個warning,表示client的request是用http不是https,並不是server的問題唷!
WARNING:root:SSL Error on 7: [Errno 1] _ssl.c:490: error:1407609C:SSL routines:SSL23_GET_CLIENT_HELLO:http request
標籤:
https,
openssl,
pip install,
pyopenssl,
python,
ssl,
tornado,
web framework
訂閱:
文章 (Atom)







