페이지

2010년 11월 9일 화요일

OAuth


OAuth란?

Open API를 사용하기 위해선 인증이 필요합니다.

인증방식의 표준이 없기 때문에 제 각각의 방법으로 개발되고 있는 실정인데요

구글의 AuthSub, AOL의 OpenAuth, 야후의 BBAuth

OAuth는 제각각의 인증방식을 표준화하고 가장 좋은 방법만 가져다 만들었습니다.

즉 매쉬업 서비스로 만들어진 어플리케이션이 다른 어플리케이션의 사용자 정보를 접근할 수 있는

표준화된 방법을 제공하는 스펙입니다.

OAuth 인증방식을 이해하기 위해선

용어를 미리 숙지하셔야 합니다.

◦ 서비스 프로바이더(Service Provider) – OPENAPI를 제공하는 서비스를 말합니다. 
◦ 사용자(users) - 서비스 프로바이더 혹은(그리고) 컨수머를 사용하는 이를 말합니다. 
◦ 컨수머(Consumer) – API를 사용하여 개발된 애플리케이션 서비스를 말합니다.
◦ 보호된 자원(Protected Resources): 서비스 프로바이더에 존재하는 사용자의 데이터를 의미합니다.
◦ 컨수머 개발자(Consumer Developer) : 컨수머를 개발하는 개인 혹은 단체
◦ 컨수머 키(Consumer Key) : 서비스 프로바이더에게 컨수머 자신임을 인증하기 위한 키
◦ 컨수머 시크릿(Consumer Secret) : 컨수머의 컨수머 키 소유권한이 있는지 인증하기 위한 키
◦ 토큰(Tokens) – 컨수머에서 서비스 프로바이더에 있는 사용자의 보호된 자원에 접근하기 위해 사용되는
                       사용자의 인증정보입니다.

▪  리퀘스트 토큰(Request Token) :  컨수머가 사용자에게  접근권환을 획득하는 과정에서 사용하는   
                                               값이며, 이것은 차후 액세스 토큰으로 교환됩니다.
▪  리퀘스트 토큰 시크릿(Request Token Secret) :  리퀘스트토큰이 사용자의 것임을 인증하기 위한
                                                                 값입니다.
▪  액세스 토큰(Access Token) : 컨수머가 사용자의 서비스 프로바이더를 통해서가 아닌 컨수머를
                                          통해서 보호된 자원에 접근할 수 있는 권한을 받기 위한 값입니다.
         ▪  액세스 토큰 시크릿(Access Token Secret) : 액세스토큰이 사용자의 것임을 인증하기 위한
                                                                      값입니다.

OAuth 인증방식의 흐름도입니다.


OAuth 인증 방식에는 7가지의 인증과정으로 이루어져 있습니다.

A; Consumer가 Request Token 요청
B; Service Provider가 Request Token 발급 
C; Consumer는 사용자를 Service Provider로 이동, 사용자를 인증하고 토큰 발급을 확인함
D; Service Provider는 사용자를 Consumer로 이동 
E; Consumer는 Access Token 요청 
F; Service Provider는 Consumer의 신원과 Request Token 확인, Access Token 발급
G; Consumer는 Access Token으로 사용자 정보에 접근

끝으로 관련 사이트입니다.


현재 오픈마루에서 OAuth 인증방식을 지원하고 있습니다.


OAuth 인증 관련 예제


출처 : Naver OPEN API 공식CAFE

2010년 10월 28일 목요일

필요한 랜덤수의 개수를 담으면, 랜덤수를 담은 배열을 리턴하는 메소드

+ (NSArray*)makeRandomIndexArray:(NSUInteger)countOfIndices
{
srand(time(NULL));
NSMutableArray* indices = [[NSMutableArray alloc] initWithCapacity:countOfIndices];
NSMutableArray* tempArray = [[NSMutableArray alloc]initWithCapacity:countOfIndices];
for (NSUInteger i = 0; i < countOfIndices; i++) 
{
[tempArray addObject:[NSNumber numberWithInt:i]];
}
for (NSUInteger i = 0; i < countOfIndices; i++) 
{
NSUInteger randomNumber = (rand()% (countOfIndices-i) );
NSNumber* number = [tempArray objectAtIndex:randomNumber];
[indices addObject:number];
[tempArray removeObjectAtIndex:randomNumber];
}
[tempArray release];
return (NSArray*)[indices autorelease];
}

2010년 10월 17일 일요일

UINavigationBar에 Background image설정하기

UINavigationBar에 Background image를 설정하는 간단한 방법으로는

UIImage *backImage = [UIImage imageNamed:@"title-bar.png"];
UIImageView *backImageView = [[UIImageView alloc] initWithImage:backImage];
[self.navigationController.navigationBar insertSubview:backImageView atIndex:0];

와같이 0번 index에 이미지뷰를 서브뷰로 더하는 것이다.

하지만 이렇게 할 경우 다음 depth로 넘어가자 타이틀이 가려지는 현상이 발생했다.
검색을 해보니 다양한 문제가 발생하기도 했는데 이를 완연히 방지하기 위해서는
UINavigationBar에 카테고리를 더해

#import "UINavigationBar+BackgroundImage.h"


@implementation UINavigationBar (BackgroundImage)

- ( void )drawRect:( CGRect )rect
{
    [ [ UIImage imageNamed:@"title-bar.png" ] drawInRect:CGRectMake( 0, 0, self.frame.size.width, self.frame.size.height )];
}

@end

와같이 drawRect를 구현해주면 별도의 설정없이 이미지가 더해진다.

2010년 10월 12일 화요일

MPMoviewPlayerController


Supported Formats

This class plays any movie or audio file supported in iOS. This includes both streamed content and fixed-length files. For movie files, this typically means files with the extensions .mov,.mp4, .mpv, and .3gp and using one of the following compression standards:
  • H.264 Baseline Profile Level 3.0 video, up to 640 x 480 at 30 fps. (The Baseline profile does not support B frames.)
  • MPEG-4 Part 2 video (Simple Profile)
If you use this class to play audio files, it displays a white screen with a QuickTime logo while the audio plays. For audio files, this class supports AAC-LC audio at up to 48 kHz, and MP3 (MPEG-1 Audio Layer 3) up to 48 kHz, stereo audio.

 네트워크로 받아온 동영상을 재생하고 싶은 경우 성능상의 이유로 먼저 파일을 다운로드한 후에 local file을 재생하는 것이 좋습니다.

2010년 10월 6일 수요일

UIWebView가 자동으로 bounces되는 것 막기

subview중 scrollView를 찾아서 해결
for (id subview in testWebView.subviews)
    if ([[subview class] isSubclassOfClass: [UIScrollView class]])
        ((UIScrollView *)subview).bounces = NO;

2010년 10월 5일 화요일

구글맵에서 찾은 장소의 위치와 경도 알아내기

구글맵에서 원하는 장소를 찾은 뒤 주소창에
javascript:void(prompt('', gApplication.getMap().getCenter()));
라고 입력하면 된다.

2010년 9월 30일 목요일

Model View Controller

 Smalltalk 에서 처음 소개되었던 Model View Controller(이하 MVC)패턴은 Cocoa frameworks의 전반적인 기반으로 사용된다.  모든 Object를 세가지 종류 중 하나로 분리하는 작업이 필요하다.
Model : Model은 어플리케이션의 단일한 능력이나 정보를 제공하는 객체이다.  View나 Controller와 의존성이 없어야 한다.
View : View는 Model과 합쳐진 정보를 나타내거나, 사용자와 상호작용을 하는데 사용된다. View는 웹기반이 될 수도, Command line기반이 될 수도, GUI가 될 수도 있다. 이러한 다양한 View는 같은 Model과 작용할 수 있어야 한다.
Controller : Controller의 목적은 Model과 View의 기능을 분리 시키는 데에 있다. View에서 사용자와의 상호작용의 결과를 이용해, Model의 정보를 변화시킨다.
 MVC의 기본적인 목적은 Model과 View, Controller의 기능을 분리시켜 각각의 변화가 생겨도 서로 간의 영향을 주지 않도록 하는데에 있다.

MVC in Cocoa
 Model은 Core Data가, View와 Controller는 Application Kit이 제공한다. Foundation framework은 위의 3 subsystems에서 사용되는 class를 제공한다. Model은 Cocoa framework외에 다른 subsystems에서도 사용될 수 있도록 구현되기도 한다. 하지만 Core Data frameworks는 강력하고 유연한 기능을 제공하므로, Cross-platform이 필요하지 않다면 Cocoa 기술을 이용해서 Model을 설계하는것이 유리하다.

Core Data / Model
 Model은 영구정보저장과, Object relationship management의 문제를 해결해야한다. Binary file 혹은 사람이 읽을 수 있는 Text file 등 여러 방법으로 저장할 수 있다. Core Data는 XML, binary flat files, SQLite database 3가지의 file format을 가지고 있다.
 Core Data는 3가지의 file format을 개발과정에서 자유롭게 바꾸거나 3가지 모두 동시에 지원가능하도록 해준다.
 대부분의 Model은 여러 objects간의 관계를 관리해준다. Core Data는 one to one, one to many 관계를 지원한다. 각 관계는 옵션이거나 필수일 수 있다. Core Data는 relationships, constraints, default values 를 개발자가 정의할 수 있도록 제공하고, relationship을 validate해준다.
 Apple의 Xcode tool의 Graphical object modeler를 이용하면, graphical하게 Model object를 정의할 수 있다.

Application Kit / View
 모든 Cocoa application은 OS와 연결을 유지하기 위해서 NSApplication의 Instance를 사용한다. NSApplication, NSView, NSWindow는 모두 NSResponder의 Subclasses다. NSResponder는 Responder Chain design pattern을 구현한다.
 NSView는 Hierarchies pattern을 구현한다. 모든 NSView는 Subviews를 가질 수 있다.
 Cocoa의 대부분의 UI Components는 NSControl의  Subclasses이다. NSControl은 Targets and Actions와 Responder Chain patterns의 중요한 역할을 한다.
 NSCell은 Flyweight pattern을 구현한다. Flyweight는 수행시간과 Memory소비를 최적화한다. NSControl의 Instances는 최적화와 유연성을 더하기 위해서 NSCell의 Subclasses를 사용한다.

Application Kit / Controller