极光推送一直以来提供了“广播”、“标签(tag)”、“别名(alias)”和“registration_id”等多种推送方式,这几种推送方式正确使用场景如下:

  • 如果您希望一条推送能发给您 App 下的全量用户,建议您使用“广播”;参考:怎么样广播推送?
  • 如果您希望一条推送能批量推送给具有相同属性的一群用户,建议您使用“标签(tag)”推送;参考: 怎么样向指定的一群用户推送消息?
  • 如果您希望一条推送只针对指定的某一个用户推送,则您可以选择“别名(alias)”或者“registration_id”推送

极光于 2020/03/10 对「别名设置」的上限进行限制,最多允许绑定 10 个设备

 

在用户第一次登录app时,ios和android调用极光api对用户进行别名绑定。随后调用app后台服务,将绑定结果(用户唯一标识,别名,设备id...)保存到自己的本地服务。后续本地服务集成极光api,就可以在不同业务场景下给指定用户推送消息。

消息推送工具类


/**
 * ClassName: JPushClient
 * Function:  极光推送管理端
 * Date:      2021/3/30 14:35
 *
 * @author hanKongbin
 * version    V1.0
 */
@Component
@Slf4j
public class JPushManager {

    @Value("${jpush.appKey}")
    private String appKey;

    @Value("${jpush.masterSecret}")
    private String masterSecret;

    @Value("${jpush.apnsProduction}")
    private boolean apnsProduction;

    @Value("${switch.status}")
    private boolean switchStatus;

    private static JPushClient jPushClient = null;

    private JPushClient getJPushClient() {
        if (jPushClient == null) {
            jPushClient = new JPushClient(masterSecret, appKey);
        }
        return jPushClient;
    }

    /**
     * 推送到Alias列表
     *
     * @param jSendPush
     */
    public boolean sendToAlias(JSendPush jSendPush) {
        if (!switchStatus) {
            log.error("==推送消息全局开关未打开,推送终止!");
            return false;
        }
        PushPayload pushPayload = buildPushObjectAllAlias(jSendPush);
        return this.sendPush(pushPayload);
    }

    /**
     * 发送推送
     *
     * @param pushPayload
     * @return
     */
    private boolean sendPush(PushPayload pushPayload) {
        log.info("pushPayload={}", pushPayload);
        try {
            PushResult pushResult = this.getJPushClient().sendPush(pushPayload);
            log.info("" + pushResult);
            if (pushResult.getResponseCode() == HttpStatus.HTTP_OK) {
                log.info("极光消息推送成功, pushPayload={}", pushPayload);
                return true;
            }
        } catch (APIConnectionException | APIRequestException e) {
            log.error("==极光消息推送失败: pushPayload={}, exception={}", pushPayload, e);
        }
        return false;
    }

    /**
     * 向所有平台单个或多个指定alias用户推送消息
     *
     * @param jSendPush
     * @return
     */
    private PushPayload buildPushObjectAllAlias(JSendPush jSendPush) {
        return PushPayload.newBuilder()
                // 所有设备android/ios
                .setPlatform(Platform.all())
                .setAudience(Audience.alias(jSendPush.getTargetIds()))
                .setNotification(Notification.newBuilder()
                        // android
                        .addPlatformNotification(AndroidNotification.newBuilder()
                                .setAlert(jSendPush.getMessageContent())
                                .setTitle(jSendPush.getNotificationTitle())
                                .addExtras(jSendPush.getExtras())
                                .build())
                        // ios
                        .addPlatformNotification(IosNotification.newBuilder()
                                .setAlert(jSendPush.getMessageContent())
                                .incrBadge(1)
                                .setSound("default")
                                .addExtras(jSendPush.getExtras())
                                .build())
                        .build())
                .setMessage(Message.newBuilder()
                        .setMsgContent(jSendPush.getMessageContent())
                        .setTitle(jSendPush.getMessageTitle())
                        .addExtras(jSendPush.getExtras())
                        .build())
                .setOptions(Options.newBuilder()
                        .setApnsProduction(apnsProduction)
                        .setSendno(1)
                        .setTimeToLive(86400)
                        .build())
                .build();

    }

 

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐