Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

服务器代码有以下几个问题,麻烦您下个版本更新一下 #81

Open
ansen666 opened this issue Dec 24, 2023 · 2 comments
Open

Comments

@ansen666
Copy link

Oppo私信必须要要用单推,如果用广播每个人一天会限制5条消息

参考官方地址:https://open.oppomobile.com/new/developmentDoc/info?id=11238

修改OppoPushProvider类的sendMessageToSingle方法

 @Override
    protected MixPushResult sendMessageToSingle(MixPushMessage mixPushMessage, String regId){
        Notification notification = toMessage(mixPushMessage);
        try {
            if (mixPushMessage.getConfig().getOppoPushChannelId() == null) {
                throw new Exception("必须在“通道配置 → 新建通道”模块中登记 channelId,再在发送消息时选择通道发送 https://open.oppomobile.com/wiki/doc#id=10289");
            }
            if (mixPushMessage.getOppoTaskId() == null) {
                Result result = sender.saveNotification(notification);
                if (result.getMessageId() == null) {
                    return toMixPushResult(mixPushMessage, result);
                }
                mixPushMessage.setOppoTaskId(result.getMessageId());
            }
            List<MixPushResult> results = new ArrayList<>();
            Result tmp = sender.unicastNotification(notification, Target.build(regId));//私信必须要要用单推,如果用广播每个人会限制5条消息
            results.add(toMixPushResult(mixPushMessage,tmp));
            return MixPushResult.build(results);
        } catch (Exception e) {
            return new MixPushResult.Builder().provider(this).message(mixPushMessage).error(e).build();
        }
//        return sendMessageToList(mixPushMessage, Collections.singletonList(regId));
    }

华为必须要消息分类,如果不分类推送条数有限制,并且没声音+震动

参考官方地址:https://developer.huawei.com/consumer/cn/doc/HMSCore-Guides/message-restriction-description-0000001361648361

首先在MixPushMessageConfig类中增加属性

public class MixPushMessageConfig {
    private String huaweiCategory;//华为消息分类,如果不分类推送条数有限制,并且没声音+震动
        
    public String getHuaweiCategory() {
        return huaweiCategory;
    }

    public void setHuaweiCategory(String huaweiCategory) {
        this.huaweiCategory = huaweiCategory;
    }
}

MixPushMessageConfig.Builder类中,增加一个方法

public Builder huaweiCategory(String huaweiCategory) {
    config.huaweiCategory = huaweiCategory;
    return this;
}

在HuaweiPushProvider类toMessage方法中传入华为分类

   private Message.Builder toMessage(MixPushMessage mixPushMessage) {
        Notification notification = Notification.builder().setTitle(mixPushMessage.getTitle())
                .setBody(mixPushMessage.getDescription())
                .build();

        //// mixpush://com.mixpush.huawei/message?payload=%7b%22url%22%3a%22http%3a%2f%2fsoso.com%22%7d
        String url = "mixpush://com.mixpush.huawei/message?";
        if (!mixPushMessage.isJustOpenApp()) {
            try {
                url += "payload=" + URLEncoder.encode(mixPushMessage.getPayload(), "utf-8");
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }
        }

//        LightSettings lightSettings = LightSettings.builder().setColor(Color.builder().setAlpha(0f).setRed(0f).setBlue(1f).setGreen(1f).build())
//                .setLightOnDuration("3.5")
//                .setLightOffDuration("5S")
//                .build();
        ClickAction clickAction = ClickAction.builder()
                .setType(1) // 1:用户自定义点击行为2:点击后打开特定url3:点击后打开应用App4:点击后打开富媒体信息
                .setIntent(url)
                .build();

        AndroidNotification androidNotification = AndroidNotification.builder()
                .setClickAction(clickAction)
//                .setBodyLocKey("M.String.body")
//                .addBodyLocArgs("boy").addBodyLocArgs("dog")
//                .setTitleLocKey("M.String.title")
//                .addTitleLocArgs("Girl").addTitleLocArgs("Cat")
                .setChannelId(mixPushMessage.getConfig().getChannelId())
//                .setNotifySummary("some summary")
//                .setMultiLangkey(JSON.parseObject(mixPushMessage.getPayload()))
//                .setStyle(1)
                .setBigTitle(mixPushMessage.getTitle())
                .setBigBody(mixPushMessage.getDescription())
//                .setAutoClear(86400000)
//                .setNotifyId(486)
//                .setGroup("Group1")
//                .setImportance(Importance.LOW.getValue())
//                .setLightSettings(lightSettings)
//                .setBadge(BadgeNotification.builder().setAddNum(1).setBadgeClass("Classic").build())
//                .setVisibility(Visibility.PUBLIC.getValue())
                .setForegroundShow(true)
                .build();

        AndroidConfig androidConfig = AndroidConfig.builder()
//                .setCollapseKey(-1)
//                .setUrgency(Urgency.HIGH.getValue())
                .setTtl((mixPushMessage.getConfig().getTimeToLive() / 1000) + "s")
                .setCategory(mixPushMessage.getConfig().getHuaweiCategory())//通知类别
//                .setBiTag("the_sample_bi_tag_for_receipt_service")
                .setNotification(androidNotification)
                .build();

        return Message.builder()
                .setNotification(notification)
                .setAndroidConfig(androidConfig);
    }

最后掉用的时候传入华为类别

MixPushMessageConfig activitiesMessageConfig = new MixPushMessageConfig.Builder()
        // OPPO 必须在“通道配置 → 新建通道”模块中登记通道,再在发送消息时选择
        .oppoPushChannelId(oppoChannelId)
        .huaweiPushChannelId(huaweiChannelId)
        .huaweiCategory(huaweiCategory)//华为分类
        .channelId(channelId)

        .vivoSystemMessage(true)//vivo消息类型 0:运营类消息,1:系统类消息  运营消息单个用户一天只能发送5条,系统消息没有限制
        .build();

解决小米多条消息不同时显示,会覆盖

参考官方地址:https://dev.mi.com/distribute/doc/details?pId=1558

修改MiPushProvider.toMessage方法,其实就是生成一个int随机数,通过notifyId方法传入

protected Message toMessage(MixPushMessage mixPushMessage) {
    int randomInt = (int) (Math.random() * Integer.MAX_VALUE);
    Message.Builder builder = new Message.Builder()
            .title(mixPushMessage.getTitle())
            .description(mixPushMessage.getDescription())
            .payload(mixPushMessage.isJustOpenApp() ? null : mixPushMessage.getPayload())
            .restrictedPackageName(packageName)
            .timeToLive(mixPushMessage.getConfig().getTimeToLive())
            .notifyType(1)     // 使用默认提示音提示
            .notifyId(randomInt)//可选项, 默认情况下, 通知栏只显示一条推送消息, 如果通知栏要显示多条推送消息, 需要针对不同的消息设置不同的notify_id(相同notify_id的通知栏消息会覆盖之前的),且要求notify_id为取值在0~2147483647的整数。
            .passThrough(mixPushMessage.isPassThrough() ? 1 : 0) // 1表示透传消息, 0表示通知栏消息(默认是通知栏消息)
            .timeToSend(mixPushMessage.getTimeToSend());
    if (mixPushMessage.getConfig().getMiPushChannelId() != null) {
//            System.out.println("小米渠道id:"+mixPushMessage.getConfig().getMiPushChannelId());
        builder.extra(Constants.PARAM_CHANNEL_ID, mixPushMessage.getConfig().getMiPushChannelId());//渠道id
    }
    return builder.build();
}
@zouyanggary
Copy link

感谢你帮忙排坑

@WhenCoding
Copy link

所以这些代码作者吸纳了嘛

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants