AFNetworking + Google Places API 网络服务 + 具有多个 baseURL 的解析 SDK

AFNetworking + Google Places API web service + Parse SDK with multiple baseURL

我正在从事一个项目,我将结合使用这些服务:

  1. AF 网络
  2. Google 地点 API 网络服务
  3. 解析

尝试遵循 AFNetworking 文档中提到的最佳实践:

Developers targeting iOS 7 or Mac OS X 10.9 or later that deal extensively with a web service are encouraged to subclass AFHTTPSessionManager, providing a class method that returns a shared singleton object on which authentication and other configuration can be shared across the application.

所以,我创建了一个单例网络管理器,例如:

MyAppAPI.h

#import <Foundation/Foundation.h>
#import "AFHTTPSessionManager.h"
#import "AFNetworking.h"

@interface MyAppAPI : AFHTTPSessionManager

+(MyAppAPI *)sharedInstance;

@end

MyAppAPI.m

#import "MyAppAPI.h"
@implementation MyAppAPI

+(MyAppAPI*)sharedInstance
{
    static MyAppAPI* sharedInstance = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
       sharedInstance = [[MyAppAPI alloc] initWithBaseURL:[NSURL URLWithString:kROOT_URL]];
    });
    return sharedInstance;
}
@end

其中 kROOT_URL"https://maps.googleapis.com/maps/api/place/nearbysearch"

用法:

  NSDictionary *params = @{@"some_param":@"some_value" };

   [[MyAppAPI sharedInstance] GET: @"/json"
                            parameters:params
                               success:^(NSURLSessionDataTask *task, id responseObject){


     } failure:^(NSURLSessionDataTask *task, NSError *error)
     {

     }];

现在,它仅适用于 Google 个地方 API 我们服务电话。

  1. 如果我想使用其他 Web 服务怎么办,如何更改 baseURL,如果不可能,处理这种情况的最佳做法是什么?
  2. 如何使用管理器与 Parse 一起工作?任何好的做法。

我需要结合 Parse、AFNetworking 和 Google Places API 网络服务的最佳实践建议。

已找到:changing AFNetworking baseURL 但没有帮助

做你正在做的事情是非常好的。重要的想法是该文档建议的单例是每个服务单例。对单例名称的选择稍作调整可能有助于澄清,所以而不是...

// MyAppAPI.h
@interface MyAppAPI : AFHTTPSessionManager

考虑一下您到目前为止所写的内容应该称为...

// GooglePlacesAPI.h
@interface GooglePlacesAPI : AFHTTPSessionManager

...并包含类似...

的方法
- (void)nearbySearch:(NSString *)value
             success:(void (^)(NSURLSessionDataTask *, id))success 
             failure:(void (^)(NSURLSessionDataTask *, NSError *))failure {

    NSDictionary *params = @{@"some_param":value };
    [self GET: @"/json" parameters:params success:success failure:failure];
}

此 class 的客户然后会说...

[GooglePlacesAPI nearbySearch:@"some value" success:^(NSURLSessionDataTask *task, id responseObject) {
    // handle success
} failure:^(NSURLSessionDataTask *task, NSError *error) {
    // handle failure
}];

Parse 为您提供了使用 REST API 的选项,并且您可以按照相同的模式为 Parse 创建单例...

// ParseAPI.h
@interface ParseAPI : AFHTTPSessionManager

值得一提的是,Parse 还提供了完整的 iOS SDK,它以类似于 AFNetworking 的方式包装网络代码,因此如果您选择 SDK 而不是 REST API.

简单的答案是根本不编写自己的代码。使用 Parse's SDK for anything on Parse and Google's Places SDK 用于任何需要地点的地方。两者都有 CocoaPods。否则,按照 danh 的概述,将客户分成他们自己的单身人士。