NimApplication.java 7.08 KB
Newer Older
konghaorui committed
1 2 3 4
package com.yidianling.im.config;

import android.app.Application;
import android.content.Context;
万齐军 committed
5 6 7
import android.content.Intent;
import android.net.Uri;
import android.util.Log;
konghaorui committed
8

万齐军 committed
9
import com.alibaba.fastjson.JSON;
konghaorui committed
10 11
import com.netease.nimlib.sdk.NIMClient;
import com.netease.nimlib.sdk.auth.LoginInfo;
万齐军 committed
12 13
import com.netease.nimlib.sdk.mixpush.MixPushMessageHandler;
import com.netease.nimlib.sdk.mixpush.NIMPushClient;
konghaorui committed
14 15 16 17 18 19 20 21
import com.netease.nimlib.sdk.uinfo.model.UserInfo;
import com.netease.nimlib.sdk.util.NIMUtil;
import com.ydl.ydlcommon.utils.SharedPreferencesEditor;
import com.yidianling.avchatkit.AVChatKit;
import com.yidianling.avchatkit.config.AVChatOptions;
import com.yidianling.avchatkit.model.ITeamDataProvider;
import com.yidianling.avchatkit.model.IUserInfoProvider;
import com.yidianling.im.R;
22
import com.yidianling.im.api.bean.IMInitConfigBean;
konghaorui committed
23 24 25 26 27 28 29 30 31 32 33 34
import com.yidianling.im.api.event.AccountChangeEvent;
import com.yidianling.im.config.constants.UserPreferences;
import com.yidianling.im.helper.ImObserversHelper;
import com.yidianling.im.helper.NIMInitManager;
import com.yidianling.im.preference.IMCache;
import com.yidianling.im.router.ImIn;
import com.yidianling.im.session.SessionHelper;
import com.yidianling.nimbase.api.UIKitOptions;
import com.yidianling.uikit.api.NimUIKit;
import com.yidianling.uikit.business.team.helper.TeamHelper;
import com.yidianling.uikit.business.uinfo.UserInfoHelper;
import com.yidianling.uikit.custom.config.YDLToolBarOptions;
konghaorui committed
35
import com.yidianling.user.api.bean.UserResponseBean;
konghaorui committed
36

万齐军 committed
37 38
import java.util.Map;

konghaorui committed
39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
import de.greenrobot.event.EventBus;


public class NimApplication {

    private NimApplication() {
    }

    private static class InstanceHolder {
        static NimApplication nimApplication = new NimApplication();
    }

    public static NimApplication getInstance() {
        return InstanceHolder.nimApplication;
    }

    public void initIm(Application app,Class activity) {
56
        initIm(app,activity,null);
57 58
    }

59
    public void initIm(Application app, Class activity, IMInitConfigBean configBean) {
konghaorui committed
60 61
        IMCache.setContext(app);
        // 初始化云信SDK
62
        NIMClient.init(app, loginInfo(), NimSDKOptionConfig.prepareSDKOptions(app,activity,configBean));
konghaorui committed
63 64 65 66 67 68 69 70 71 72 73 74 75 76 77

        // 以下逻辑只在主进程初始化时执行
        if (NIMUtil.isMainProcess(app)) {
            // 初始化UIKit模块
            initUIKit(app);
            // 初始化消息提醒
            NIMClient.toggleNotification(UserPreferences.getNotificationToggle());
            // 云信sdk相关业务初始化
            NIMInitManager.getInstance().init(true);
            // 初始化音视频模块
            initAVChatKit(activity);
            //注册状态观察者
            ImObserversHelper.Companion.getInstance().registerObserver(true);
            // 初始化听筒模式
            initEarMode();
万齐军 committed
78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103
            NIMPushClient.registerMixPushMessageHandler(new MixPushMessageHandler() {
                @Override
                public boolean onNotificationClicked(Context context, Map<String, String> map) {
                    Log.d("notification", JSON.toJSONString(map));
                    String routeAndroid = map.get("route_android");
                    if (routeAndroid != null) {
                        try {
                            Intent intent = new Intent(Intent.ACTION_VIEW);
                            intent.setPackage(context.getPackageName());
                            intent.setData(Uri.parse(routeAndroid));
                            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                            context.startActivity(intent);
                            return true;
                        } catch (Throwable e) {
                            Log.e("app", "", e);
                        }
                    }
                    return false;
                }

                @Override
                public boolean cleanMixPushNotifications(int i) {
                    return false;
                }
            });
konghaorui committed
104 105 106 107 108
        }
    }

    // 如果已经存在用户登录信息,返回LoginInfo,否则返回null即可
    private LoginInfo loginInfo(){
konghaorui committed
109
        UserResponseBean loginBean = ImIn.INSTANCE.getUserResponse();
konghaorui committed
110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131
       if(loginBean != null) {
            IMCache.setAccount(loginBean.getUid());
       }
        return loginBean != null? new LoginInfo(loginBean.getUid(), loginBean.getHxpwd()) : null;

    }

    private void initUIKit(Application application) {
        // 初始化
        NimUIKit.init(application, buildUIKitOptions(application));

        // IM 会话窗口的定制初始化。
        SessionHelper.init();
    }

    private UIKitOptions buildUIKitOptions(Application application) {
        UIKitOptions options = new UIKitOptions();
        // 设置app图片/音频/日志等缓存目录
        options.appCacheDir = NimSDKOptionConfig.getAppCacheDir(application) + "/app";
        //options.buildNimUserCache = true;
        options.shouldHandleReceipt = true;
        options.toolBarOptions = new YDLToolBarOptions();
ydl committed
132
        options.messageLeftBackground = R.drawable.im_message_receive_content_bg;
霍志良 committed
133
        options.messageRightBackground = R.drawable.im_custom_message_round_1da1f2_6dp_bg;
konghaorui committed
134 135 136 137 138 139 140 141 142 143 144
        return options;
    }

    private void initAVChatKit(Class activity) {
        AVChatOptions avChatOptions = new AVChatOptions() {
            @Override
            public void logout(Context context) {
                EventBus.getDefault().post(new AccountChangeEvent(1));
            }
        };
        avChatOptions.entranceActivity = activity;
konghaorui committed
145
        avChatOptions.notificationIconRes = R.mipmap.im_ic_launcher;
konghaorui committed
146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185
        AVChatKit.init(avChatOptions);

        // 设置用户相关资料提供者
        AVChatKit.setUserInfoProvider(new IUserInfoProvider() {
            @Override
            public UserInfo getUserInfo(String account) {
                return NimUIKit.getUserInfoProvider().getUserInfo(account);
            }

            @Override
            public String getUserDisplayName(String account) {
                return UserInfoHelper.getUserDisplayName(account);
            }
        });
        // 设置群组数据提供者
        AVChatKit.setTeamDataProvider(new ITeamDataProvider() {
            @Override
            public String getDisplayNameWithoutMe(String teamId, String account) {
                return TeamHelper.getDisplayNameWithoutMe(teamId, account);
            }

            @Override
            public String getTeamMemberDisplayName(String teamId, String account) {
                return TeamHelper.getTeamMemberDisplayName(teamId, account);
            }
        });
    }

    public static final String EAR_MODE_OPEN = "1";
    public static final String EAR_MODE_CLOSE = "2";
    public static final String EAR_MODE_KEY = "EarMode";
    private void initEarMode() {
        String earMode = SharedPreferencesEditor.getString(EAR_MODE_KEY);
        if (!EAR_MODE_OPEN.equals(earMode) && !EAR_MODE_CLOSE.equals(earMode)) {
            //设置默认听筒模式 关闭
            ImIn.INSTANCE.updateEarMode(false);
        }
    }

}