2016-12-23 10 views
4

sns-mobileおよびAmazon SNS APIというNodeJSパッケージを使用して、アプリケーションサーバーからVoIPプッシュ通知を直接iOSデバイスに送信しようとしています。ノードJSでAmazon SNSを使用してVoIPプッシュ通知を送信する方法

ただし、以下のコードを使用してVoIPプッシュを送信しようとすると、ここではエラーメッセージが表示されます。誰かが私が間違っている場所を私に示唆してもらえますか、私はこれを解決するためにほぼ半日を過ごしています。

無効なパラメータ:JSONは「デフォルト」または 「APNS_VOIP

var iOSApp = new SNS({ 
     platform: SNS.SUPPORTED_PLATFORMS.IOS, 
     region: 'us-west-2', 
     apiVersion: '2010-03-31', 
     accessKeyId: 'XXXXXXXXXXXXX', 
     secretAccessKey: 'XXXXXXXXXXXXX', 
     platformApplicationArn: 'arn:aws:sns:us-west-2:3303035XXXXX:app/APNS_VOIP/VoIPPushesApp' 
    }); 

iOSApp.addUser('deviceID', 
    JSON.stringify({ 
    "APNS_VOIP": JSON.stringify({aps:{alert:"Hello and have a good day."}}) 
    }) 
    , function(err, endpointArn) { 
    if(err) { 
    console.log("The Error is :****: "+JSON.stringify(err, null, 4)); 
    throw err; 
    } 


    // Send a simple String or data to the client 
    iOSApp.sendMessage(endpointArn, 'Hi There!', function(err, messageId) { 
    //iOSApp.sendMessage(endpointArn, messageTest, function(err, messageId) { 
    if(err) { 
     console.log("The Error in end message is :****: "+JSON.stringify(err, null, 4)); 
     throw err; 
    } 
    console.log('Message sent, ID was: ' + messageId); 
    }); 
}); 

答えて

0

のエントリが含まれている必要があります。ここにそのデバイスのVoIPトークンを使用して受信装置にVoIPの通知を送信するコードです。 VoIP通知を受信すると、デバイスは、didReceiveIncomingPushWithPayload

var AWS     = require('aws-sdk'); 

// Amazon SNS module 
AWS.config.update({ 
    accessKeyId  : 'XXXXXXXXXXXXXXXX', 
    secretAccessKey : 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX', 
    region   : 'us-west-2' 
}); 

var amazonSNS    = new AWS.SNS(); 

// 1. Create Platform Endpoint 
var createPlatformEndpoint = function(req, res, next){ 
    var deviceVoipToken = req.deviceVoipToken; // Obtaining the device VoIP token from the request object 

    amazonSNS.createPlatformEndpoint({ 
    // App in Sandboxmode (ie running on device directly from Xcode) 
    PlatformApplicationArn: "arn:aws:sns:us-west-2:xxxxxxxxxxxx:app/APNS_VOIP_SANDBOX/CurieVoip", 
    // App in Production mode (ie running on device after archiving and installed on device with a provisioning profile) 
    //PlatformApplicationArn: "arn:aws:sns:us-west-2:xxxxxxxxxxxx:app/APNS_VOIP/CurieVoip", 
    Token: deviceVoipToken 


    }, function(err, data) { 
    if (err) { 
     console.log(err.stack); 
     response.json({"status": "failure", "statusCode" : 402}) 
     return; 
    } 
    var endpointArn = data.EndpointArn; 
    req.endpointArn = data.EndpointArn; // Passing the EndpointArn to the next function 
    next() 
    }) 
} 


// 2. Publish notification 
var publishVoipNotification = function(req, res, next){ 
    var endpointArn = req.endpointArn; 

    var payload = { 
    default : 'Hello World, default payload', 
    APNS_VOIP : { 
     aps: { 
     alert: 'Hi there', 
     sound: 'default', 
     badge: 1 
     } 
    } 
    }; 

    // first have to stringify the inner APNS object... 
    payload.APNS = JSON.stringify(payload.APNS); 
    // then have to stringify the entire message payload 
    payload = JSON.stringify(payload); 

    console.log('sending push'); 
    amazonSNS.publish({ 
    MessageStructure : 'json', 
    Message   : payload, 
    TargetArn   : endpointArn 
    }, function(err, data) { 
    if (err) { 
     console.log("Error stack: "+err.stack); 
     var message = "There has been an error in Publishing message via AmazonSNS with error: "+err.stack; 
     res.json({"status": "failure", "statusCode" : 402, "message" : message}) 
     return; 
    } 
    next(); 
    }); 
} 


// 3. Deleting platform endpoint after sending a voipNotification; Ref: http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/SNS.html#deleteEndpoint-property 
var deleteEndpointArn = function(req, res){ 
    var endpointArn = req.endpointArn; 
    var roomName = req.roomName; 

    var params = { 
    EndpointArn: endpointArn /* required */ 
    }; 

    amazonSNS.deleteEndpoint(params, function(err, data) { 
    if (err){ 
     var message = "Unable to deleteEndpointArn, with error: "+err.stack; 
     res.json({"status": "failure", "statusCode" : 400, "message":message}) 
    } 
    else{ 
     var message = "Deleted endpointArn successfully"; 
     res.json({"status": "success", "statusCode" : 200, "message":message}) 

    } 
    }); 
} 
router.post('/sendVoipNotificationToReceiver', [createPlatformEndpoint, publishVoipNotification, deleteEndpointArn]); 
という関数を呼び出します。
関連する問題