2013-04-04 84 views
0

我正在制作需要与Sendy API进行通信的iPhone应用程序。我认为,它使用某种JSON,但我不太确定,也不知道从哪里开始。我对API的subscribe部分特别感兴趣。 基本上,我需要知道如何从我的应用程序与Sendy API交谈。iOS将Sendy API集成到应用程序中

任何帮助表示赞赏。

我的代码:

- (IBAction)submitButtonPressed:(id)sender 
{ 
    self.data = [[NSMutableData alloc] initWithLength:0]; 
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:@"http://www.erwaysoftware.com/sendy/subscribe"]]; 
    [request setHTTPMethod:@"POST"]; 
    [request setValue:@"[email protected]" forHTTPHeaderField:@"email"]; 
    [request setValue:@"john" forHTTPHeaderField:@"name"]; 
    [request setValue:@"LxxxxxxxxxxxxxxxxxxxxQ" forHTTPHeaderField:@"list"]; 
    [request setValue:@"true" forHTTPHeaderField:@"boolean"]; 

    NSURLConnection *conn = [NSURLConnection connectionWithRequest:request delegate:self]; 
    [conn start]; 

} 
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { 
    [self.data setLength:0]; 
} 

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)d { 
    [self.data appendData:d]; 
} 

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error { 
    [[[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Error", @"") 
           message:[error localizedDescription] 
           delegate:nil 
         cancelButtonTitle:NSLocalizedString(@"OK", @"") 
         otherButtonTitles:nil] show]; 
} 

- (void)connectionDidFinishLoading:(NSURLConnection *)connection { 
    NSString *responseText = [[NSString alloc] initWithData:self.data encoding:NSUTF8StringEncoding]; 

    // Do anything you want with it 

    NSLog(@"%@", responseText); 
} 

当日志发生,字符串为空。我通过断点知道最后一个方法被调用。

回答

2

看看这些API都是纯文本响应。

由于这是一个POST,您可以使用NSURLConnection来组合请求。有关格式化响应的信息,请参阅this question

另一种方法是使用类似AFNetworkingRestKit的东西,如果您在使用API​​进行更多工作时可能会更友好些。

+0

我仍然很难与它...我已经在问题中张贴我的代码。 – Undo 2013-04-04 21:28:37

+0

如果我向代码中的URL发送POST请求,它会显示为空白。你确定服务设置正确吗? – 2013-04-04 21:40:11

+0

我真的不知道...今天晚些时候我会做一些研究。 – Undo 2013-04-04 21:52:35

1

我猜你已经解决了这个问题,但是如果有其他人被困在这里(就像我那样),我想我会发布我所做的工作。

您需要做的第一件事是创建一个名为NSString + URLEncoding(或其他)的类别,它将从[email protected]接收您的电子邮件和名称字段并将其转换为blah%40blah.com。我修改这从便利博客帖子发现here

@interface NSString (URLEncoding) 
-(NSString *)urlEncodeUsingEncoding:(NSStringEncoding)encoding; 
@end 

#import "NSString+URLEncoding.h" 

@implementation NSString (URLEncoding) 
-(NSString *)urlEncodeUsingEncoding:(NSStringEncoding)encoding { 
return (NSString *)CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(NULL, 
                  (CFStringRef)self, 
                  NULL, 
                  (CFStringRef)@"!*'\"();:@&=+$,/?%#[]% ", 
                      CFStringConvertNSStringEncodingToEncoding(encoding)));} 
@end 

好了,所以现在只需要导入的NSString + URLEncoding.h并添加以下代码,你会在企业。这post帮我这部分

- (IBAction)submitButtonPressed:(id)sender 
{ 
NSMutableURLRequest *newRequest = [[NSMutableURLRequest alloc]initWithURL:[NSURL URLWithString:@"http://stashdapp.com/sendy/subscribe"]]; 
[newRequest setHTTPMethod:@"POST"]; 
[newRequest setValue:@"application/x-www-form-urlencoded; charset=utf-8" forHTTPHeaderField:@"Content-Type"]; 

NSString *email = @"[email protected]"; 
NSString *name = @"First Lastname"; 
NSString *list = @"XXXXXXXXXXXXXXXXXX"; 

NSString *postData = [NSString stringWithFormat:@"email=%@&boolean=true&name=%@&list=%@", [email urlEncodeUsingEncoding:NSUTF8StringEncoding],[name urlEncodeUsingEncoding:NSUTF8StringEncoding],list]; 

[newRequest setHTTPBody:[postData dataUsingEncoding:NSUTF8StringEncoding]]; 

NSURLConnection *conn = [NSURLConnection connectionWithRequest:newRequest delegate:self]; 
[conn start]; 
} 

您还包括你在你的问题引述委托方法。

希望它可以帮助别人!

相关问题