Delphi APP 開發入門(七)通知與雲端推播
Delphi APP 開發入門(六)Object Pascal 語法初探 << 前情 今天教大家使用的是通知(Notification)功能,在Delphi XE6很貼心的也將通知的功能封裝成元件,只要簡單的設定屬性就可以使用了。我們以簡單的篇幅教大家快速使用程式的通知功能,在後面我們會以比較大的篇幅放在Google Cloud Messaging(GCM)搭配Kinvey的BAAS服務(Backend as a Service)實做出推播通知(Push Notification)功能。 通知Notification在Delphi XE6使用通知功能相當簡單,只要在表單上放置TNotificationCenter(通知中心)元件就可以了!接著顯示通知的方式也相當簡單。 一、馬上出現通知訊息 procedure TForm1.Button1Click(Sender: TObject); var MyNotification : TNotification; // 宣告一個TNotification begin MyNotification := NotificationCenter1.CreateNotification; Try MyNotification.AlertBody := '馬上顯示通知訊息'; // 訊息內容 NotificationCenter1.PresentNotification(MyNotification); Finally MyNotification.DisposeOf; End; end; 二、排程十秒後顯示通知 procedure TForm1.Button2Click(Sender: TObject); var MyNotification : TNotification; begin MyNotification := NotificationCenter1.CreateNotification; Try // 給排程的通知訊息名稱 MyNotification.Name := 'ScheduleNotification'; MyNotification.AlertBody := '十秒顯示通知訊息'; // 設定時間是現在加上十秒 MyNotification.FireDate := Now + EncodeTime(0,0,10,0); NotificationCenter1.ScheduleNotification(MyNotification); Finally MyNotification.DisposeOf; End; end; 三、取消排程訊息 procedure TForm1.Button3Click(Sender: TObject); begin // 取消通知訊息,參數內需對應 Notification.Name NotificationCenter1.CancelNotification('ScheduleNotification'); end; 推播通知Push Notification接下來我們要談的是推播通知,當APP不在前景執行時,能夠用自己的平台或伺服器發送通知給行動的一項技術。在iOS平台上有APNS(Apple Push Notification Service),而Android平台上則叫做GCM(Google Cloud Messaging),在今天我們先以Android的GCM搭配BaaS服務Kinvey為例子。 Google Cloud Messaging1.進入網站 http://console.developers.google.com 五、點選建立新的金鑰 六、點選伺服器金鑰 七、如果沒有特別允許使用IP可以略過後按建立就行了
kinvey申請在行動裝置的開發領域目前有個BaaS(後端即服務:Backend as a Service)的技術概念。BaaS是指為行動裝置開發者提供整合雲端的基礎服務,像是資料/文件的儲存或是帳號管理、訊息推送、社群網路整合等…. 2.註冊帳號只要電子郵件跟密碼就行了 3.點選Individual 個人帳戶的Get Started即可
4.接著建立一個新的專案,平台的話選擇Other(其他)的REST API即可 6.接著我們要建立可以存取服務的使用者,點選上面的Addons,在Core內有Users點入 9. 建立完成後可以看見使用者列表 10.接著建立待會使用的 Push Notification,一樣在Addons的目錄下有一個Messaging,裡面有一個Push 11.接著我們將剛才在Google控制台的專案編號填入Project ID、API金鑰填入API Key,接著按下Save GCM Configuration。右上角會由inactive轉為active。這樣就完成了相關的申請跟設定,不過先別關掉它。等等會再使用到! 程式開發1.我們延續剛才的通知範例,在畫面加上ListView元件,將Align設為Bottom 2.接著在畫面上放上二個元件,一個是TKinveyProvider以及TPushEvents 3.PushEvents1中的AutoActivate、AutoRegisterDevice設為True以及Provider指定KinveyProvider1 4.設定 OnPushReceived事件,在裡面的程式寫上 procedure TForm1.PushEvents1PushReceived(Sender: TObject; const AData: TPushData); begin ListView1.Items.Add.Text := AData.Message; end; 6.最後開啟專案目錄下的AndroidManifest.template.xml(這個檔案是Delphi編譯過程中產生AndroidManifest.xml的範本檔。 在幾個位置加入設定 <!-- GCM connects to Google Services. --> <uses-permission android:name="android.permission.INTERNET" /> <!-- GCM requires a Google account. --> <uses-permission android:name="android.permission.GET_ACCOUNTS" /> <!-- Keeps the processor from sleeping when a message is received. --> <uses-permission android:name="android.permission.WAKE_LOCK" /> <!-- Creates a custom permission so only this app can receive its messages. NOTE: the permission *must* be called PACKAGE.permission.C2D_MESSAGE, where PACKAGE is the application's package name. --> <permission android:name="%package%.permission.C2D_MESSAGE" android:protectionLevel="signature" /> <uses-permission android:name="%package%.permission.C2D_MESSAGE" /> <!-- This app has permission to register and receive data message. --> <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> .</intent-filter></activity> 後面加上 <receiver android:name="com.embarcadero.gcm.notifications.GCMNotification" android:exported="true" android:permission="com.google.android.c2dm.permission.SEND" > <intent-filter> <action android:name="com.google.android.c2dm.intent.RECEIVE" /> <category android:name="%package%" /> </intent-filter> </receiver> 接著就可以執行程式了! 可以看到程式的Listview會出現推播的訊息。 最後附上原始碼 |
Yi-Ching Tsai
08/17
請問,我自己測試下,在執行程式或執行後按home鍵非前景都可以正常接收,在沒執行程式或強制結束程式就收不到了,這樣是正常的嗎?如何能做到像line這樣,重新開機不特別執行依然可以收到訊息?