You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

通过Amazon Pinpoint发送的通知无法到达移动端求助

问题分析与解决方案

我注意到你用Java SDK调用AWS Pinpoint发送通知时,代码执行无报错但移动端收不到消息,不过控制台和CLI方式却能成功推送。帮你排查后发现了两个关键问题:

1. 核心遗漏:未执行发送请求

你的代码已经构建了SendMessagesRequest对象,但完全没调用pinpoint.sendMessages(sendMessagesRequest)方法——相当于只写好了信,却没把信寄出去!这是导致消息没发送的最直接原因。

2. 配置缺失:缺少默认消息 fallback

Pinpoint的消息配置建议包含DefaultMessage作为兜底,虽然你指定了GCMMessage,但补充默认配置能避免渠道匹配时的潜在问题,和你CLI请求里的结构保持一致也更稳妥。

修正后的完整代码

public static void SendNotification2(String appid, String pinpointEndpointId){ 
    try { 
        GetEndpointRequest getEndpointRequest = new GetEndpointRequest() 
            .withApplicationId(appid) 
            .withEndpointId(pinpointEndpointId); 
        
        AmazonPinpoint pinpoint = AmazonPinpointClientBuilder.standard()
            .withRegion(Regions.US_EAST_1)
            .build(); 
        
        GetEndpointResult endpointResult = pinpoint.getEndpoint(getEndpointRequest); 
        EndpointResponse endpointResponse = endpointResult.getEndpointResponse(); 
        
        Map<String, String> data = new HashMap<String, String>(); 
        data.put("message", "test"); 
        
        // 添加默认消息配置作为兜底
        DefaultMessage defaultMessage = new DefaultMessage()
            .withBody("Test notification from Java SDK");
        
        DirectMessageConfiguration directMessageConfiguration = new DirectMessageConfiguration()
            .withGCMMessage(new GCMMessage().withData(data).withSilentPush(true))
            .withDefaultMessage(defaultMessage); // 绑定默认消息
        
        AddressConfiguration addressConfiguration = new AddressConfiguration()
            .withChannelType(ChannelType.GCM); 
        
        MessageRequest messageRequest = new MessageRequest()
            .withMessageConfiguration(directMessageConfiguration)
            .addAddressesEntry(endpointResponse.getAddress(), addressConfiguration); 
        
        SendMessagesRequest sendMessagesRequest = new SendMessagesRequest() 
            .withApplicationId(appid) 
            .withMessageRequest(messageRequest); 
        
        // 关键:执行发送请求
        SendMessagesResult sendResult = pinpoint.sendMessages(sendMessagesRequest);
        // 打印返回结果,方便排查发送状态
        System.out.println("发送结果详情:" + sendResult.getMessageResponse().getResult());
        
    } catch (Exception e) { 
        e.printStackTrace(); 
    } 
}

额外排查建议

  • 打印SendMessagesResult的返回内容,里面会包含每个目标地址的具体发送状态(比如令牌无效、渠道不匹配等),能帮你定位更细节的问题。
  • 确认通过endpointResponse.getAddress()获取的设备令牌,和你CLI请求中使用的令牌完全一致,避免Endpoint关联的令牌有误。

内容的提问来源于stack exchange,提问作者Shaik Jafer Ali

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:20:05