다른 앱 실행시키는 방법


예를 들어 아이폰에 설치된 카카오스토리를 실행시키려면 아래처럼 작성할 수 있다.

"kakaostory://" 는 카카오스토리앱의 URL Scheme 이란다.


func openKakao() {

    let kakaoStory = "kakaostory://"

    

    let kakaoStoryURL = NSURL(string: kakaoStory)

    if UIApplication.sharedApplication().canOpenURL(kakaoStoryURL!) {

        UIApplication.sharedApplication().openURL(kakaoStoryURL!)

    }

    else {

        print("No kakaostory installed.")

    }   

}


이렇게만 하면 에러가 발생한다. info.plist 에 설정을 해 줘야 제대로 동작한다.




키 추가할 떄 "LSApplicationQueriesSchemes" 항목이 보이지 않아서 직접 입력해줬다.



'앱 개발 - iOS' 카테고리의 다른 글

[swift] 다른 앱 실행시키는 방법  (0) 2016.03.29
APNS 개발 2  (0) 2015.11.22
APNS 개발 1  (0) 2015.11.22
개발자 등록 후, 개발 맥 인증하기  (0) 2015.11.22
애플에서 공식적으로 이야기해주는 iOS 버전 비율  (0) 2014.02.27
Xcode 5 temp directory  (0) 2013.12.26


Posted by 똑똑한 영장류

APNS 개발 2

앱 개발 - iOS 2015.11.22 22:19

APNS 구현을 위해서 앱에서 처리해야할 부분과 서버에서 처리해야할 부분이 있다.


서버는 어디로 푸시를 날릴지 알기위해서 디바이스토큰이라는 것이 필요한데, 그건 앱에서 알아낼 수 있다.


우선 앱에서 필수 코드를 구현해야 테스트가 가능하겠다.


Xcode에서 프로젝트를 하나 만들자. 앱의 bundle identifier는 개발자 사이트에서 마련해놓은 번들 아이디와 같아야한다.

내 경우에는 com.appspop.pushtest 였다.


AppDelegate.m 에 가서 아래 내용 추가하자.


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    // Override point for customization after application launch.

    

    UIUserNotificationType types = UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert;

    

    UIUserNotificationSettings *mySettings = [UIUserNotificationSettings settingsForTypes:types categories:nil];

    

    [[UIApplication sharedApplication] registerUserNotificationSettings:mySettings];

    [[UIApplication sharedApplication] registerForRemoteNotifications];

    

    return YES;

}


다음 함수들도 추가해주자.


#pragma mark - APNs


- (void)application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)devToken {

    

    NSString *strDeviceToken = [devToken description];

    NSLog(@"%@",strDeviceToken);

    

    NSString *strWithoutSpace = [strDeviceToken stringByReplacingOccurrencesOfString:@" " withString:@""];

    int len = [strWithoutSpace length];

    NSRange range = {1, len-2};

    NSString *pushid = [strWithoutSpace substringWithRange:range];

    NSLog(@"%@",pushid);


}


- (void)application:(UIApplication *)app didFailToRegisterForRemoteNotificationsWithError:(NSError *)err {

    NSLog(@"Error in registration. Error: %@", err);

}


이정도 하고, 실제 아이폰을 맥에 연결한 후, 시뮬레이터가 아닌 실 기기로 실행을 시켜보자.


아이폰에서 앱이 실행되고, 'pushtest'에서 알림을 보내고자 합니다....라는 메시지가 나타난다. [확인]을 눌러주자.


그리고, Xcode에 와서 디버그 콘솔을 보면 해당 아이폰의 디바이스 아이디를 확인할 수 있다.

이 디바이스토큰을 서버에 저장하고 필요하면 이 디바이스토큰을 이용해서 해당 아이폰에 푸시를 보낼 수 있다.




서버를 준비해야겠다.

서버는 해당 앱에 푸시를 보내기 위해서 pem 파일이 필요하다.

pem 파일부터 만들어야겠다.


우선. 키체인에 가서 Apple Development IOS Push Services: com.XXXXXXX.pusthtest 인증서를 선택하고, 마우스 오른쪽을 클릭해서 내보내기를 실행하자.




도큐멘트 디렉토리에 저장을 하던 어디에 하던, 파일이름을 지정해주고, 


키를 위해 암호를 설정해준다.

맥 로그인 계정의 암호를 입력해주면...


토큐먼트 디렉토리에 cert.p12 파일이 생성된다.


이제 키체인에서 push service 인증서를 클릭해서 열쇠 아이콘이 보이는 개인 키를 연다. 거기서 마우스 오른쪽 눌러서 키를 내보내기 한다.


cert.p12 만들 때와 같이 진행하며, 이름은 key로 한다.


자..이제 도큐먼트 디렉토리에 cert.p12 와 key.p12 가 있다.


이 두개 파일로 pem 파일을 만들게 된다.


같은 디렉토리에 두 파일을 옮겨놓자.


난 홈디렉토리 아래에 pem 이라는 디렉토리를 만들고 그 안에 두 파일을 복사해놓았다. 터미널을 열어 pem 디렉토리로 이동한다.


MBPro:~/pem ryu $ ls

cert.p12 key.p12

MBPro:~/pem ryu $ openssl pkcs12 -clcerts -nokeys -out cert.pem -in cert.p12

Enter Import Password:

MAC verified OK

MBPro:~/pem ryu $ openssl pkcs12 -nocerts -out key.pem -in key.p12

Enter Import Password:

MAC verified OK

Enter PEM pass phrase:

Verifying - Enter PEM pass phrase:

MBPro:~/pem ryu $ openssl rsa -in key.pem -out key.unencrypted.pem

Enter pass phrase for key.pem:

writing RSA key

MBPro:~/pem ryu $ cat cert.pem key.unencrypted.pem > pushtest.pem

MBPro:~/pem ryu $ 



Enter Import Password 는 이전에 pushtestkey.p12 만들 때 입력했던 암호를 입력해야한다.

그 뒤에서 Enter PEM pass phrase 는 새로 만들어질 pem 파일을 암호화하는데 사용될 암호를 입력해야한다.


위처럼 최종 pushtest.pem가 만들어졌다.


애플 푸시서버에 푸시를 요청할 수 있도록 서버를 구성해야하는데, 구글링하면 소스는 많다. 

그 소스들에서는 지금 만들어진 pem 파일을 이용하게 되니까, 서버에 올려서 사용하면 되겠다.


















'앱 개발 - iOS' 카테고리의 다른 글

[swift] 다른 앱 실행시키는 방법  (0) 2016.03.29
APNS 개발 2  (0) 2015.11.22
APNS 개발 1  (0) 2015.11.22
개발자 등록 후, 개발 맥 인증하기  (0) 2015.11.22
애플에서 공식적으로 이야기해주는 iOS 버전 비율  (0) 2014.02.27
Xcode 5 temp directory  (0) 2013.12.26


Posted by 똑똑한 영장류

APNS 개발 1

앱 개발 - iOS 2015.11.22 22:17

Xcode가 좋아져서 개발자 인증서는 알아서 키체인에 등록해주고, 개발자 센터에도 알아서 잘 등록해주지만, 실제 기기에서 테스트를 할 수 밖에 없는 푸시서비스를 이용하는 경우에는 앱 아이디를 제대로 등록해서 개발을 해야한다.


개발자 센터가서 앱 아이디를 먼저 만들어줘야한다.


개발자 센터로 가서 

Certificates, identifier & Profiles 로 간다.

왼쪽 메뉴 중 Identifier 아래 App IDs 를 선택한다.

https://developer.apple.com/account/ios/identifiers/bundle/bundleList.action


오른쪽 상단에 [+]를 클릭해서 앱 아이디를 등록할 수 있다.



App ID Description > Name 에 'Push Test'라고 입력했다. (마음대로 해도 된다.)


Explicit App ID > Bundle ID 에 'com.mydomain.pushtest' 라고 입력했다. 이 번들 아이디가 모든 앱들을 구분해주는 아이디다.

거꾸로 된 도메인 네임형태가 권장된다. 보유하고 있는 개인도메인이나 회사도메인 이용하면 되겠다.


중요한것!

App Services 중에 Push Notification을 체크해서 선택해줘야한다. 그리고나서 [continue]


confirm 화면에서 정보확인하고, [submit] 클릭하면 앱 아이디가 등록된다. 결과 화면이 나오면, [Done] 클릭.


푸시서비스를 이용할 app ID는 준비되었다.


그리고, Cerificates > Development 에 가서 오른쪽 상단에 [+]를 클릭하자.


개발용일 경우, 두 가지가 보인다. iOS App Development 와 Apple Push Notification service SSL (Sandbox)..

당연 두번째  APNS를 선택하고, 저~ 아래 [continue] 클릭한다.



아래처럼 나오면, APNS를 사용하기로 한, App ID를 선택해준다.



그리고, 맨 아래에 [continue]클릭!



하...맥 인증은 쉬워졌다 했더니, APNS 사용하려면 결국 이 작업을 해야하는구나...싶다.


계속 진행하기 위해서 csr 파일이 필요한데,, 만드는 방법이 설명되어있다. 따라하면 된다.







이렇게 하면, 데스크탑에 CertificateSigningRequest.certSigningRequest 파일이 저장된다. 이거 이용해서 계속 진행한다. 다시 개발자 센터로...

CSR 파일 생성 설명 있는 페이지에서 [continue]..


[Choose File..]클릭해서 만들어놓은 CertificateSigningRequest.certSigningRequest 를 선택하고 아래에 [Generate] 버튼 클릭한다.


오케이.

아래처럼 준비되었다고 나오면, [Download] 클릭해서 다운받고, 다운받은 파일 aps_development.cer 더블클릭해서 키체인에 추가하면 된다.


키체인에 아래처럼 보이면 잘 추가된 것이다.


개발자 사이트로 가서 [Done] 클릭하면, 아래처럼 추가되어있는 것을 확인할 수 있다.



여기까지 APNS 사용할 앱 개발을 위한 준비였다.













'앱 개발 - iOS' 카테고리의 다른 글

[swift] 다른 앱 실행시키는 방법  (0) 2016.03.29
APNS 개발 2  (0) 2015.11.22
APNS 개발 1  (0) 2015.11.22
개발자 등록 후, 개발 맥 인증하기  (0) 2015.11.22
애플에서 공식적으로 이야기해주는 iOS 버전 비율  (0) 2014.02.27
Xcode 5 temp directory  (0) 2013.12.26


Posted by 똑똑한 영장류
TAG apns, ios, Xcode

iOS용으로 cocos2d-x 3.0 beta2 를 이용해서 게임을 제작하고 있다고 가정.


광고를 달고 싶은데, admob 을 달고 싶을 경우, 아래의 과정을 통해 가능하다.



1. 아직 개발이 완료되어 앱스토어에 올라가지는 않았지만, 광고를 달아주기 위해서 admob 설정를 할 때, 앱의 Apple ID를 알아야할 필요가 있다.


앱 스토어 등록 전에 앱의 아이튠즈 주소를 알고자 한다면,


애플 개발자 사이트에 로그인을 한 후, iTune Connect 에 가서 prepare for upload 까지만 앱등록을 진행해서 개발중인 앱의 Apple ID 를 얻는다.


이후 정식 등록된 후의 주소는 아래와 같은 모양을 하게 된다.


https://itunes.apple.com/app/id123456789?mt=8


이제 admob 쪽으로 가보자.


www.admob.com 가서 adMob 회원가입부터 한다. 이건 머 그냥 가입이니까 검색을 통해서 해결하기 바란다.


[사이트 및 앱] 으로 가서 앱을 추가한 후, 안내해주는 링크를 통해 sdk 를 다운로드 받는다.


히안한게.. 구글개발자 사이트에 sdk가 더 최신이다. 현재 6.8.0이다.

아래 사이트를 이용해도 되겠다.


https://developers.google.com/mobile-ads-sdk/docs/?hl=ko#ios


다운받아서 적당한 곳에 압축을 해제해 두자.


이제 Xcode에서의 작업이다.


작업중인 xcode 프로젝트에 헤더파일들과 libGoogleAdMobAds.a 를 추가한다. 아래 선택한 파일들 모두 추가하면 되겠다.



그리고, Build Phases > Link Binary With Libraries 에 가서 아래 프레임워크들이 포함되어있는지 확인하고 없으면 추가한다.


  • AdSupport
  • AudioToolbox
  • AVFoundation
  • CoreGraphics
  • MessageUI
  • StoreKit
  • SystemConfiguration


Build Settings > Linking 가서

Other Linker Flags 에 -ObjC 를 추가한다.


여기까지 해서 빌드가 오류없이 되어야한다.


이제 소스 작업이다.


AppController.h 

헤더파일 추가해주고 델리게이트를 추가한다. 광고가 뜰 뷰도 멤버 변수로 만들어둔다.


#import <UIKit/UIKit.h>


#import "GADBannerView.h"


@class RootViewController;


@interface AppController : NSObject <UIApplicationDelegate, GADBannerViewDelegate> {

    UIWindow *window;

    RootViewController    *viewController;

    GADBannerView* bannerView_;

}


@end





AppController.mm

didFinishLaunchingWithOptions() 함수 내의 아래쯤에다가 빨간 색으로 표시된 코드를 작성해준다.


[[UIApplication sharedApplication] setStatusBarHidden:true];

    

    //-> admob

    

    bannerView_ = [[GADBannerView alloc] initWithAdSize:kGADAdSizeBanner];

    bannerView_.delegate = self;

    bannerView_.adUnitID = @"YOUR_ID";

    

    bannerView_.rootViewController = viewController;

    [viewController.view addSubview:bannerView_];

    

    GADRequest* adRequest = [GADRequest request];

    [bannerView_ loadRequest:adRequest];

    

    //<- admob


bannerView_adUnitID 부분에 넣을 YOUR_ID 는...


애드몹 사이트에 가서 [사이트 및 앱] 클릭!

추가되어 있는 앱의 이름 아래에 [설정관리] 클릭하면, 게시자 ID 가 보인다. 그 값을 입력해주면 된다.


















Posted by 똑똑한 영장류


iOS 7 이 가을쯤에 정식으로 나올 것으로 예상되는 가운데, 앞으로 제작할 앱에서는 어느 버전부터 지원을 할 것인가도 개발자로서 중요한 문제이다.


구글에서 ios statistics version 이라고 검색하면, iOS 버전별 점유율을 살펴볼 수 있다.


아래 링크의 기사도 괜찮다.

http://www.imore.com/ios-6-used-93-ios-customers


2013년 상반기의 결과를 살펴보면, 90% 이상이 6.0 이상을 사용하고 있다.


아이폰 사용자들은 새로운 버전이 나오면 그때그때 업그레이드를 잘 하는 편이다.



이제 곧 7 이 나오게 되면 많은 수가 7 로 업그레이드를 할 것이다.


업그레이드에 게으른? 사용자가 10% 정도라고 생각하면 될라나? ㅋㅋ


지금 개발한다면, 6.0 이상부터 지원하도록 개발하는 것이 효과적일 것 같다.

하위버전을 지원하기 위한 고민도 줄어들것이고...


하지만,... 7이 나오면 다시 세상은 격변할 것이다.


아~~~



'앱 개발 - iOS' 카테고리의 다른 글

Xcode 5 temp directory  (0) 2013.12.26
iOS 7 개발을 위한 준비  (0) 2013.09.20
어느 버전부터 지원하면 좋을까  (0) 2013.08.02
개발환경 점검  (0) 2013.07.02
돌아온 탕자  (0) 2013.07.02
[iOS] Core Data 사용할 때, sqlite 파일 위치  (0) 2012.04.24


Posted by 똑똑한 영장류