3

I am having a bit of an issue getting push notifications to be sent remotely from a lambda using AWS pinpoint.

In my application I have the following code:

    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()
    }

That code runs perfectly and I can take the token that is logged, go to the pinpoint console, and send a "Test Notification" by choosing "Device Tokens" and "APNS Sandbox."

After that, I set up my lambda and added the following code:

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;
};


When I test the function, it runs and completes normally with no errors. However, no notifications come through. Initially, I thought it may have to do with permissions, but I have given the lambda full access to Pinpoint via a custom role, and that still did not change the result.

Any help would be much appreciated, as I am not sure where to troubleshoot next.

John Rotenstein
  • 241,921
  • 22
  • 380
  • 470
stigward
  • 127
  • 13

1 Answers1

0

You haven't set the token in your MessageRequest. You have [token] under addresses:. You need to put the actual APNS token here. (I've put in some random letters in numbers here for an example...

var messageRequest = {
      'Addresses': {
        '483hgto483gh87egf8o2phqradgq3984hgeorigheg27r': {
          'ChannelType' : 'APNS_SANDBOX'
        }
      },
      'MessageConfiguration': {
        'APNSMessage': {
          'Action': 'OPEN_APP',
          'Body': message,
          'Priority': 'normal',
          'SilentPush': false,
          'Title': title,
          'TimeToLive': 30
          }
      }
    };
Etep
  • 533
  • 7
  • 20
  • Also I realize this is quite late in the answer. I just came across this as I'm getting into Pinpoint with Lambdas now. – Etep Jan 27 '22 at 06:59