發表文章

[Hybrid APP] Cordova + Firebase 簡單實現 ios APNS推播 以及 android FCM(GCM) 推播

圖片
在以前,當專案同時有 ios & android 兩派系統用戶,後台就必須實作兩套推送方式 (APNS以及GCM),直到2016年5月的Google IO大會上推出Firebase,並推出多項新功能供大家使用,包含這次介紹的推播功能。 Google後來也將原本android推播平台 Google Cloud Messaging (GCM)全面改為 Firebase Cloud Messaging (FCM),FCM為跨平台服務,可推送ios、android、web applications,FCM推播ios其實還是使用Apple Push Notification service (APNS),只是對於開發者來說,不用去區分client平台為何,FCM自動幫你分辨並推播。 官方 FCM 展示影片: PS.此範例使用 Cordova框架 搭配 ionic框架為實例 在cordova專案加入  cordova-plugin-fcm 套件 #cordova plugin add cordova-plugin-fcm 程式碼: 取得FCM Token: FCMPlugin.getToken(function(token){     alert(token); }); 收到推播訊息event FCMPlugin.onNotification(function(data){       alert(JSON.stringify(data)); }); 範例圖: 至firebase平台上註冊APP https://console.firebase.google.com 先建立專案 加入 ios以及android 應用程式  iOS 連結ID 為 APP ID (bundle ID) 將檔案下載至 cordova專案跟目錄 此項目略過 直接按繼續 Android 套件名稱 一樣為 APP ID 一樣下載至cordova專案跟目錄 到這裡,android推播部分其實已經完成,ios還必須加入APNS憑證才可以推播。 ios要有推播功能必須要有 Apple 開發者帳戶,才可以有推播功

[Javascript] base64 encode & base64 decode with UTF-8

由於 Javascript 內建函示庫的 atob()  btoa() 不支援UTF8 所以只好用以下的function解決 var Base64 = {     _keyStr: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",     encode: function(input) {         var output = "";         var chr1, chr2, chr3, enc1, enc2, enc3, enc4;         var i = 0;         input = Base64._utf8_encode(input);         while (i < input.length) {             chr1 = input.charCodeAt(i++);             chr2 = input.charCodeAt(i++);             chr3 = input.charCodeAt(i++);             enc1 = chr1 >> 2;             enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);             enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);             enc4 = chr3 & 63;             if (isNaN(chr2)) {                 enc3 = enc4 = 64;             } else if (isNaN(chr3)) {                 enc4 = 64;             }             output = output + this._keyStr.charAt(enc1) + this._keyStr.charAt(enc2) + this._keyStr

[jQuery] 解決 jQuery DataTables 匯出CSV亂碼問題 UTF-8 with BOM

官方範例在匯出CSV時,預設是 UTF-8 without BOM, 導致部分電腦開啟時會產生亂碼 需要改設定值 bom : true 才能解決 官方Docoument連結 :  https://datatables.net/reference/button/csv 範例: $('.js-exportable').DataTable({         dom: 'Bfrtip',         responsive: true,         buttons: [         'copy', {                 extend: 'csv',                 text: 'CSV',                 bom : true}, 'excel', 'pdf', 'print'             ] }); 有任何疑問歡迎留言 By 艾摩杰~

[NodeJS] Synology NAS 架設 NodeJS Server , 並用 forever 背景執行程式

圖片
先至 Synology 套件中心 安裝Node JS 套件 打開 Synology NAS SSH連線功能,記得設定完要按套用! 接下來就可以用Putty連線進去了~ PS. 沒有Putty的朋友可以至這裡下載   32bit載點   64bit載點     來源網站 登入時 帳號記得是root  密碼是當初設定NAS時 admin的密碼 這時候可以查看一下 NodeJS 是否可用 就用 node -v 指令看一下版本 Synology內建是沒有安裝 forever套件的 這時候可以用npm安裝 forever套件 #npm install forever -g forever 常用指令 -------------------------------------------------- 新增背景執行程式: forever start xxxxx.js 查看目前執行程式清單: forever list 刪除背景執行程式: forever stop UID PS.程式UID 要從 清單內查詢 有任何疑問歡迎留言 By 艾摩杰~

[MAC] 刪除擾人的 .DS_Store

打開終端機 cd 到指定目錄 因為刪除指令對某些人來說可能有疑慮,所以先看一下整個結果再確定是否要刪除 $ find . -name ".DS_Store" -depth -exec echo ----{} \; 結果 ----./Library/.DS_Store ----./Library/Application Support/.DS_Store ----./Library/Application Support/com.trankynam.XtraFinder/.DS_Store ----./Library/Application Support/CoRD/.DS_Store ----./Library/Application Support/Developer/Shared/Xcode/.DS_Store ----./Library/Application Support/DEVONthink Pro 2/.DS_Store ----./Library/Application Support/Haroopad/Themes/.DS_Store 正式刪除 find . -name ".DS_Store" -depth -exec rm {} \; 有任何疑問歡迎留言 By 艾摩杰~

[ionic] cordovaPush GCM 推播 範例

安裝 PushPlugin cordova plugin add https://github.com/phonegap-build/PushPlugin.git app.js angular.module('app', ['ionic','ngCordova']) .run(function($ionicPlatform,$cordovaPush,$rootScope) {   $ionicPlatform.ready(function() {     // Hide the accessory bar by default (remove this to show the accessory bar above the keyboard     // for form inputs)     if(window.cordova && window.cordova.plugins.Keyboard) {       cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true);     }     if(window.StatusBar) {       // org.apache.cordova.statusbar required       StatusBar.styleDefault();     }       var androidConfig = {       "senderID": "XXXXXXXXXX",     };     $cordovaPush.register(androidConfig).then(function(result) {       //alert(result);     }, function(err) {       alert(err);     })       });   $rootScope.$on('$cordovaPush:notificationReceived', function(event, notification) {     switch(notifi