NimSDKOptionConfig.java 8.67 KB
Newer Older
konghaorui committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
package com.yidianling.im.config;

import android.content.Context;
import android.graphics.Color;
import android.os.Environment;
import android.text.TextUtils;

import com.netease.nimlib.sdk.SDKOptions;
import com.netease.nimlib.sdk.StatusBarNotificationConfig;
import com.netease.nimlib.sdk.mixpush.MixPushConfig;
import com.netease.nimlib.sdk.msg.MessageNotifierCustomization;
import com.netease.nimlib.sdk.msg.model.IMMessage;
import com.ydl.ydlcommon.base.BaseApp;
import com.ydl.ydlcommon.base.config.YDLConstants;
import com.ydl.ydlcommon.utils.YDLCacheUtils;
import com.yidianling.im.R;
import com.yidianling.im.config.constants.UserPreferences;
import com.yidianling.im.config.provider.CustomUserInfoProvider;
import com.yidianling.im.preference.IMCache;
konghaorui committed
20
import com.yidianling.uikit.api.NimUIKitImpl;
konghaorui committed
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 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 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157
import com.yidianling.uikit.api.wrapper.MessageRevokeTip;
import com.yidianling.uikit.business.session.viewholder.MsgViewHolderThumbBase;

import java.io.IOException;

/**
 * Created by hzchenkang on 2017/9/26.
 * <p>
 * 云信sdk 自定义的SDK选项设置
 */

class NimSDKOptionConfig {

    static SDKOptions getSDKOptions(Context context, Class activity) {
        SDKOptions options = new SDKOptions();
        //线上环境关闭
        if (BaseApp.Companion.getInstance().getGlobalConfig().getAppDebug()) {
            //配置检查
            options.checkManifestConfig = true;
        }

        //key配置---逻辑更改:修复切换环境功能
        if (BaseApp.Companion.getInstance().getGlobalConfig().getAppDebug()) {
            String appEnv = BaseApp.Companion.getInstance().getGlobalConfig().getAppEnv();

            //debug包根据url判断使用正式或者测试key
            if (!TextUtils.isEmpty(YDLCacheUtils.Companion.getCacheApi())) {
                if (YDLConstants.ENV_TEST.equals(appEnv)) {
                    options.appKey = "9a8cefe97b7690537fc1334091af9208";
                } else {
                    options.appKey = "4e258ba5cdf489fa188274ebf0fb5669";
                }
            } else {
                if (YDLConstants.ENV_TEST.equals(appEnv)|| YDLConstants.ENV_AUTO_TEST.equals(appEnv)) {
                    options.appKey = "9a8cefe97b7690537fc1334091af9208";
                } else {
                    options.appKey = "4e258ba5cdf489fa188274ebf0fb5669";
                }
            }
        } else {
            //release包始终使用正式key
            options.appKey = "4e258ba5cdf489fa188274ebf0fb5669";
        }

        // 如果将新消息通知提醒托管给SDK完成,需要添加以下配置。
        initStatusBarNotificationConfig(context, options, activity);

        // 配置 APP 保存图片/语音/文件/log等数据的目录
        options.sdkStorageRootPath = getAppCacheDir(context) + "/yidianling"; // 可以不设置,那么将采用默认路径


        // 配置是否需要预下载附件缩略图
        options.preloadAttach = true;

        // 配置附件缩略图的尺寸大小
        options.thumbnailSize = MsgViewHolderThumbBase.getImageMaxEdge();

        // 通知栏显示用户昵称和头像
        options.userInfoProvider = new CustomUserInfoProvider(IMCache.getContext());

        // 定制通知栏提醒文案(可选,如果不定制将采用SDK默认文案)
        options.messageNotifierCustomization = messageNotifierCustomization;

        // 在线多端同步未读数
        options.sessionReadAck = true;

        // 动图的缩略图直接下载原图
        options.animatedImageThumbnailEnabled = true;
        // 采用异步加载SDK
        options.asyncInitSDK = true;

        // 是否是弱IM场景
        options.reducedIM = false;

        // 是否检查manifest 配置,调试阶段打开,调试通过之后请关掉
        options.checkManifestConfig = false;

        // 是否启用群消息已读功能,默认关闭
        options.enableTeamMsgAck = true;

        // 打开消息撤回未读数-1的开关
        options.shouldConsiderRevokedMessageUnreadCount = true;

        options.mixPushConfig = buildMixPushConfig();
        return options;
    }

    /**
     * 配置 APP 保存图片/语音/文件/log等数据的目录
     * 这里示例用SD卡的应用扩展存储目录
     */
    static String getAppCacheDir(Context context) {
        String storageRootPath = null;
        try {
            // SD卡应用扩展存储区(APP卸载后,该目录下被清除,用户也可以在设置界面中手动清除),请根据APP对数据缓存的重要性及生命周期来决定是否采用此缓存目录.
            // 该存储区在API 19以上不需要写权限,即可配置 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="18"/>
            if (context.getExternalCacheDir() != null) {
                storageRootPath = context.getExternalCacheDir().getCanonicalPath();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        if (TextUtils.isEmpty(storageRootPath)) {
            // SD卡应用公共存储区(APP卸载后,该目录不会被清除,下载安装APP后,缓存数据依然可以被加载。SDK默认使用此目录),该存储区域需要写权限!
            storageRootPath = Environment.getExternalStorageDirectory() + "/" + IMCache.getContext().getPackageName();
        }

        return storageRootPath;
    }

    private static void initStatusBarNotificationConfig(Context context, SDKOptions options, Class activity) {
        // load 应用的状态栏配置
        StatusBarNotificationConfig config = loadStatusBarNotificationConfig(context, activity);

        // load 用户的 StatusBarNotificationConfig 设置项
        StatusBarNotificationConfig userConfig = UserPreferences.getStatusConfig();
        if (userConfig == null) {
            userConfig = config;
        } else {
            // 新增的 UserPreferences 存储项更新,兼容 3.4 及以前版本
            // 新增 notificationColor 存储,兼容3.6以前版本
            // APP默认 StatusBarNotificationConfig 配置修改后,使其生效
            userConfig.notificationEntrance = config.notificationEntrance;
            userConfig.notificationFolded = config.notificationFolded;
            userConfig.notificationColor = config.notificationColor;
        }
        // 持久化生效
        UserPreferences.setStatusConfig(userConfig);
        // SDK statusBarNotificationConfig 生效
        options.statusBarNotificationConfig = userConfig;
    }

    // 这里开发者可以自定义该应用初始的 StatusBarNotificationConfig
    private static StatusBarNotificationConfig loadStatusBarNotificationConfig(Context context, Class activity) {
        StatusBarNotificationConfig config = new StatusBarNotificationConfig();
        // 点击通知需要跳转到的界面
        config.notificationEntrance = activity;
konghaorui committed
158
        config.notificationSmallIconId = R.mipmap.im_ic_launcher;
konghaorui committed
159 160 161
        config.notificationColor = IMCache.getContext().getResources().getColor(R.color.platform_color_blue_3a9efb);
        // 通知铃声的uri字符串
//        config.notificationSound = "android.resource://com.yidianling.im/raw/msg";
konghaorui committed
162
        String SoundUri = "android.resource://" + context.getPackageName() + "/" + R.raw.im_msg;
konghaorui committed
163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212

        config.notificationSound = SoundUri;
        config.notificationFolded = true;
        // 呼吸灯配置
        config.ledARGB = Color.GREEN;
        config.ledOnMs = 1000;
        config.ledOffMs = 1500;
        config.ring = true;
        config.vibrate = true;
        // 是否APP ICON显示未读数红点(Android O有效)
        config.showBadge = true;

        // save cache,留做切换账号备用
        IMCache.setNotificationConfig(config);
        return config;
    }

    private static MessageNotifierCustomization messageNotifierCustomization = new MessageNotifierCustomization() {
        @Override
        public String makeNotifyContent(String nick, IMMessage message) {
            return null; // 采用SDK默认文案
        }

        @Override
        public String makeTicker(String nick, IMMessage message) {
            return null; // 采用SDK默认文案
        }

        @Override
        public String makeRevokeMsgTip(String revokeAccount, IMMessage item) {
            return MessageRevokeTip.getRevokeTipContent(item, revokeAccount);
        }
    };

    private static MixPushConfig buildMixPushConfig() {

        // 第三方推送配置
        MixPushConfig config = new MixPushConfig();

        // 小米推送
        config.xmAppId = "2882303761517432980";
        config.xmAppKey = "5241743243980";
        config.xmCertificateName = "ydlUser";

        // 华为推送
        config.hwCertificateName = "ydlUserHw";

        return config;
    }
}