跳到主要內容

精選

《十分鐘學程式》Firebase Push Notification - iOS Swift

現在已經是手機不離身的年代了,每天少則幾十通 推播通知 (Push Notification) ,多則上百通,大家是否思考過這些推播是怎麼作業的嗎?好吧!我自己也沒想過,因為一切都是這麼的自然XD。 推播對一個 App 來說是不可缺少的,畢竟不可能要求使用者一直開著 App,那如何要在使用者在未開啟 App 時來達到傳遞訊息呢?這時就可以用飛鴿傳書,或是請刺客來幫忙傳遞...,如果這些方法都不喜歡的話,那可以考慮用用費時又浪費資源的推播 Push Notification 來達到這個目的。 說到這邊,是否想到如果要做到推播就需要自己先建一個 Server 才能做到,答案是否定的,因為我們有強大的 Google 幫大家都已經架設好了,而且是『免費的』這才是最重要的,因此 Firebase 就這樣產生了!!這次就要教大家如何使用 Firebase 來做到 iOS Push Notification。 在開始教學前需要做一些準備: 一台裝好 Xcode 的 Mac 一個付費的 Apple developer account,沒錯就是那個每年要繳 99美元的帳號 一個 Google 帳號 一杯夠大杯的咖啡 (What?) 上面這些東西都準備好的話!我們就開始上課嚕~~ 這堂課會分 12 小節: ・Xcode 建立一個 Swift 專案 ・設定 Apple Developer Account ・產生 CSR 檔 ・上傳 CSR 檔 ・準備 APNs (Apple Push Notifications) 認證 ・Firebase 建立新專案 ・Firebase Push Notification 設定 ・撰寫設計一個支援 Firebase Push Notification 的 iOS App ・開啟 Push Notification 功能 ・匯入 GoogleService-Info.plist ・初始化 Push Notification 設定 ・測試 Firebase Push Notification Xcode 建立一個 Swift 專案 1. 開啟 Xcode,選擇『 Create a new Xcode project 』來建立一個新的專案 2. 選擇『 Singl

《十分鐘學程式》Android -- 自訂 Listener

《Android 自訂 Listener》

當大家開發 Android 時一定會常用許多 Listener 監聽很多事情,最常用的莫過於 Button 的 OnClickListener,因為建立一個 Button 一定需要去監聽使用者何時點擊這個 Button。Android 很多原生的物件都已經幫我們建立好 Listener 的監聽,如果我們自己寫的 class 或是物件也要一個 Listener 是否可行呢? 答案是可以的。我們只需要透過 interface 建立自己自訂的 Listener 即可。接下來就來教大家如何建立一個簡單的 Listener 吧!!

首先我們先寫一個 class,專門來計時 100 秒。這裡我們取名為 Counter.class
程式碼如下
public class Counter {
    private final static String TAG = Counter.class.getSimpleName();

    public Counter() {
    }

    public void printCount() {
        try {
            for(int i=0; i<100; i++) {
                Thread.sleep(1000);
                Log.d(TAG, "" + i);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}    
我們就把這個 class 拿來主程式使用吧!!
public class MainActivity extends Activity {
    private static final String TAG = MainActivity.class.getSimpleName();
 
    private Counter counter = new Counter();
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
  
        counter.printCount();
    }
}

但是大家有沒有發現很奇怪得事情,我們主程式似乎沒有辦法知道這個計時器已經結束了。因此我們就可以寫一個 Listener 來監聽是否已經結束

需要先在 Counter.class 加上一個 interface 及 一個 setOnFinishListener function,廢話不多說,直接上程式吧!!
public class Counter {
    private final static String TAG = Counter.class.getSimpleName();

    private OnFinishListener onFinishListener = null;
 
    public interface OnFinishListener {
        void onFinish();
    }
 
    public Counter() {
    }
 
    public void printCount() {
        try {
            for(int i=0; i<100; i++) {
                Thread.sleep(1000);
                Log.d(TAG, "" + i);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
 
    public void setOnFinishListener(OnFinishListener listener) {
        onFinishListener = listener;
    }
}

當 Listener 都加好後,就可以在主程式開心的加上我們熟悉的 setListener 啦!!
public class MainActivity extends Activity {
    private static final String TAG = MainActivity.class.getSimpleName();
 
    private Counter counter = new Counter();
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
  
        counter.setOnFinishListener(new Counter.OnFinishListener() {
   
            @Override
            public void onFinish() {
                Log.d(TAG, "Counter Finish!!");
            }
        });
        counter.printCount();
    }
}

這樣就可以輕鬆的監聽這個計時器結束啦!!

留言

熱門文章