Files
yuliao_and/app/src/main/java/com/hbl/yuliao/NimSDKOptionConfig.java
2025-08-08 15:09:22 +08:00

243 lines
12 KiB
Java

// Copyright (c) 2022 NetEase, Inc. All rights reserved.
// Use of this source code is governed by a MIT license that can be
// found in the LICENSE file.
package com.hbl.yuliao;
import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.content.ContentResolver;
import android.content.Context;
import android.graphics.Color;
import android.net.Uri;
import android.os.Build;
import android.os.Environment;
import android.text.TextUtils;
import com.hbl.yuliao.main.MainActivity;
import com.hbl.yuliao.push.PushUserInfoProvider;
import com.hbl.yuliao.utils.Constant;
import com.hbl.yuliao.utils.DataUtils;
import com.netease.nimlib.sdk.NotificationFoldStyle;
import com.netease.nimlib.sdk.SDKOptions;
import com.netease.nimlib.sdk.ServerAddresses;
import com.netease.nimlib.sdk.StatusBarNotificationConfig;
import com.netease.nimlib.sdk.StatusBarNotificationFilter;
import com.netease.nimlib.sdk.mixpush.MixPushConfig;
import com.netease.yunxin.kit.alog.ALog;
import com.netease.yunxin.kit.common.utils.ScreenUtils;
import java.io.IOException;
/**
* Nim SDK config info
*/
public class NimSDKOptionConfig {
public static final String NOTIFY_SOUND_KEY =
"android.resource://com.hbl.yuliao/raw/xxmoren";
public static final int LED_ON_MS = 1000;
public static final int LED_OFF_MS = 1500;
static SDKOptions getSDKOptions(Context context, String appKey) {
SDKOptions options = new SDKOptions();
options.appKey = appKey;
initStatusBarNotificationConfig(options);
options.sdkStorageRootPath = getAppCacheDir(context);
// options.statusBarNotificationConfig.notificationEntrance = MainActivity.class;//
options.preloadAttach = true;
options.thumbnailSize = (int) (222.0 / 375.0 * ScreenUtils.getDisplayWidth());
options.userInfoProvider = new PushUserInfoProvider(context);
options.sessionReadAck = true;
options.animatedImageThumbnailEnabled = true;
options.asyncInitSDK = true;
options.reducedIM = false;
options.checkManifestConfig = false;
options.enableTeamMsgAck = true;
options.enableFcs = false;
options.shouldConsiderRevokedMessageUnreadCount = true;
// 会话置顶是否漫游
options.notifyStickTopSession = true;
options.mixPushConfig = buildMixPushConfig();
options.serverConfig = configServer(context);
// 打开消息撤回未读数-1的开关
options.shouldConsiderRevokedMessageUnreadCount = true;
return options;
}
public static ServerAddresses configServer(Context context) {
if (DataUtils.getServerConfigType(context) == Constant.OVERSEA_CONFIG) {
ServerAddresses serverAddresses = new ServerAddresses();
serverAddresses.lbs = "https://lbs.netease.im/lbs/conf.jsp";
serverAddresses.nosUploadLbs = "http://wannos.127.net/lbs";
serverAddresses.nosUploadDefaultLink = "https://nosup-hz1.127.net";
serverAddresses.nosDownloadUrlFormat = "{bucket}-nosdn.netease.im/{object}";
serverAddresses.nosUpload = "nosup-hz1.127.net";
serverAddresses.nosSupportHttps = true;
ALog.d("ServerAddresses", "ServerConfig:use Singapore node");
return serverAddresses;
}
return null;
}
public static void initStatusBarNotificationConfig(SDKOptions options) {
// load notification
// StatusBarNotificationConfig config = loadStatusBarNotificationConfig();
// // load 用户的 StatusBarNotificationConfig 设置项
// // SDK statusBarNotificationConfig 生效
//// config.notificationFilter =
//// imMessage ->
//// IMApplication.getForegroundActCount() > 0
//// ? StatusBarNotificationFilter.FilterPolicy.DENY
//// : StatusBarNotificationFilter.FilterPolicy.DEFAULT;
// options.statusBarNotificationConfig = config;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
NotificationManager notificationManager = (NotificationManager) IMApplication.getAppContext().getSystemService(Context.NOTIFICATION_SERVICE);
NotificationChannel morenchanel = new NotificationChannel("xxmoren", IMApplication.getAppContext().getString(R.string.bell_default), NotificationManager.IMPORTANCE_DEFAULT);
// morenchanel.setDescription("默认默认");
morenchanel.enableLights(true);
morenchanel.enableVibration(true);
morenchanel.setSound(Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE + "://" + IMApplication.getAppContext().getPackageName() + "/raw/" + R.raw.xxmoren),
Notification.AUDIO_ATTRIBUTES_DEFAULT);
notificationManager.createNotificationChannel(morenchanel);
NotificationChannel daqichanel = new NotificationChannel("xxdaqi", IMApplication.getAppContext().getString(R.string.bell_generous), NotificationManager.IMPORTANCE_DEFAULT);
// daqichanel.setDescription("大气大气");
daqichanel.enableLights(true);
daqichanel.enableVibration(true);
daqichanel.setSound(Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE + "://" + IMApplication.getAppContext().getPackageName() + "/raw/" + R.raw.xxdaqi),
Notification.AUDIO_ATTRIBUTES_DEFAULT);
notificationManager.createNotificationChannel(daqichanel);
NotificationChannel huopochanel = new NotificationChannel("xxhuopo", IMApplication.getAppContext().getString(R.string.bell_lively), NotificationManager.IMPORTANCE_DEFAULT);
// huopochanel.setDescription("活泼活泼");
huopochanel.enableLights(true);
huopochanel.enableVibration(true);
huopochanel.setSound(Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE + "://" + IMApplication.getAppContext().getPackageName() + "/raw/" + R.raw.xxhuopo),
Notification.AUDIO_ATTRIBUTES_DEFAULT);
notificationManager.createNotificationChannel(huopochanel);
NotificationChannel jianduanchanel = new NotificationChannel("xxjianduan", IMApplication.getAppContext().getString(R.string.bell_brief), NotificationManager.IMPORTANCE_DEFAULT);
// huopochanel.setDescription("活泼活泼");
jianduanchanel.enableLights(true);
jianduanchanel.enableVibration(true);
jianduanchanel.setSound(Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE + "://" + IMApplication.getAppContext().getPackageName() + "/raw/" + R.raw.xxjianduan),
Notification.AUDIO_ATTRIBUTES_DEFAULT);
notificationManager.createNotificationChannel(jianduanchanel);
NotificationChannel keaichanel = new NotificationChannel("xxkeai", IMApplication.getAppContext().getString(R.string.bell_loveliness), NotificationManager.IMPORTANCE_DEFAULT);
// huopochanel.setDescription("活泼活泼");
keaichanel.enableLights(true);
keaichanel.enableVibration(true);
keaichanel.setSound(Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE + "://" + IMApplication.getAppContext().getPackageName() + "/raw/" + R.raw.xxkeai),
Notification.AUDIO_ATTRIBUTES_DEFAULT);
notificationManager.createNotificationChannel(keaichanel);
NotificationChannel liushuichanel = new NotificationChannel("xxliushui", IMApplication.getAppContext().getString(R.string.bell_flowingwater), NotificationManager.IMPORTANCE_DEFAULT);
// huopochanel.setDescription("活泼活泼");
liushuichanel.enableLights(true);
liushuichanel.enableVibration(true);
liushuichanel.setSound(Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE + "://" + IMApplication.getAppContext().getPackageName() + "/raw/" + R.raw.xxliushui),
Notification.AUDIO_ATTRIBUTES_DEFAULT);
notificationManager.createNotificationChannel(liushuichanel);
NotificationChannel qingcuichanel = new NotificationChannel("xxqingcui", IMApplication.getAppContext().getString(R.string.bell_clear), NotificationManager.IMPORTANCE_DEFAULT);
qingcuichanel.enableLights(true);
qingcuichanel.enableVibration(true);
qingcuichanel.setSound(Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE + "://" + IMApplication.getAppContext().getPackageName() + "/raw/" + R.raw.xxqingcui),
Notification.AUDIO_ATTRIBUTES_DEFAULT);
notificationManager.createNotificationChannel(qingcuichanel);
NotificationChannel qingkuaichanel = new NotificationChannel("xxqingkuai", IMApplication.getAppContext().getString(R.string.bell_brisk), NotificationManager.IMPORTANCE_DEFAULT);
qingkuaichanel.enableLights(true);
qingkuaichanel.enableVibration(true);
qingkuaichanel.setSound(Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE + "://" + IMApplication.getAppContext().getPackageName() + "/raw/" + R.raw.xxqingkuai),
Notification.AUDIO_ATTRIBUTES_DEFAULT);
notificationManager.createNotificationChannel(qingkuaichanel);
NotificationChannel quweichanel = new NotificationChannel("xxquwei", IMApplication.getAppContext().getString(R.string.bell_interest), NotificationManager.IMPORTANCE_DEFAULT);
quweichanel.enableLights(true);
quweichanel.enableVibration(true);
quweichanel.setSound(Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE + "://" + IMApplication.getAppContext().getPackageName() + "/raw/" + R.raw.xxquwei),
Notification.AUDIO_ATTRIBUTES_DEFAULT);
notificationManager.createNotificationChannel(quweichanel);
}
}
// config StatusBarNotificationConfig
public static StatusBarNotificationConfig loadStatusBarNotificationConfig() {
StatusBarNotificationConfig config = new StatusBarNotificationConfig();
config.notificationEntrance = MainActivity.class;
config.notificationSmallIconId = R.mipmap.ic_launche;
config.notificationColor = Color.parseColor("#3a9efb");
config.notificationSound = null;
config.notificationFoldStyle = NotificationFoldStyle.ALL;
config.downTimeEnableNotification = true;
config.ledARGB = Color.GREEN;
config.ledOnMs = LED_ON_MS;
config.ledOffMs = LED_OFF_MS;
config.showBadge = true;
return config;
}
/**
* config app image/voice/file/log directory
* /storage/emulated/0/Android/data/com.hbl.yuliao/cache
*/
static String getAppCacheDir(Context context) {
String storageRootPath = null;
try {
if (context.getExternalCacheDir() != null) {
storageRootPath = context.getExternalCacheDir().getCanonicalPath();
}
} catch (IOException e) {
e.printStackTrace();
}
if (TextUtils.isEmpty(storageRootPath)) {
storageRootPath = Environment.getExternalStorageDirectory() + "/" + context.getPackageName();
}
return storageRootPath;
}
private static MixPushConfig buildMixPushConfig() {
MixPushConfig config = new MixPushConfig();
// xiaomi
// config.xmAppId = "xiao mi push app id"; //apply in xiaomi
// config.xmAppKey = "xiao mi push app key";//apply in xiaomi
// config.xmCertificateName = "Certificate Name";//config in yunxin platform
// huawei
// config.hwAppId = "huawei app id";//apply in huawei
// config.hwCertificateName = "Certificate Name";//config in yunxin platform
// meizu
// config.mzAppId = "meizu push app id";//apply in meizu
// config.mzAppKey = "meizu push app key";//apply in meizu
// config.mzCertificateName = "Certificate Name";//config in yunxin platform
// fcm
config.fcmCertificateName = "DEMO_FCM_PUSH";
// vivo
// config.vivoCertificateName = "Certificate Name";//config in yunxin platform
// oppo
// config.oppoAppId = "oppo push app id";//apply in oppo
// config.oppoAppKey = "oppo push app key";//apply in oppo
// config.oppoAppSercet = "oppo push app secret"; //apply in oppo
// config.oppoCertificateName = "Certificate Name";//config in yunxin platform
return config;
}
}