ios - Sending and receiving push notifications via AWS SNS -


i've been trying to create app in order send , receive push notifications via aws sns. new api , couldn't find reliable tutorial. here functions i've came in order send , receive notifications:

func subscribe(devicetokenstring : string) {     let credentialsprovider : awsstaticcredentialsprovider = awsstaticcredentialsprovider(accesskey: awsaccesskey, secretkey: awssecretkey)     let defaultserviceconfiguration : awsserviceconfiguration = awsserviceconfiguration(region: defaultserviceregiontype, credentialsprovider: credentialsprovider)     awsservicemanager.defaultservicemanager().defaultserviceconfiguration = defaultserviceconfiguration      let sns = awssns.defaultsns()      let subscribeinput = awssnssubscribeinput()      subscribeinput.topicarn = snstopicarn      sns.subscribe(subscribeinput).continuewithblock     {         (task) -> anyobject! in         if task.error != nil         {             print("subscribed successfully")             let confirmsubscription = awssnsconfirmsubscriptioninput()             confirmsubscription.topicarn = snstopicarn             confirmsubscription.token = devicetokenstring             sns.confirmsubscription(confirmsubscription).continuewithblock             {                 (task) -> anyobject! in                 if task.error != nil                 {                     print("confirmed subscription")                     self.sendmessage()                 }                 else                 {                     print("subscription confirmation failed error: \(task.error)")                 }                 return nil             }         }         else         {             print("error while subscribing: \(task.error)")         }         return nil     }  }  func sendmessage() {     let sns = awssns.defaultsns()     let request = awssnspublishinput()     request.messagestructure = "json"      let dict = ["default": "hello world!", "apns_sandbox": "{\"aps\":{\"alert\": \"hello world!\",\"sound\":\"default\", \"badge\":\"1\"} }"]          {         let jsondata = try nsjsonserialization.datawithjsonobject(dict, options: nsjsonwritingoptions.prettyprinted)         request.message = nsstring(data: jsondata, encoding: nsutf8stringencoding) as! string         request.topicarn = snstopicarn         sns.publish(request).continuewithblock         {             (task) -> anyobject! in             if task.error != nil             {                 print("error sending mesage: \(task.error)")             }             else             {                 print("success sending message")             }             return nil         }     }     catch     {         print("error on json serialization: \(error)")     }  } func application(application: uiapplication, didregisterforremotenotificationswithdevicetoken devicetoken: nsdata) {     let devicetokenstring = "\(devicetoken)"         .stringbytrimmingcharactersinset(nscharacterset(charactersinstring:"<>"))         .stringbyreplacingoccurrencesofstring(" ", withstring: "")     print("devicetokenstring: \(devicetokenstring)")     subscribe(devicetokenstring) } 

everything seems work well, "subscribed successfully", "confirmed subscription" , "message sent" logs on console, application:didreceiveremotenotificationuserinfo: never gets called. doing wrong?

i've figured out missing points. here piece of code works.

func subscribe(token : string, completionhandler : ((nserror?) -> ())? = nil) {     let credentialsprovider : awsstaticcredentialsprovider = awsstaticcredentialsprovider(accesskey: awsaccesskeysend, secretkey: awssecretkeysend)     let defaultserviceconfiguration : awsserviceconfiguration = awsserviceconfiguration(region: defaultserviceregiontype, credentialsprovider: credentialsprovider)      awsservicemanager.defaultservicemanager().defaultserviceconfiguration = defaultserviceconfiguration      let sns = awssns.defaultsns()     let createplatformendpointinput = awssnscreateplatformendpointinput()     createplatformendpointinput.token = token     createplatformendpointinput.platformapplicationarn = snsplatformapplicationarn      sns.createplatformendpoint(createplatformendpointinput).continuewithblock     {         (task) -> anyobject! in         if task.error != nil         {             print("error creating platform endpoint: \(task.error)")             completionhandler?(task.error)             return nil         }         let result = task.result as! awssnscreateendpointresponse         let subscribeinput = awssnssubscribeinput()         subscribeinput.topicarn = snstopicarn         subscribeinput.endpoint = result.endpointarn         print("endpoint arn: \(result.endpointarn)")         subscribeinput.protocols = "application"         sns.subscribe(subscribeinput).continuewithblock         {             (task) -> anyobject! in             if task.error != nil             {                 completionhandler?(task.error)                 print("error subscribing: \(task.error)")                 return nil             }             print("subscribed succesfully")             let subscriptionconfirminput = awssnsconfirmsubscriptioninput()             subscriptionconfirminput.token = token             subscriptionconfirminput.topicarn = snstopicarn             sns.confirmsubscription(subscriptionconfirminput).continuewithblock             {                 (task) -> anyobject! in                 if task.error != nil                 {                     print("confirmed subscription")                 }                 completionhandler?(task.error)                 return nil             }             return nil         }         return nil     } }  func sendmessage(message : string, type : string = "alert", sound : string = "default", badges : int = 1, completionhandler : ((nserror?) -> ())? = nil) {     let credentialsprovider : awsstaticcredentialsprovider = awsstaticcredentialsprovider(accesskey: awsaccesskeysend, secretkey: awssecretkeysend)     let defaultserviceconfiguration : awsserviceconfiguration = awsserviceconfiguration(region: defaultserviceregiontype, credentialsprovider: credentialsprovider)     awsservicemanager.defaultservicemanager().defaultserviceconfiguration = defaultserviceconfiguration       let sns = awssns.defaultsns()     let request = awssnspublishinput()     request.messagestructure = "json"      let dict = ["default": message, "apns_sandbox": "{\"aps\":{\"\(type)\": \"\(message)\",\"sound\":\"\(sound)\", \"badge\":\"\(badges)\"} }"]          {         let jsondata = try nsjsonserialization.datawithjsonobject(dict, options: nsjsonwritingoptions.prettyprinted)         request.message = nsstring(data: jsondata, encoding: nsutf8stringencoding) as! string         request.topicarn = snstopicarn          sns.publish(request).continuewithblock         {             (task) -> anyobject! in             if task.error != nil             {                 print("error sending mesage: \(task.error)")             }             else             {                 print("success sending message")             }             completionhandler?(task.error)             return nil         }     }     catch     {         print("error on json serialization: \(error)")     }  } 

Comments