SSL에서 팝업 혹은 비SSL 페이지로 넘길때 리퍼러 처리

SSL에서 팝업이나 비 SSL 페이지로 넘길때 원래는 리퍼러가 안넘어간다.

하지만 아래와 같이 메타에 리퍼러를 정의하면 값을 사용할 수 있다.

 

NGINX에서의 REMOTE_ADDR 오류 이슈

NGINX에서 캐시서버를 타면 동일 IP를 두개를 연결지어 가져오는 오류로 이로 인해 IP를 제대로 인식하지 못한다.

NGINX 서버에서의 가져온 IP 값

정상적으로 가져온 IP 값

 

위와 같은 케이스가 생길 수 있기에

반드시 getRemoteAddress 메소드에서 아래와 같이 처리를 같이 해줘야 한다.

 

삼성 갤럭시에서 특수문자에 css 효과가 안먹는 증상

다음과 같이 리뷰 rating 기능을 개발 중

가급적 이미지는 사용하지 않기 위해 특수문자를 사용했습니다.

그랬더니 유독 Android kitkat 4.4을 OS로 사용하는 삼성의 갤럭시 기기들만 다음과 같이 보입니다.

sQybc

이곳에는 어떤 CSS 효과도 적용되지 않았습니다.

결국 전 이미지를 사용하긴 했지만 여기저기 찾아보니 아래와 같이

[box type=”info”] /system/fonts/NotoColorEmoji.ttf[/box]

삼성의 기본 이모지 폰트를 안드로이드 기본 emoji 폰트로 대체하고 해결되었다 합니다.

자세한 내용은 이곳을 보시면 확인이 가능합니다.

http://forum.xda-developers.com/showthread.php?t=2618523

 

다른 대안으로 fontawesome이나 추가적으로 iconmoon과 같은 대체 폰트를 이용해서 해결 하는 방법도 있으니 참고하시면 됩니다.

 

HTML:

 

CSS:

iOS8 + iPhone6에서 푸시 안되는 증상

remotePush 등록하는 부분에 다음과 같이 iOS8 대응 코드 추가

appDelegate.m내 다음 딜리게이트 처리

APNS 따라하기 시리즈 (iOS 구성하기)

앱단 개발 개요

앱에서 해줘야 할 일은 앱을 실행한 디바이스의 정보를 3rt Party 서버와 통신해 DeviceToken과 UUID 그리고 사용자 정보를 던져주면 됩니다.
해당기기로 접근할 수 있는 키(열쇠)라고 생각하시면 되며, 이외의 모든 일은 iOS와 APNS서버가 알아서 해줍니다.

 

아이폰/아이패드 개발 코드

코드 작성은 크게 4가지 메서드에서 처리하게 됩니다.

  1. 원격 알림서비스를 iOS에 등록해야 합니다. 등록 성공/실패시 2,3번을 각각 실행합니다.
  2. 앱을 실행시 사용자가 알림서비스를 승인하면 서버로 디바이스 토큰을 보내야 합니다.
  3. 앱을 실행시 알림서비스 등록에 실패하는 경우 로직을 구현합니다.
  4. 메시지를 수신했을 때 처리하는 로직을 구현합니다.

이렇게 구현하면 기본적인 구현 절차는 끝나게 됩니다.
앱에 따라서 처리하는 방식이 달라지는 부분은 주로 2번과 4번이 될 것입니다.
예를 들면 메시지 보낼때 참고할 다른 정보를 보내거나, 메시지를 수신하면 앱내의 특정 부분으로 이동해서 해당 내용을 보여주려고 하실텐데 그런 부분들이라고 생각하시면 됩니다.

그럼 작성해야 할 개발코드를 알아보도록 하겠습니다.
위에서도 언급했다시피 EasyAPNS를 이용해 구현하는 것이니 참고하시기 바랍니다.

우선 (BOOL)application:didFinishLaunchingWithOptions: 메서드에서 원격 푸시 서비스를 하겠다고 등록을 해야 합니다.
이것을 작성함으로써 처음 앱 실행시 푸시알림 메시지를 받겠냐고 물어보는 Alert창이 나타나게 되며, 이 절차를 통해 iOS에게 이 앱이 원격 푸시 서비스를 등록하겠다고 알리는 것입니다. 이렇게만 해주시면 APNS서버에서 메시지를 수신하는 처리는 iOS가 알아서 처리해 앱으로 통보해줍니다.

 

사용자가 푸시를 받겠다고 승인하면 (void)application:didRegisterForRemoteNotificationsWithDeviceToken: 메서드가 실행됩니다.
이때, 우리는 일전에 만들었던 서버단으로 UUID와 deviceToken을 보내 정보를 보관하고 있어야 합니다.
deviceToken은 어떤 앱인지와 어떤 디바이스인지의 조합으로 구성되어진 64개의 바이트 조합입니다.
여기서 UUID와 Token은 사용자의 동의를 얻은 후 외부로 보내져야만 하며 이를 어길시 리젝사유가 될 수 있음을 참고하시기 바랍니다.
deviceToken정보는 EasyAPNS로 구현되어진 서버단의 특정 URL로  정보를 담아 전송해주기만 하면 EasyAPNS가 Device정보를 데이터베이스에 저장해줄 것 입니다.

aps_binary_provider_2

Notification Format

여기서 DeviceToken만 저장해서 보내주면 되지~ 왜? 오만 잡다한 정보도 저장해야하는지 궁금하지 않으세요?
이는 해당 디바이스에서 어떤 설정을 갖고 있는지 알 수 있는 방법이 없어서 입니다. 현재 앱을 설치한 사용자가 배지설정을 켰는지 껐는지 사운드는 켰는지 껐는지를 보내는 쪽에서도 체크를 해야 합니다. 물론 애플에서 해당 디바이스의 정보를 가져올 수 있는 피드백이라는 기능을 제공하고 있긴 하지만 번거로운 작업인 것은 분명합니다. 만약 정보체크를 소홀히 하신다면 해당 사용자가 알림센터 기능을 끄더라도 메시지는 날아갑니다. 이점 반드시 참고하여주시고, 또하나 메서드를 살펴보면 NSData로 DeviceToken값을 넘겨주는데 이는 퍼포먼스때문에 컴퓨터가 좋아하는 바이너리 포맷으로 전달됩니다. 위의 그림에 다 나와있는 내용이니 참고하세요!
자 그럼, 아래와 같이 작성해서 처리를 완료해주시면 됩니다.

 

아래는 등록하다가 실패하는 경우 사용되는 딜리게이트입니다.
간혹 APNS등록해서 잘 사용하다가 Provisioning, Certification, AppID의 내용을 하나라도 수정하시는 경우 에러가 나타날 수 있습니다.
혹 안되실때 이런부분을 찾아보시기 바랍니다.

 

이제 여러분들이 가장 많이 손봐야할 딜리게이트 코드 입니다. 이곳으로 NSDictionary 형태로 메시지정보가 던져지게 됩니다.
그걸 받아서 원하는데로 처리하시면 되겠습니다.
아래는 기본적인 형태로 앱이 실행되지 않을때 경고창을 띄워 알려주는 역할하도록 따로 작성하고 그게 아닌 경우 로그만 찍히게 해봤습니다.
추후 저는 URL을 받아서 해당 URL로 강제이동되게 할 예정입니다.

 

자! 지금까지 iOS의 Application Delegate상에 코드 작성하는 것을 보셨는데요~!

여기서는 EasyAPNS를 사용해 프로바이더(서버)를 구성할 계획이므로 이와 같이 참고하시면 되겠습니다.
서버로 던져주는 인자값들은 EasyAPNS에서 정해진 그대로를 사용한 것입니다.
참고적으로 꼭 정해진 인자값만 보내실 필요는 절대 없다는 점 알아두시기 바라며, 가장 중요한 것은 deviceToken값만 있으면 전송에는 문제가 없습니다.

하지만 하이브리드로 작업하시는 경우 Device의 Unique한 값을 찾느라 고민하실 수 있습니다.
이는 키체인을 이용해서 DEVICE UID를 저장해서 쓰시기 바랍니다.
앱을 삭제했다 다시 설치해도 해당 UID값을 계속해서 쓸 수 있습니다.

참고로 안드로이드는 시리얼을 이용하시면 되겠습니다.

다음은 EasyAPNS을 이용해 프로바이더를 구성하는 법을 소개해드리겠습니다.

 

 Generate Hills of glory Ammo

 

APNS관련 포스팅 보기

하나의 주소로 아이폰/안드로이드 앱 다운로드 하기

앱을 만들어서 배포했는데, 간혹 마케팅을 위해 다운로드 URL이 필요할 때가 있습니다.
특히 안드로이드와 아이폰앱 둘 다 배포해서 서비스 하는 경우는 더욱 더 하나의 URL이 효과적이죠!
그래서, 만들어봤습니다. 원리는 간단합니다.

저희 서버에 download.php라는 파일을 작성해서 링크를 걸고 해당 파일을 호출하면,
기기에 따라 알아서 플레이스토어든 앱스토어로 자동 이동됩니다.

mskv9n1eb9647ii

저의 경우 ShortURL을 활용해서 해당 주소를 http://is.gd/godoapp 과 같은 주소로 줄여서 사용하고 있습니다.
덕분에 해당 주소를 클릭하는 횟수 정보도 해당 ShortURL 서비스 사이트를 통해서 확인할 수 있습니다.

자신의 스마트폰 브라우저에서 http://is.gd/godoapp 이 링크를 쳐서 확인해보세요!
바로 앱스토어로 이동합니다.

 

<모바일 검색용 라이브러리>

 

<실 다운로드 링크 파일>pantai indrayanti

 

iOS8 UITableView의 EdgeInset이 안먹는 경우

iOS7에서는 separatorInset을 UIEdgeInsetsZero로 주면 테이블뷰의 separator 라인의 마진이 없어졌었다.

하지만 iOS8에서는 separatorInset이 아닌 layoutMargin으로 바뀌었다.

테이블뷰에서 직접설정하면 되지만 커스텀 셀을 사용하는 경우 cell에 layoutMargin처리를 해야 제대로 동작한다.

 

하지만, 커스텀 셀이 많은 경우 테이블뷰의 willDisplayCell 딜리게이트를 이용해 다음과 같이 처리하면 보다 적은양의 코드로 처리가 가능하다.

 

-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {

    if ([tableView respondsToSelector:@selector(setSeparatorInset:)]) {

        [tableView setSeparatorInset:UIEdgeInsetsZero];

    }

    

    if ([tableView respondsToSelector:@selector(setLayoutMargins:)]) {

        [tableView setLayoutMargins:UIEdgeInsetsZero];

    }

    

    if ([cell respondsToSelector:@selector(setLayoutMargins:)]) {

        [cell setLayoutMargins:UIEdgeInsetsZero];

    }

}

 

 

네이버 신디케이션 워드프레스 플러그인

네이버 신디케이션 플러그인

[button link=”http://wordpress.org/plugins/naver-syndication” type=”big” newwindow=”yes”] 플러그인 다운로드[/button]

 

주요기능

  1. 관리자내에서 컨텐츠의 타입(web, blog) 중 선택할 수 있음
  2. Permalink를 사용 중인 사이트만 사용 가능
  3. 사이트 상태를 체크

 

추후지원

  1. 컨텐츠의 복구/삭제시 신디케이션 기능 지원
  2. 카테고리 등록일자 지원 (대안 마련 필요)
  3. 기능 작동 위주로 만들어져 추후 코드 정리 필요
  4. 사용자 정의된 post_type에 대한 지원이 안됨 (현재 post만 지원)

 

각 신디케이션 XML 문서 목록

  1. http://qnibus.com/syndi/syndi_echo.php?id=tag:qnibus.com,2014:site&type=site (사이트 정보)
  2. http://qnibus.com/syndi/syndi_echo.php?id=tag:qnibus.com,2014:site&type=channel (채널 목록)
  3. http://qnibus.com/syndi/syndi_echo.php?id=tag:qnibus.com,2014:site&type=article (문서 목록)
  4. http://qnibus.com/syndi/syndi_echo.php?id=tag:qnibus.com,2014:site&type=deleted (삭제된 문서 목록)
  5. http://qnibus.com/syndi/syndi_echo.php?id=tag:qnibus.com,2014:channel:1&type=channel (특정 채널 정보)
  6. http://qnibus.com/syndi/syndi_echo.php?id=tag:qnibus.com,2014:channel:1&type=article (특정 채널내 문서 목록)
  7. http://qnibus.com/syndi/syndi_echo.php?id=tag:qnibus.com,2014:channel&type=deleted (삭제 채널 목록)
  8. http://qnibus.com/syndi/syndi_echo.php?id=tag:qnibus.com,2014:article:1-5081&type=article  (특정문서 정보)

기타 max-entry, page, start-time, end-time 등의 변수를 이용한 검색시 해당 정보 출력 가능

 

핑이 전송되는 시점

  • Post의 등록
  • Post의 수정
  • Post의 삭제
  • 카테고리의 등록
  • 카테고리의 수정
  • 카테고리의 삭제

 

유의사항

  1. 포스트 등록 및 수정을 하면 3분 이내에 사이트 상태가 standby로 변경됨
  2. 사이트에 따라 네이버에서 승인을 해주는 경우와 안해주는 경우가 있음
  3. https://help.naver.com/support/contents/contents.nhn?serviceNo=606&categoryNo=2017

 

워드프레스를 위한 다음뉴스 플러그인

스크린샷 2014-06-02 오후 8.57.29

다음뷰가 올해안에 없어질 예정이고, 그런 정책이 나오면서 다음뉴스 송고 API도 방식이 변경되었습니다.
이에 따라 워드프레스의 컨텐츠를 원하는 뉴스채널로 송고해주는 API를 워드프레스 플러그인으로 개발하게 되었습니다.

죄송하지만 무료는 아니구요!
필요하신 분께서는 qnibus@me.com 으로 문의 주시면 성심성의껏 답변드리겠습니다.

단, 뉴스검색제휴는 위 그림과 같이 가입할 수 있는 매체가 제한적이기 때문에 사용하기전 반드시 입점가능 여부를 타진하고 문의주세요!

 

플러그인 소개

그럼 간단하게 플러그인에 대해 소개해드리겠습니다.
다음뉴스 송고 API 방식은 이번에 변경되면서 많이 간결해졌습니다.

다음뉴스 송고 API의 방식은 간단합니다.

이미지태그를 display: none 시켜 보이지 않게 하고 링크는 다음뉴스를 향하고 변수값으로 xml링크와 원문링크 그리고 채널을 적어서 넘겨주면 끝입니다.
하지만, 어뷰징때문에 그런지 몰라도 굉장히 세세하게 따지는 조건들이 몇가지 있으며, 조건들을 지키지 못할 경우 다음측에 의해 강제로 제휴종료가 될 수도 있습니다. 하지만 본 플러그인은 프로그램단에서 사용자가 실수 할 수 있는 부분들은  제거함으로써 불필요한 경고를 최소화할 수 있기에 좀더 안심하고 사용하실 수 있으리라 생각합니다.

 

XML 샘플

실질적으로 해당 포스트의 XML만 구현해서 <img>태그에 해당 경로를 지정해주기만 하면 됩니다.
XML은 다음과 같이 다음뉴스 송고API에서 지정한 양식대로 출력이 됩니다.

http://qnibus.com/daum/1

현재 샘플로만 해놔서 정확하게 보이진 않지만 모든 내용은 포스트에서 추출되어 자동으로 기입되어집니다.

 

포스트 작성화면

스크린샷 2014-05-25 오후 3.27.12  스크린샷 2014-05-25 오후 3.34.00

 

기존에 제가 개발했던 다음뷰 플러그인과 사용방법은 유사합니다.
포스트 등록시 자동으로 되게 할 수 있으니 조건상 한번 뉴스검색제휴 서버와 연결되고 나면 더이상 해당 문서를 수집하지 않기때문에 실수가 발생할 수 있습니다. 이에 따라 글을 작성하고 필요할 때 송고할 수 있도록 개발되었습니다.
더불어 뉴스를 송고하시면 10분내에 검색엔진에 반영됩니다.

현재 인더스트리얼솔루션이라는 산업솔루션 뉴스매체에서 본 플러그인을 활용하고 있으며,
피드백을 통해 불필요한 부분들은 제거하고 필요한 부분들은 추가해 안정화시키고 있습니다.

관심있으시면 불편해하지 마시고 메일이나 댓글로 문의주시기 바랍니다.

앱 통계를 내 사이트에서 수집하기

스크린샷 2014-02-09 오후 11.35.26

 

프롤로그

모바일 앱을 보유하고 있다면 누구나 한번쯤 다운로드 혹은 리뷰 데이터를 한곳에 수집해서 보고 싶어했으리라 생각합니다.

2년전 회사에서 이런 요구가 있었고 이를 사내 사이트에 구현했던 일이 어렴풋이 기억납니다.
그때는 API가 따로 없어서 rss피드와 국가코드, 카테고리 정보등을 별도로 수집해서 사용했었는데요!
이제는 그렇게 하지 않아도 됩니다.

앱애니(AppAnnie)라고 하는 사이트에서 올 초부터 API를 지원하기 시작했기 때문입니다.
전 이것만 기다리고 있었는데, 마침 나와줘서 다운로드 통계 수집을 자동화시킬 수 있었습니다.

앱애니의 통계는 초기 아이폰만 수집해줬었는데요, 간만에 들어가보니 안드로이드는 물론 아마존의 다운로드 통계를 제공해주더군요!
앱애니에서 제공해주는 API는 생각보다 효율적이고 대단히 고마운 API라고 생각합니다.

다만,제약조건이 일일 1,000회, 분당 30회로 제약이 되어있긴 하지만, 앱 10개정도 보유하고 있다면 이정도로 충분합니다.
그럼 어떤 종류의 API를 제공하는지 알아보겠습니다.

 

지원하는 API의 종류

  1. Account Connection Sales
  2. App Sales
  3. App Ranks
  4. App Reviews
  5. App Ratings
  6. App Features
  7. App Details
  8. Platform List
  9. Country List
  10. Category List
  11. Currency
  12. Account Connections List
  13. Account Connection App List
  14. App IAP List
  15. Shared Apps List

이렇게 총 15가지를 지원하고 있습니다.
왠만한 필요한 정보들은 다 가져올 수 있습니다.
다음은 API를 신청하기 위한 절차에 대해 간략하게 나열해보겠습니다.

 

API신청 절차

  1. appannie.com 에서 회원가입을 한 후 로그인한다.
  2. 애플, 구글, 아마존 접속 계정으로 로그인해 통계 데이터 수집에 동의한다.
  3. 위의 단계로 appannie에서 자동으로 앱 데이터를 수집합니다.
  4. 그럼 https://www.appannie.com/account/api/key/ 여기서 API키를 발급받습니다.
  5. http://support.appannie.com/categories/20082753-Analytics-API 문서를 보고 개발을 합니다.

귀찮게 Oauth와 같은 인증방식을 요구하지는 않습니다.
다만 header에 Autherization에 API 키만 넣어서 쏴주면 원하는 결과값을 가져옵니다.
요청에 따라 xml과 json으로 선택적으로 받아올 수 있습니다.

 

이용예시

스크린샷 2014-02-09 오후 11.57.52

위 테이블은 API를 이용해 구축해놓은 예시입니다.
물론 테이블의 상단에는 앱별로 선택해서 현재 판매중인 모든 앱에 대해 정보를 조회할 수 있습니다.

여러분도 한번 만들어보세요! ^^