簡單測試需要的準備:
- Adobe AIR 3.4 或以上SDK (安裝SDK 於Flash Builder 請參考)
- 一個iOS 裝置 (不能以XCode Simulator 來取代)
- 需要.p12, .mobileprovision 與.pem 檔 (製作包含Push Notifications 功能請參考)
- 一個執行Push Notification Provider 的伺服器, 我們可以使用apns-php
Push Notifications 的運作原理:
- 使用Adobe AIR 提供的介面(RemoteNotifier) 並執行訂閱(subscribe), 取得一個Device Token (這是每個iOS 裝置獨一無異的記號)
- 把Device Token 提交給伺服器記下
- 利用Push Notification Provider 發放訊息給這些Device Token
- 這個iOS 裝置會收到Push Notification
Push Notifications 基本工作流程 |
Adobe AIR 提供以下三種Push Notification 提示:
- NotificationStyle.ALERT - 在收到通知時顯示警告方塊的通知
- NotificationStyle.BADGE - 收到通知時會以數字/影像更新應用程式圖示的通知
- NotificationStyle.SOUND - 在收到通知時播放聲音的通知
Adobe AIR 在iOS 接收Push Notifications |
在Adobe AIR 程式編寫, 提供一個按鈕給用戶按下(clickHandler), 取得iOS 裝置的Device Token:
private function clickHandler(event:MouseEvent):void{ trace("clickHandler: " + RemoteNotifier.supportedNotificationStyles.length); myTxt.appendText("clickHandler: " + RemoteNotifier.supportedNotificationStyles.length+"\n"); if ( RemoteNotifier.supportedNotificationStyles.length > 0) { var preferredNotificationStyles:Vector.<string> = new Vector.<string>; preferredNotificationStyles.push(NotificationStyle.ALERT); preferredNotificationStyles.push(NotificationStyle.SOUND); preferredNotificationStyles.push(NotificationStyle.BADGE); var subscribeOptions:RemoteNotifierSubscribeOptions = new RemoteNotifierSubscribeOptions(); subscribeOptions.notificationStyles = preferredNotificationStyles; rn = new RemoteNotifier(); rn.addEventListener(RemoteNotificationEvent.TOKEN, sendDeviceTokenToServer); rn.addEventListener(StatusEvent.STATUS, subscriptionFailureCallback); rn.subscribe(subscribeOptions); } } protected function subscriptionFailureCallback(event:StatusEvent):void { trace("Received Status event for registrationFailure with code:" + event.code + " and level:" + event.level + "\n"); myTxt.appendText("Received Status event for registrationFailure with code:" + event.code + " and level:" + event.level + "\n"); } protected function sendDeviceTokenToServer(event:RemoteNotificationEvent):void { trace("Received " + event.type + " with tokenString:" + event.tokenId + "\n"); myTxt.appendText("Received " + event.type + " with tokenString:" + event.tokenId + "\n"); }
在Adobe AIR 程式發佈設定:
- Certificate 和Provisioning file 需要使用包含Push Notifications 功能的.p12 和 .mobileprovision 檔
- 在XML 設定檔加入Entitlements 設定:
<iPhone>
<Entitlements><![CDATA[
<key>get-task-allow</key>
<true/>
<key>aps-environment</key>
<string>development</string>
<key>keychain-access-groups</key>
<array>
<string>KEYCHAIN_ACCESS_GROUP</string>
</array>
]]></Entitlements>
</iPhone> - 在Flex Compiler > Additional compilder arguments: 更改成:
-locale en_US -swf-version=17
架設apns-php 伺服器後, 我們更改sample_push.php 的內容作為發訊測試:
- 更改.pem 檔名稱, 並把.pem 檔案複製至與sample_push.php 同一資料夾內
- 加入iOS 裝置的Device Token
更改sample_push.php 內容 |
當執行sample_push.php 後, 測試對像的iOS 裝置會接收到Push Notification. 大家可以 [下載] 範例試試看.
參考資料: http://blogs.adobe.com/airodynamics/2012/05/29/push-notifications-support-in-ios/
9 則留言:
鴨道比大大
想請教一下 sample_push.php 中第38行
$push->setRootCertificationAuthority('entrust_root_certification_authority.pem');
這行是不需要的嗎?
看了 apns-php 的說明不是很懂 "Verify peer using Entrust Root Certification Authority" 是做啥的...
我看您的截圖是remark掉了 這樣還是可以 works 嗎?
這個我確實沒有深入研究,只知道把第38 行關掉,就可以正常運作 :P
請問大大!
執行的時候出現:
1046: Type was not found or was not a compile-time constant: RemoteNotificationEvent.
該怎麼解決><
RemoteNotificationEvent 需要在Adobe AIR 3.4 或以上的SDK 運行.
試試更新最新的SDK, 參考:
http://flash-adobe.blogspot.hk/2011/07/adobe-air-27-flash-builder-45.html
大大!
請問你是否知道該怎麼顯示android
收到通知時顯示警告方塊的通知!
Android 接收通知.
與iOS 原理相近, 但不是會是同一個伺服器(ApnsPHP) 發佈通知.
可以在google 找尋PhpMQTTClient 資料.
你好,我只要抓divice token,是不是只要你打的那一段clickHandler就行了,因為我怎麼發佈到手機抓就是抓不到divice token
在myTxt 中, 會看到錯誤訊息嗎?
沒有看到event.tokenId?
沒有,抓出的長度是3就只會顯示clickHandler:3, 後是用air 3.6, 怎麼抓都沒值,所以想尋問一下,是按下clickHandler, 就會在mytxt內出現token是吧!
張貼留言