首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何设置Lambda来处理Pinpoint的APNS沙箱?

如何设置Lambda来处理Pinpoint的APNS沙箱?
EN

Stack Overflow用户
提问于 2021-03-02 18:50:36
回答 1查看 418关注 0票数 2

我遇到了一些问题,使用AWS定位从lambda远程发送推送通知。

在我的应用程序中,我有以下代码:

代码语言:javascript
复制
    PushNotification.configure(awsconfig)
    PushNotificationIOS.addEventListener('registrationError', console.log)

    PushNotification.onRegister(async token => {
      console.log('in app registration', token)
      PushNotification.updateEndpoint(token)
      setRegistrationToken(token)
    })


    PushNotification.onNotification(notification => {
      console.log('in app notification', notification)
      if (Platform.OS === 'ios') {
        notification.finish(PushNotificationIOS.FetchResult.NoData)
      }
    })

    PushNotification.onNotificationOpened(notification => {
      console.log('the notification is opened', notification)
    })

    const endpointId = Analytics.getPluggable('AWSPinpoint')._config.endpointId
    console.log(`endpoint ID: ${endpointId}`)

    if (Platform.OS === 'ios') {
      PushNotification.requestIOSPermissions()
    }

该代码运行良好,我可以获取记录的令牌,转到pinpoint控制台,并通过选择“设备令牌”和"APNS“发送”测试通知“。

之后,我设置了lambda并添加了以下代码:

代码语言:javascript
复制
const AWS = require('aws-sdk');
async function sendTestNotification() {
    console.log("CALLED SEND TEST")
    const title = "Test Message"
    const message = "This is a message from Pinpoint dynamically delivered via code"
    const applicationId = <HARD CODED APPLICATION ID FROM PINPOINT CONSOLE>
    const token = <HARD CODED DEVICE TOKEN I USED IN THE TEST NOTIFICATION>
    var messageRequest = {
      'Addresses': {
        [token]: {
          'ChannelType' : 'APNS_SANDBOX'
        }
      },
      'MessageConfiguration': {
        'APNSMessage': {
          'Action': 'OPEN_APP',
          'Body': message,
          'Priority': 'normal',
          'SilentPush': false,
          'Title': title,
          'TimeToLive': 30
          }
      }
    };
    
    AWS.config.update({ region: 'us-east-1'});
    var pinpoint = new AWS.Pinpoint();

    var params = {
      "ApplicationId": applicationId,
      "MessageRequest": messageRequest
    }
    
    pinpoint.sendMessages(params, (sendMessagesErr, sendMessagesData) => console.log(sendMessagesErr, sendMessagesData))
}

exports.handler = async (event) => {
    console.log('running')    
    
    await sendTestNotification();
    const response = {
        statusCode: 200,
        body: JSON.stringify('Hello from Lambda!'),
    };
    return response;
};

当我测试这个函数时,它正常运行并完成,没有任何错误。但是,没有收到任何通知。最初,我认为这可能与权限有关,但我已经给予lambda通过自定义角色进行精确定位的完全访问权限,但这仍然没有改变结果。

任何帮助都将是非常感谢的,因为我不知道在哪里故障排除下一步。

EN

回答 1

Stack Overflow用户

发布于 2022-01-27 06:58:52

您还没有在MessageRequest中设置令牌。您在地址下面有令牌:。您需要将实际的APNS令牌放在这里。(我在这里加入了一些随机字母,举个例子.

代码语言:javascript
复制
var messageRequest = {
      'Addresses': {
        '483hgto483gh87egf8o2phqradgq3984hgeorigheg27r': {
          'ChannelType' : 'APNS_SANDBOX'
        }
      },
      'MessageConfiguration': {
        'APNSMessage': {
          'Action': 'OPEN_APP',
          'Body': message,
          'Priority': 'normal',
          'SilentPush': false,
          'Title': title,
          'TimeToLive': 30
          }
      }
    };
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66445384

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档