4
我一直在嘗試創建應用程序,以便通過AWS SNS發送和接收推送通知。我是新手,無法找到可靠的教程。下面是我,以便想出的功能來發送和接收通知:通過AWS SNS發送和接收推送通知
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 with 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\"} }"]
do
{
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)
}
一切似乎運作良好,我得到了「成功認購」,「確認訂購」和「已發送」登錄控制檯,但application:didReceiveRemoteNotificationuserInfo:
永遠不會被調用。我究竟做錯了什麼?
我很驚訝的是,'subscribe'調用成功,因爲'protocols'丟失(這是[要求](http://docs.aws.amazon.com/AWSiOSSDK/latest/Classes/AWSSNSSubscribeInput.html )根據API參考)。您應該試試[SNS-MobileAnalytics-Sample](https://github.com/awslabs/aws-sdk-ios-samples/tree/master/SNS-MobileAnalytics-Sample/Swift),以瞭解如何整合Amazon SNS移動推送在您的應用程序。作爲單獨的說明,您不應將您的AWS憑證嵌入到您的應用程序中。另外,一般而言,您應該從服務器發佈推送通知以避免垃圾郵件。 –