【问题标题】:BigCommerce Use API To Get Customer Email In iOSBigCommerce 使用 API 在 iOS 中获取客户电子邮件
【发布时间】:2013-07-03 15:13:05
【问题描述】:

我正在努力扩展我制作的现有应用程序的功能,该应用程序显示来自 Big Commerce 商店的内容。基本上,我希望应用程序能够检查用户在 iPhone 上输入的电子邮件地址是否存在于客户列表中,然后基于此执行操作。我有一个 API 密钥和调用方法来获取客户列表,但不确定如何最好地在 iOS 上执行此操作。有人可以给我一些关于我需要做什么来调用它的指示吗?

更新:到目前为止,我使用了以下代码:

-(IBAction)gettingcustomers {
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"mystoreserver.customers.json"]
                                                           cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData
                                                       timeoutInterval:10];

    [request setHTTPMethod: @"GET"];

    NSError *requestError;
    NSURLResponse *urlResponse = nil;


    NSData *response1 = [NSURLConnection sendSynchronousRequest:request returningResponse:&urlResponse error:&requestError];
    NSLog(@"%@", requestError);
}

日志中的错误显示:

Error Domain=NSURLErrorDomain Code=-1012 "The operation couldn’t be completed. (NSURLErrorDomain error -1012.)" UserInfo=0xa7d12e0 {NSErrorFailingURLKey=mystoreserver.customers.json, NSErrorFailingURLStringKey=mystoreserver.customers.json, NSUnderlyingError=0xa7da430 "The operation couldn’t be completed. (kCFErrorDomainCFNetwork error -1012.)"}

【问题讨论】:

    标签: ios api get bigcommerce


    【解决方案1】:

    首先,错误意味着 kCFURLErrorUserCancelledAuthentication。

    您的代码中存在一些问题:

    1. 不要从主线程调用同步网络请求(太糟糕了!)因为网络请求可能需要几秒钟到一分钟,它会阻塞主线程,从而阻塞 UI。

    2. 如果您希望您的应用在蜂窝网络连接下工作,请不要将超时设置得太短。默认是好的。更好的是,将它设置得非常高,让用户取消它(这需要在异步模式下使用NSURLConnection)。

    3. 正确检查错误。基本上,以NSError 对象指针作为最后一个参数的方法通过其返回值 指示成功或失败。也就是说,为了判断是否有错误只检查返回值!当且仅当返回值指示错误时,错误参数可能指向有意义的NSError 对象。

    4. 在客户端身份验证的情况下,请求无法进行身份验证的原因是“众所周知的”凭据存储(密钥链)中可能没有凭据。为了实现一些您自己设置凭据的自定义身份验证方法,您必须在异步模式下使用NSURLConnection 并实现委托方法。也可能有其他原因。

    为了完成这个任务,你现在应该做的是

    1. 在异步模式下使用NSURLConnection - 您可能需要实现委托方法connection:willSendRequestForAuthenticationChallenge:

    2. 确保正确设置请求的标头,例如设置“Content-Type”标头和可能的“Accept”标头不会有什么坏处。

    3. 修复超时(保持默认)。

    4. 正确检查错误。

    5. 检查响应,即状态码和 Content-Type(如果这是您所期望的)。

    6. 处理响应数据。

    7. 根据给定的身份验证挑战实现connection:willSendRequestForAuthenticationChallenge:

    【讨论】:

      猜你喜欢
      • 2020-01-04
      • 2021-04-09
      • 1970-01-01
      • 2013-09-05
      • 2017-10-20
      • 1970-01-01
      • 2020-09-16
      • 1970-01-01
      • 2017-08-12
      相关资源
      最近更新 更多