使用amazon AWS SNS服务IOS

won*_*wai 1 amazon-web-services amazon-sns ios

我正在开发一个使用亚马逊aws服务的应用程序,它是一个信使.

我想使用IOS推送通知服务和亚马逊SNS来实现2个用户之间的通信.我可以通过向名为endpoint的目标发布消息来从SNS控制台发送消息.

但是,我无法通过IOS的amazon SDK从一个手机向另一个手机发送消息.我可以通过亚马逊的API以这种方式做到吗?

我想将名为messageDict的NSDictionary发送到目标endPoint.我可以不使用服务器实现这一目标吗?

NSDictionary *messageDict = [[NSDictionary alloc]init];

messageDict = @{ @"Name" : @"HelloWrold" ,@"Id" :@"GoodBye",};

NSData *jsonData = [NSJSONSerialization dataWithJSONObject:messageDict options:NSJSONWritingPrettyPrinted error:nil];

NSString *jsonString = [[NSString alloc]initWithData:jsonData encoding:NSUTF8StringEncoding];


NSLog(@"Jsonstring %@",jsonString);

AWSSNS *publishCall = [AWSSNS new];

AWSSNSPublishInput *message = [AWSSNSPublishInput new];

message.subject = @"My First Message";


//This is the ending point
message.topicArn = @"arn:aws:sns:us-east-1:012345678912:endpoint/APNS_SANDBOX/appTesting/201sjad-XXXX-XXXX-XXXX-c34sdfdsf1d9c";

message.messageAttributes = messageDict;

message.messageStructure = jsonString;




[[publishCall publish:message]continueWithExecutor:[BFExecutor mainThreadExecutor] withBlock:^id(BFTask *task){

    if (task.error != nil) {
        NSLog(@"Error %@",task.error);

    }


    else{



        NSLog(@"Successful");

    }

    return nil;

}];
Run Code Online (Sandbox Code Playgroud)

Rya*_*huk 5

发送APN最困难的事情SNS是使数据结构正确.以下是使用swift发布主题的方法.每个平台都需要是一个编码的字符串,如果你搞砸了它,SNS只会发送你的默认消息.

func publishPush() {
    let sns = AWSSNS.defaultSNS()
    let request = AWSSNSPublishInput()
    request.messageStructure = "json"

    var aps: NSMutableDictionary = NSMutableDictionary()
    var dict = ["default": "The default message", "APNS_SANDBOX": "{\"aps\":{\"alert\": \"YOUR_MESSAGE\",\"sound\":\"default\", \"badge\":\"1\"} }"]

    let jsonData = NSJSONSerialization.dataWithJSONObject(dict, options: nil, error: nil)
    request.message = NSString(data: jsonData!, encoding: NSUTF8StringEncoding) as! String
    request.targetArn = "blahblahblah:MyTopic"
    sns.publish(request).continueWithBlock { (task) -> AnyObject! in
        println("error \(task.error), result:; \(task.result)")
        return nil
    }

}
Run Code Online (Sandbox Code Playgroud)