[오픈 API] 앱 다운로드 순위를 가져오자 2부 (모바일앱 설계)

  1. [오픈 API] 앱 다운로드 순위를 가져오자 1부 (AppApnnie Api)
  2. [오픈 API] 앱 다운로드 순위를 가져오자 2부 (모바일 앱 설계)
  3. [오픈 API] 앱 다운로드 순위를 가져오자 3부 (모바일 앱 구현)

두번째 시간으로 앱 다운로드 순위을  가져오는  ios 앱을 만들어 보겠습니다.

우선 이번시간에는 설계를 하고, 다음시간에는 구현을 하도록 하겠습니다.

목차

  1. 프로젝트 생성 및 Prefix 파일 정의
  2. 화면 구성
  3. 모델 설계
  4. 사용할 라이브러리

==============================================================================

1. xcode를 열고, 프로젝스명을 "AppDownload" 적고 프로젝트를 생성합니다.

프로젝트 생성

그리고 PrefixHeader.pch 파일을 만들고 연결할 뒤, 이전시간에 사용했던 Appannie API 및 사용할 API를 정리합니다. PrefixHeader은 프로젝트 생성 시 자동으로 만들어지지 않으나, 파일을 만들고 나서 타겟 - 빌드 세팅에서 연결해주면됩니다.

PrefixHeader 추가

Prefix 파일은 절대경로를 정의해주고, 모든 클래스에서 접근할수 있으므로 매우 유용해서, 저는 프로젝트 진행 시 사용합니다. 사용할 API 주소 및 절대 주소값들에 대한 내용들을 정의합니다.

==============================================================================
// API를 요청한 디폴트 URL
#define DEFAULT_URL @"https://api.appannie.com/v1.2"

//APPANNIE API KEY
#define APPANNIE_API_KEY @"Bearer 0f4fec38940d13b11608b226322990c513967335"

//맨처음 요청할 Account API
#define AUTH_API(page_index)  [NSString stringWithFormat:@"%@/accounts?page_index=%@",DEFAULT_URL,page_index]

//두번째로 요청할 Products API
#define PRODUCTS_API(accountId,page_index) [NSString stringWithFormat:@"%@/accounts/%@/products?page_index=%@",DEFAULT_URL,accountId,page_index]

//마지막으로 요청할  Sales API
#define SALES_API(accountId,productId,start_date,end_date,countries,page_index) [NSString stringWithFormat:@"%@/accounts/%@/products/%@/sales?start_date=%@&end_date=%@&currency=USD&countries=%@&page_index=%@",DEFAULT_URL,accountId,productId,start_date,end_date,countries,page_index]
==============================================================================


2. 화면 구성은 크게 세가지로 나누어 봤습니다.
Account를 요청하는 화면 : API KEY로 AccontID를 요청하고 선택하는 화면
Products 요청하는 화면 AccontID로 ProductID를 요청하고, 선택하는 화면
Sales 요청하는 화면 ProductID로 Sales 정보를 요청하는 화면

스토리보드 화면 구성

3. 모델 설계
API 통신을 하면서, 전달받을 값을 모델 데이터에 넣을 객체들을 설계합니다.

==============================================================================
3.1 Account API릍 요청후 받을 객체
@interface AuthModel : NSObject
@property (nonatomic,strong) NSString *account_id;
@property (nonatomic,strong) NSString *account_name;
@property (nonatomic,strong) NSString *account_status;
@property (nonatomic,strong) NSString *market;
@property (nonatomic,strong) NSDate *first_sales_date;
@property (nonatomic,strong) NSDate *last_sales_date;
@property (nonatomic,strong) NSString *publisher_name;

@property (nonatomic,strong) NSString *vertical;


3.2 Product API릍 요청후 받을 객체
@interface ProductsModel : NSObject
@property (nonatomic,strong) NSArray *device_codes;
@property (nonatomic,strong) NSString *devices;
@property (nonatomic,strong) NSString *status;
@property (nonatomic,strong) NSDate *first_sales_date;
@property (nonatomic,strong) NSDate *last_sales_date;
@property (nonatomic,strong) NSString *market;
@property (nonatomic,strong) NSString *icon;
@property (nonatomic,strong) NSString *product_name;
@property (nonatomic,strong) NSString *product_id;

3.3 Sales API릍 요청후 받을 객체
@interface SalesModel : NSObject
@property (nonatomic,strong) NSString *date;
@property (nonatomic,strong) NSString *country;
@property (nonatomic,strong) UnitsModel *units;

3.4 SalesModel의 units 객체
@interface UnitsModel : NSObject
@property (nonatomic,strong) ProductModel *product;

3.5 UnitsModel 의  product 객체
@interface ProductModel : NSObject
@property (nonatomic,strong) NSString *promotions;
@property (nonatomic,strong) NSString *downloads;
@property (nonatomic,strong) NSString *updates;
@property (nonatomic,strong) NSString *refunds;

==============================================================================

4. 이제 앱에서 사용할 라이브러리들을 정리 합니다.
HTTP 통신, 이미지 다운로드, JSON 파서 등을 사용할 예정이기 때문에, pod파일을 열고 아래의 오픈소스들을 추가합니다.

  • AFNetworking : http 통신라이브러리
  • MJExtension : json 객체를 모델 객체로 넣어주는 라이브러리
  • MJRefresh : 새로고침 라이브러리
  • SDWebImage : 이미지 다운로드 및 캐쉬 라이브러리

===========================================================================
# Uncomment the next line to define a global platform for your project
# platform :ios, '9.0'

target 'AppDownload' do
  # Uncomment the next line if you're using Swift or would like to use dynamic frameworks
  # use_frameworks!

  # Pods for AppDownload

   pod 'AFNetworking'
   pod 'MJExtension'
   pod 'MJRefresh'
   pod 'SDWebImage'

end

==============================================================================

자 이제, 설계는 모두 끝났고, 다음시간에는 구현을 해보도록 하겠습니다.


댓글

주간 인기글

[정보] 인스타그램은 당신의 소리를 '듣고' 있을 수도 있습니다

남산 케이블카 이야기

[Angular] 모델, 값이 바뀌었는데 화면 template 이 업데이트 되지 않을 때 조치 팁

안드로이드에서 당겨서 새로고침(SwipeRefreshLayout) 쉽게 구현하기

Java8 Stream 가이드