1. jSON 객체를 주고 받는다.
2. HTTP 프로토콜을 이용한다.
3. jSON 객체 string은 다음에 과정을 거친다.
jSON string --> base64Enc --> AES256Enc --> byte2Hex String --> HTTP 통신 --> 서버
서버 --> HTTP 통신 ---> hex2byte --> AES256Dec --> base64Dec --> JSON string
4. 필요한 모듈
이를 위해 필요한 것은 아래의 NSString 및 NSData 카테고리 클래스를 구해야 한다.
NSString+Base64.m / h
https://github.com/kyoshikawa/ZUtilities/blob/master/NSData%2BAES256.m
NSData+AES25.m / h
NSData+Base64.m / h
... 생략 ....
//string -> base64Enc -> aes256Enc -> byte2hex
- (NSString *) encryptString:(NSString *)textString {NSString * base64Enc = [self base64Encode:textString];
NSData * aes256enc = [self encryptString:base64Enc withKey:[self generateKey]];
return [self byteToHexString:aes256enc];
}
// hex2byte-> aes256Dec --> Base64Dec --> string
- (NSString *) decryptString:(NSString *)textString {NSData * data = [self hexToBytes:textString];
NSString * aes256dec = [self decryptData:data withKey:[self generateKey]];
return [self base64Decode:aes256dec];
}
... 생략 ...
6. jSON객체를 핸들링 하기 위한 모듈을 준비한다.
json 객체를 이용하기 위해서는
http://superloopy.io/json-framework/
에서 jSON 모듈이 필요하다.
7. 서버에 요청 하기 위한 jSON객체 생성과 인크립트를 한다.
NSArray *keys = [NSArray arrayWithObjects:@"graduateNo", @"name", @"alumniName", nil];
NSArray *objects = [NSArray arrayWithObjects:txtFieldNumber.text, txtFieldName.text, txtFiledAlumiName.text, nil];NSDictionary *jsonDictionary = [NSDictionary dictionaryWithObjects:objects forKeys:keys];
위와 같이 key와 key값을 NSArray와 NSDictionary 를 이용하여 jsonString을 얻어 낼수 있다.
인크립트 메서드를 가지고 있는 crypto클래스를 이용해서 전송에 필요한 데이터를 구성한다.
8. 서버에 전송
NSMutableURLRequest, NSURLConnection 을 이용해서 서버에 전송한다.
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:
[NSURL URLWithString:[NSString stringWithFormat: @"%@/api/xxxx.api",SERVER_URL]]
cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:5.0];
[request addValue:@"application/x-www-from-urlencoded" forHTTPHeaderField:@"content-type"];
[request setHTTPBody:jsonData];[request setHTTPMethod:@"POST"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[request setValue:[NSString stringWithFormat:@"%d",[jsonData length]] forHTTPHeaderField:@"Content-Length"];
receiveData = [[NSMutableData alloc] init];
}9. 서버로 부터 응답 처리
- (void)connection:(NSURLConnection *)connection didReceiveResponse:
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
응답에 관련된 메서드를 각각 구현한다.
서버에 응답 데이터에 대해서는
didReceiveResponse 에서 NSData 를 append 하고
connectionDidFinishLoading
에서 완성된 데이터를 crypto 클래스의 decryp 메서드를 이용해서 json 스트링으로 변환 한다.
마지막으로 JSONValue 를 통해서 NSDictionary로 변환 하여
필요한 값을 valeuForKey로 얻어 낸다.
댓글 없음:
댓글 쓰기