BLOG main image
LEEEJONG (165)
IT (53)
주관적평가 (31)
창작공간 (80)
109,971 Visitors up to today!
Today 5 hit, Yesterday 57 hit
daisy rss
tistory 티스토리 가입하기!
'IT/Android/iOS'에 해당되는 글 14건
2018.01.08 14:15

메시지를 옮겨본다.

Apple의 메시지
  • 5. 1.1 Legal: Privacy - Data Collection and Storage

Guideline 5.1.1 - Legal - Privacy - Data Collection and Storage



We noticed that your app requests the user’s consent to access their location but does not clarify the use of this feature in the permission modal alert.

Please see attached screenshots for details.

Next Steps

To resolve this issue, please revise the permission modal alert to specify why the app is requesting access to the user's location.

Resources

To learn more about requesting the user’s permission to access app features, visit the iOS Human Interface Guidelines. You may also want to review the Technical Q&A QA1937: Resolving the Privacy-Sensitive Data App Rejection page for details on how to provide a usage description for permission request alerts.



프라이버시 - 데이터 수집 및 저장

가이드라인 5.1.1 - 데이터 수집 및 저장

우리는 전에 알려준대로 당신의 앱이 유저의 consent 를 요청할때 (위치) 하지만 명시를 안한다 더 특징 인더 퍼미션 모델 얼럿

플리즈 봐라 보내준 스크린샷을

다음단계

이거 해결하려면 revise the permission model alert to specify why the app is requesting access to the user's location.



왜 이 권한을 쓰는지 설명을 쓰란거다.







Name
Password
Homepage
Secret
2017.12.01 13:19



일단 병신인증글임을 알리고 글을 써본다.


Swift 코드중 foreach정도의 느낌으로 개발하려고 if let을 사용했는데 여기서 일이터졌다. 원문을 적어본다.


if let item : ItemInfo = mInfo.climate_list.object(at: mMonth!-1) as? ItemInfo{ }


이거다


아 써놓고보니 ... 젠장


내가잘못한게 맞네


IntemInfo타입의 item이 있는 경우에. 라고 해석되겠네


스바시바


그럼 여기서 문제부분인


mInfo.climate_list.object(at: mMonth!-1) as? ItemInfo


여기서 죽는건 커버가 안된다는거자나


왜냐면 죽는부분은


.object(at: 12) 였으니까


아....... 놔.....


그럼 진짜로 체크해야될 부분은 climate_list에 12번 아이템이 있는지 여부네!



Name
Password
Homepage
Secret
2017.09.24 16:11

Bless 앱 만들때 사** 형이 ui작업하며 cocoapods를 사용하는것을  봤지만 크게 신경쓰지 않았다.


alamofire라는 플러그인을 사용하는데 cocoapods라는 플러그인 관리 매니저?? 라는게 있구나 하는 정도로 이해하고 넘어갔다.




프론트를 본격적으로 하려고 보니 디자이너와의 협업에 대해 생각하게 되었고


전에 공부했던 


Faceboo keyframes -> https://github.com/facebookincubator/Keyframes

Airbnb Lottie -> https://github.com/airbnb/lottie-ios#introduction


에 관심이 생겼다


근데 키프레임스보다 로티가 좀더 널리 활용되는것으로 보여 좀 공부하려고 찾아보니


이역시 cocoapods로 패키지가 관리되고 있는것으로 파악됐다.


따라서 코코팟즈 사용법을 먼저 정리하고 넘어간다.


https://www.raywenderlich.com/156971/cocoapods-tutorial-swift-getting-started

코코팟즈 사용법은 위 페이지를 보면 상세히 알 수 있다.

나는 다만 한국어로 편하게 요약을 할 뿐이디.



맥 sierra 기준으로 터미널을 열어

> sudo gem install cocoapods 


-> 여기서 gem은 RubyGems is a sophisticated package manager for Ruby.  This is a

루비잼이라는건데 루비로 만든 패키지 매니저 라고 한다.


여튼 install cocoapods를 한 뒤에

    pod setup --verbose
    

팟 셋업을 해주면된다고 한다.


sudo가 필요한건 install cocoapods 할때 뿐인것으로 보인다.



어떤 xcode플러그인이 필요한 경우 cocoapods 셋업을 해주는데 이때 podfile이라는게 사용된다.



Xcode를 종료하고

해당 프로젝트 폴더에 들어가서


pod init을 해주면 podfile이 생성되고

생성된 podfile을 통해 패키지가 관리된다.


필요한 패키지가 있는경우

    pod 'Alamofire', '4.4.0'
    

위와같은 명령어로 dependency를 추가한다.

이건 의존성만 추가되는 명령어 이며

업데이트나 최초 설치할땐

pod isntall / pod update를 추가로 실행해줘야 해당 패키지를 받아서 프로젝트에 넣어주게 된다.



추가된 패키지는

import Alamofire


이런식으로 사용하면 된다.

fileprivate func loadFlavors() {

  // 1
  Alamofire.request(
    "https://www.raywenderlich.com/downloads/Flavors.plist",
    method: .get,
    encoding: PropertyListEncoding(format: .xml, options: 0)).responsePropertyList {
      [weak self] response in

      // 2
      guard let strongSelf = self else { return }

      // 3
      guard response.result.isSuccess,
        let dictionaryArray = response.result.value as? [[String: String]] else {
          return
      }

      // 4
      strongSelf.flavors = strongSelf.flavorFactory.flavors(from: dictionaryArray)

      // 5
      strongSelf.collectionView.reloadData()
      strongSelf.selectFirstFlavor()
  }
}

위와같은 방식으로 사용된다고 한다.



기본개념은 이렇다고 한다.


이제 lottie를 추가하고 사용해보도록 하자.



Name
Password
Homepage
Secret
2017.09.12 16:13



아.. 사이다


사실 지금까지 내가 많이 쫄았던 영역중 하나가 바로 이부분이다.


psd든 뭐든 가져오면 보고 대충 이쁘게 따라서 만드는건 하겠는데

이걸 디자이너가 의도한대로 똑같이 만들어줘야되잖아.



근데 영 그 계산법을 모르겠는거지 게다가 난 자르는법도 잘 모르니까 디자인 나오는거에 대한 부담감이 있었다.


자르는법에 대해서는 전에 옆에 선임님과 책임님이 알려주셔서 많이 정복했고 지난주금욜부터 오늘까지 레이아웃 잡아보면서 배운것들을 정리해본다.


일단 안드로이드는 DP개념을 알고와야된다.


나는 xxhdpi 기준으로 앱을 만들거다


그럼 포토샵에서 px을 구한다음에


> http://limepen.com/6


여기 들어가서 px to dp를 맞춰주면 된다.


일반적으로 px에다가 나누기 3을 하면 보통 dp가 나오는거 같다.




아이폰의 경우에는 내가 개발중인 앱은 아이폰5 기준으로 제작된다.


따라서 아이폰5의 화면비율인 320 x 568 을 맞춰줘야하는데

내가 받은 psd파일은 캔버스 크기가 1080 * 1920 이다.


따라서 그 비율에 맞춰서 사이즈를 계산하면 된다


비례식은 알아서 생각하고


320 / 1080 을 하면 대충 0.29 정도 나온다


따라서 111px인 경우에는 111*0.29 하면 32.19 정도 나오는데 32정도 넣으면 얼추 맞는것 같다.



여튼 이렇게 진행하면 된다


캬 사이다.



글씨부분이 잘 이해가안되서 여쭤보니


똑같이 변환율에 맞추면 된다고 하시네


일단 그렇게 인지하고 넘어가도록 하자




Name
Password
Homepage
Secret
2017.09.05 18:00


Objective C 코드를 보다보니 말도안되는 Syntax가 많이 보인다.


그중 제일 이해안되는 [] 대괄호에 대해 고수분들께 문의했고

오늘 배운것을 정리해본다.


일단 예제소스를 써보자

UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(23,28,258,20) ];



이게 문제의 출발이다

이 말도안되는 소스는 대체 무엇인가

일단 여기서 왼쪽절은 titleLabel이라는 UILabel 포인터 변수를 선언한거다. 여기까지는 소양



우측 UILabel alloc 은 내가 알고있는 객체지향 개념으로는 new라고 보면 된다고 하셨다.

메모리를 할당해야 그 포인터 주소가 나오니까 그걸 alloc (메모리할당) 한거다.


그럼 그렇게 나온 놈한테 initWithFrame을 한거로 봐야한다.


나눠보면

UILabel *titleLabel = [UILabel alloc];

[titleLabel initWithFrame:CGRectMake(23,28,258,20)];


이렇게 나뉘어진다.


그래 위에문장은 그렇다고 치자 뭐 완벽하게 이해되는건 아니지만


그럼 아래문장에 대괄호는 왜친건데?


라고 질문이 출발하니


그에대한 답은 '메시지'의 개념을 이해해야 한다고 하셨다. 그리고 [] 대괄호로 묶는건 인자? 라고 봐야된다고도 하셨다.


titleLabel이라는 놈한테 initWithFrame[] 을 한거다

내가 아는 문법으로 바꾸면

titleLabel.initWithFrame()


이렇게 바꿀수 있다는거다.


CGRectMake()를 해서 나온 사각형을 initWithFrame에 보내고 그걸 할당한 UILabel 포인터변수에 넣은거다.


음.. 정리를 해도 말로 표현이 잘 안되는데 이 그지같은 형태의 근원은


우리가 갖고있는 일반적인 개념으로는 각 객체의 함수를 실행시킨다. 라는 생각을 갖고있는데


C에서는 우린 그 일을 수행할 놈한테 메시지를 보내고, 그 처리는 그쪽에서 알아서 하게 한다... 메시지를 보낸다는 부분이 포인트다.


이게 큰 차이점이라고 한다.


자 결론

[] 대괄호는 파라미터를 보내는거 정도로 기억해라 like ()




그럼 적용을해보자


[self addSubView:mMyVariable];


이놈을 해석하면

self.addSubView(mMyVariable); 


이렇게 되는거다




번외편


- (id)initWithFrame:(CGRect)frame withInfo:(Weather *)info

{

//BlahBlah

return self

}



뭐 이런 함수


젤 위에보면 -가 붙는데

-는 보통 함수같은데 쓰고 가끔보이는 +는 static 함수 같은데 쓰인다고 한다.

대충 난 -만 쓰면 될거같다.


(id)를 리턴하는 initWithFrame함수인데 인자로 CGRect타입의 frame과 withInfo라는이름의 Weather 포인터 info를 받는다.


뭐 이정도로 봐야될거같다.


[]를 할때 변수가 하나만있으면 땡땡이: 콜론 을 생략하는 이상한 요상한 법칙이 있다고 한다.


일단 오늘은 여기까지 정리하고 넘어간다.

Name
Password
Homepage
Secret
2017.09.05 14:02


몇 해 전 iOS앱개발을 시작하면서부터 궁금했던 NSString/ NSLog / NS블라블라 의 정체를 우연히 

Objective C 입문서에서 발견해서 그 내용을 옮겨본다.


이전에 이야기했듯이 오브젝티브씨는 아주 약간 특별한 양념을 친 C와 같기 때문에 원한다면 NSLog대신 printf를 그냥 쓸 수도 있다. 그러나 시간과 날짜가 함께 출력되는 기능이나 새 라인 문자를 자동으로 넣어주는 등 부가적인 기능이 있으니 NSLog를 사용하기를 추천합니다.


NSLOG라는 함수 이름이 좀 낯설게 느껴질 수 있다. 함수 이름의 NS는 무슨 의미일까? 읽더보면 코코아의 모든 함수 상수 타입 이름에  NS가 앞에 붙는 것을 볼 수 있다. 이 접두사는 함수가 다른 툴킷에서 온 것이 아니라 코코아에서 왔다는 것을 알려준다.


이런 접두사는 같은식별자가 두 개의 다른 대상에 쓰일 때 결과적으로 큰 문제가 되는 이름 충돌 (name collisions) 사태를 막는데 도움이 된다. 만일 코코아가 Log()라는 이름의 함수를 가지고 있다면 이를 잘 알지 못하는 프로그래머가 어딘가에서 만든 Log라는 함수와 이름이 충돌할 수 있다. Log함수를 가지고 있는 프로그램이 코코아를 포함하면 XCode는 L:og가 여러번 정의되었다고 투덜댈 것이고 에러가 나타난다.


이제 접두사를 사용하는 것이 왜 좋은지 알게 되었다. 그런데 이번에는 다른 의문이 생길 것이다. 예를 들어, 왜 cocoa를 접두사로 쓰지 않고 NS를 사용했을까?  NS접두사는  이 툴킷이 NextSTEP이라고 불리며 NeXT Software의 제품이었던 때로 거슬러 올라간다. NextSTEP을 위해 이미 작성된 코드와으이 호환을 유지하기 위해 애플은 NS 접두사를 계속 쓰고 있다.

중략


그래서 우리는 여기서 개발할때 접두사로 NS를 써서는 안된다.


출처: 오브젝티브 C 아이폰과 맥 OSX 개발을 위한 / 마크 달림플, 스콧 내스터 지음 / 이종웅, 박세현 옮김 / apress, bj퍼블릭 23페이지


자 요약들어간다.


NS는 NextSTEP 회사이름이고, 걍 스트링 인티저 로그 뭐시기 등등에 NEXTSTEP에서 뭐 추가해서 만든 NS블라블라 클래스가 있고 거기에 추가 기능들이 들어있으니 우리는 그걸 사용한다.

뭐 이런느낌으로 받아들여야 겠다.


걍 내가 인지하는 int string 등은 C의 함수형이라고 이해하고 넘어가야겠다.


이걸읽는 Swift개발자님들 짜증나시죠

그냥 String 을 쓸때 NSStirng으로 치환해서 사용해야한다.. 정도로 외워두고 갑시다.


정리끗

Name
Password
Homepage
Secret
2017.08.28 11:22


오늘 아침에 메일이 한통 날라왔다.



"Your Mac App Distribution will expire in 30 days."


이런메일은 여러번 받아봤다. 애플에 배포 관련된 혹은 푸시 메시지(APNS)에 관련된 인증서들은 유효기간이 1년이라

내가 유지보수하고있는 앱이 몇개되면 저런 류의 메일을 잊을만하면 받게된다.



이거 관련되서 찾다보면 나오게되는


인증서, CSR파일이 뭔지 기억해두려고 로그를 남긴다.


CSR파일이란

Cert Signing Request 의 약자다.

인증서 사인 요청 파일 이란 뜻이다.


인증서는 그 요청의 결과로 '애플'님께서 주시는 문서다.


자 그럼 애플 개발자 페이지 구조는 어떻게 생겼을까.


인증서 페이지에 들어가면 + 버튼이 있다.


걔를 누르면 어떤종류의 인증서를 만들지를 내가 고르고


내가 예쁘게 만든 Cert Signing Request 파일을 업로드하라고 한다.


그럼 그걸 올리고 추가로 내가 할 것들을 좀더 선택하면


애플님이 사인을 해서


인증서 목록에 그 인증서가 보이게 된다.


그러면 거기 Revoke와 Download 버튼이 생기는데


Revoke는 내가 갖고있는 개인키를 잃어버렸다! 이럴때 이 인증서 무효로할게요.... 하는 버튼이고

다운로드를 누르면 인증서 문서 자체가 다운로드된다.




이렇게 받은 인증서를 내 키체인에 등록해서


뭐 앱을 배포할때는 XCode에서 연동되어 스토어 등록하거나 ipa를 떨굴때 사용되고


APNs 인증서라면 이를 서버에서 사용가능한 p12파일 등 형태로 Export해서 (키체인 접근 앱에서 할 수 있다) 사용하게 된다.



자.


그럼 인증서랑 CSR이 뭔지는 잘 알았지.


또 궁금한게 이거 항상 이렇게 재등록밖에 없는거야? 연장은 없어? 


라는 질문인데


없는거같다. 그냥 만료될즘에 다시 등록하는건가보다.







또 갖고있던 질문중 도대체 provisioning profile은 뭐지.. 라는 궁금증이 있었는데


좋은 블로그 정리글이 있어서 소개한다.


> http://beankhan.tistory.com/115


프로비저닝 프로파일을 직역하면 준비용 .. 프로필?? 준비용 개요? 그니까 뭔가 하기위해 필요한것들이 담겨있따...


정도로 봐야될것 같다.


여튼 그래서 그게뭐냐면



애플은 모든 앱이 자신들의 하드웨어 실행될때 적절한 실행권한이 있는지 확인하는데,



개발중인 앱의 경우 이게 애플로부터 인증을 받은 상태가 아니기 때문에


이부분을 개발자에게 위임하게 된다.


애플이 사이닝하는걸 개발자가 사이닝하는것으로 대체하고 이는 개발자 인증서를 통해 이뤄진다.


근데 디바이스입장에서는 얘를 실행도 되는지 모르는거다.


그래서 디바이스에 애플이 사인한 프로비저닝 프로파일을 설치하고 이걸통해 개발자 인증서를 참조하는것으로 우회한다.


설명이 좀 부족해보이는데


자세한내용은 위 언급한 빈칸 님의 블로그를 참조하기 바란다.


이상.

Name
Password
Homepage
Secret
2017.05.16 14:47

회사에서 위 두 단어가 돌길래 찾아본 내용을 공유한다.


안드로이드 인스턴트 앱
줄여서 인스턴트앱은

앱스토어에 들어가서 앱을 다운받지 않아도 즉각적으로(Instantly) 앱을 실행할 수 있다.
추가로 이음새없이 매끄럽게(seamless) 결재와 인증절차를 수행할 수 있다.

한번더 요약하면
개발자가 할일은 없고 설계만 잘하면 구글 플레이스토어가 업그레이드되면서 기존보다 편하게 해줄것이다.


PWA
Progressive Web Application
진보적인 웹 앱
이건 진짜 간단하게 요약하면
"네이티브 앱만큼 강력한 웹앱"

크롬에서 웹페이지 북마크를 안드로이드 앱 서랍에 넣었던것 처럼 간단하게 웹앱을 설치할수있고 이렇게 설치해두면 웹앱주제에 자기혼자 업데이트도 하고 하는 강력한 어플리케이션이 된다.

네이티브처럼 강력한 웹앱.



그렇게 알고있으면 될것같다.
Name
Password
Homepage
Secret
2017.01.23 15:44

최근 서비스 앱을 개발하며 푸시서버를 새로 만들게 되었다.


기존 푸시서버는 PHP 5.4 기반의 어드민툴 서버에서 작성되었기 때문에


몇가지 한계를 갖고 있었다.




첫번째 문제는 기존 APNS 푸시 라이브러리가 보낼수 있는 한글 길이가 무지 짧다는거다.


아래 소스는 내가 원래 쓰던 푸시서버 소스다


function sendMessage( $ssn, $deviceToken, $message ) {
    $payloadFormat = array(
      'aps' => array(
        'alert' => array(
          'title' => $message["title"]
        ),
      ),
      "msg" => $message["msg"],
      "category" => $message["category"],
      "img" => '',
      "link" => $message["link"],
    );

    $payload = json_encode( $payloadFormat );
    $streamContext = stream_context_create();
    stream_context_set_option( $streamContext, 'ssl', 'local_cert', $this->apnsCert[$this->isDev][$ssn] );

    $apns = stream_socket_client( 'ssl://'.$this->apnsHost[$this->isDev].':2195', $error, $errorString, 2, STREAM_CLIENT_CONNECT, $streamContext );

    if ( $apns ) {
      $apnsMessage = chr( 0 ).chr( 0 ).chr( 32 ).pack( 'H*', str_replace( ' ', '', $deviceToken ) ).chr( 0 ).chr( strlen( $payload ) ).$payload;
      fwrite( $apns, $apnsMessage );
      fclose( $apns );
      return true;
    }
    else {
      error( $errorString );
    }
  }



> http://stackoverflow.com/questions/34684099/new-apns-provider-api-and-php






우리 SE의 말> .. APNS2 사용하려면 결국 http2 프로토콜을 써야 하는건데.. 이거 php5.5.24 이상 버전에 curl, openssl 둘다 버전이 올라가야 하는거네요;;

혹시이거..  해당 서버에서  하셔야 하는건가요..?


-----------------------------------------------------------------------------------


여기까지쓰고 글을 더 안썼네


여튼 이걸 해결하기 위해 OS 단계에서 curl, openssl 최신버전이 필요했는데


회사에서 운용중인 OS 이미지에 해당 버전이 적용되어있지 않아서

서버 업데이트로 해당사항을 구현하는데 실패했다.




그래서 Node로 짜보자 하고 구현해보니

node-apn, node-fcm 두가지 패키지를 이용함으로서 간단하게 구현이 가능했다.



구조는 위 사진과 같다.


여튼 이런식으로 푸시 메시지 예약전송 시스템을 구현했다.


이상 전달끝.


Name
Password
Homepage
Secret
2015.08.24 20:18

NHN에서는 네이버 아이디로 로그인하는 API를 제공한다.

https://nid.naver.com/devcenter/main.nhn


내가만드는 앱은 네이버 채널링 로그인을 지원해야하기 때문에 반드시 네이버 연동이 필요했다.


내가 했던 뻘짓을 생각하니 분노가 치밀어올라서 미리 적어두기로 한다.

친절하게 설명하겠다.


1. https://nid.naver.com/devcenter/docs.nhn?menu=IOS 여기 들어가서 iOS용 라이브러리를 받는다

본인은 4.1.4 버전과 4.1.4-sample을 다운로드 받았다.



라이브러리를 까보면 ThirdpartyModule 폴더가 있다.여기있는걸 내 프로젝트에 넣어야한다.




여기있는것들은 하나빼고 다 폴더 있던것들이다.

그 뭐냐 넣을때 필요하면 복사하기 체크박스 있는데 그거 꼭 체크한다.


제일밑에 askerMagicbox-Bridging-Header.h 가 보이는데


여기서 내 고통이 시작된다.


Swift에서 오브젝티브 씨를 사용하려면 적당히 알아먹도록 설정을 해줘야하는데 그게 브릿징 헤더라는거다.


요거를 만들어서



저렇게 임포트 해주면 저 네이버 써드파티 로그인 라이브러리를 사용할 수 있는거다.


근데 저파일을 만드는법을 배워야되는데

좀 짱난다



새파일 만들기를 하면서 오브젝티브 씨 파일을 하나 만들면 브릿징 헤더를 만들겠냐고 물어볼텐데 그때 잽싸게 오케 눌르면 저 파일을 만들어준다.


뭐 구글링해보니 뭐 이래저래 만드는법이 있으니 뭐 맘대로 만들면 된다. 여튼 저게 있어야된다.


'생각해보니 코드는 걍 써줘야 긁어가기 편하겠지?

 func naverLogin(viewController:UIViewController){

        

        var thirdConn = NaverThirdPartyLoginConnection.getSharedInstance()

        thirdConn.setOnlyPortraitSupportInIphone(true)

        thirdConn.isNaverAppOauthEnable = false

        thirdConn.isInAppOauthEnable = true

        thirdConn.appName = kServiceAppName

        thirdConn.serviceUrlScheme = kServiceAppUrlScheme

        thirdConn.consumerKey = kConsumerKey

        thirdConn.consumerSecret = kConsumerSecret

        thirdConn.delegate = self

        

        loginViewController = viewController

        let preferences = NSUserDefaults.standardUserDefaults()


        preferences.setBool(true, forKey: "isNaverLogin")

        preferences.synchronize()

        

        

        let tlogin = NaverThirdPartyLoginConnection.getSharedInstance()

        tlogin.requestThirdPartyLogin()


    }


사용설명서를 보면 인스턴스를 만들어서 몇가지 설정을 해주라고 써있다.

근데 내가  오브젝티브  씨 신텍스를 알턱이 있나.


저렇게 인스턴스 만들고 하면 된다.


그밖에 설명서보면 인앱브라우저 확인버튼 뭐 어쩌구 설정하는거 있는데


그건 대충 해보면 된다.



BlogIcon 리쫑v | 2015.08.25 18:23 신고 | PERMALINK | EDIT/DEL | REPLY
ctrl=getDailyInfo&access_token=Gqy08JaZCX9cwYVkzm9M0Xf0F8O9M2mH3SKE3GJPL24Y6X4x_W1i13ayVG0nqQn6qWaylWAZdb_s37NWKzvWKzFrdTZzOGQ2dHJzZzI0MGJlaTB4ZGRxYzc5d3FreHhs&ssid=JMcx3dV3YmGQFOg6sX5HBBKLvx78VDWJJlrE1tTpN8tldGlqazNpODI3:Y20gDvLJ74QEIKeinJ4VuXM6nfTQQhLAqcpqW5UEawqdmqFHeWoncY203_ElxD96AynKxz9f4uzo8nHxGTpGzA
BlogIcon 리쫑v | 2015.08.25 18:26 신고 | PERMALINK | EDIT/DEL | REPLY
ctrl=getDailyInfo&access_token=_gH2NKg-4Tc6G71rdOxB5W-2XZt6HUAXUR-7pQC2ZJJRy4cBtsyEF_2TD90w0VNPQLPt7rffe7nVUYScgDfSsjZmdG91azc3ZDlvNGZldjJubXk0a2w2bG9haWd5bjhl&ssid=QT8Y1CzHyCA8MzZ33dNXpIkriIX-JZkBy5vYLLfeNGloNG0zMjM5eTg4:h8X3rhdoXwbV7SwhrqzZYfa85kg9Ot7QZRjzE_KU0NBZXU_fh_hy55YJqbbSwrq06g2NZRQjTUzS40hc4RwtZA
BlogIcon 리쫑v | 2015.08.25 18:31 신고 | PERMALINK | EDIT/DEL | REPLY
{
"item_list" = (
{
name = "\Uace0\Uae09 \Uc2a4\Ud0dc\Ubbf8\Ub108 \Ud68c\Ubcf5 \Ubb3c\Uc57d";
"reward_id" = 100385;
"reward_value" = 3;
},
{
name = "\Ud574\Ud53c \Ub9ac\Uc6cc\Ub4dc - \Ubd80\Ud65c\Uc758 \Ucf54\Uc778";
"reward_id" = 8400011;
"reward_value" = 2;
},
{
name = "\Ubcf4\Uae09\Ud488 - 1\Ub9cc\Uace8\Ub4dc";
"reward_id" = 8400027;
"reward_value" = 1;
}
);
result = OK;
"reward_id" = 100385;
"reward_value" = 3;
}
BlogIcon 리쫑v | 2015.08.25 18:35 신고 | PERMALINK | EDIT/DEL | REPLY
{
result = OK;
}
BlogIcon 리쫑v | 2015.08.28 16:27 신고 | PERMALINK | EDIT/DEL | REPLY
a8d86e9bc7cbb563586e6e883710f044bfcf7d14
pening | 2016.10.14 10:28 신고 | PERMALINK | EDIT/DEL | REPLY
감사히 잘 썼습니다 많은 도움이 됐어요~
Name
Password
Homepage
Secret
prev"" #1 #2 next

티스토리 툴바