如何在App中實現IM功能之二快速實現離線消息模塊——箭扣科技Arrownock

如何在App中實現IM功能

之二

快速實現離線消息模塊

 

一個App在實際使用聊天功能的時候,並非是一直呆在一個界面的,在等待好友發消息來的同時,有可能已經跳轉到其他界面,也有可能切換到其他App。

在當前的App進入後臺、好友發來消息時,需要給設備推送一條消息。以安卓爲例,收取離線消息通知需要綁定anPush,具體做法是調用anIM.bindAnPushService(anID, AppKey, anPushType)。

在App進入後臺時,調用anIM.disconnect();在App回到前臺時,調用anIM.connect()。 但是,如果在每一個Activity中都寫這句話來實現收取離線功能,就太複雜了。

下面介紹一個統一管理用戶離線消息的接收的小技巧:

步驟一

建立BaseActivity,其後所有的Activity都繼承BaseActivity。

 

步驟二

在BaseActivity創建一個全局變量isActive爲true,用來記錄當前界面是否進入後臺。

 

步驟三

當App進入後臺時,在onStop生命週期的方法中寫:


    @Override
    protected void onStop() {
        super.onStop();
        // APP進入後臺
        if (!isAppOnForeground()) {
            try {
                anIM.disconnect();
            } catch (ArrownockException e) {
                e.printStackTrace();
            }
            // 全局變量isActive = false 記錄當前已經進入後臺
            isActive = false;
        }
    }



步驟四


當App重新回到前臺,在onResume方法中寫:

    @Override
    protected void onResume() {
        super.onResume();
        // APP從後臺喚醒,進入前臺
        if (!isActive) {
            try {
                anIM.connect(clientId);
            } catch (ArrownockException e) {
                e.printStackTrace();
            }
            isActive = true;
        }
    }


步驟五

判斷程序是否在前臺運行的方法:

//在進程中去尋找當前APP的信息,判斷是否在前臺運行
    private boolean isAppOnForeground() {
        ActivityManager activityManager =(ActivityManager) getApplicationContext()
            .getSystemService(Context.ACTIVITY_SERVICE);
        String packageName =getApplicationContext().getPackageName();
        List<RunningAppProcessInfo>appProcesses = activityManager.getRunningAppProcesses();
        if (appProcesses == null) {
            return false;
        }
        for (RunningAppProcessInfo appProcess : appProcesses) {
            if (appProcess.processName.equals(packageName)
                    && appProcess.importance == RunningAppProcessInfo
                        .IMPORTANCE_FOREGROUND) {
                return true;
            }
        }
        return false;
    }


如何在App中實現IM功能系列文章:


之一離線消息常見淺析

之二快速實現離線消息模塊

之三快速實現離線消息推送模塊

之四創建穩健的消息發送模塊

之五快速實現圖片接收和發送

之六快速實現羣聊的高級功能

之七快速實現聊天列表排序模塊


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章