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
Post a Comment