2013-03-24 6 views
23

우리는 완전히 고물났습니다. 제발 도와주세요.사과 푸시 알림이 프로덕션 환경에서 작동하지 않습니다.

본인과 팀원이 iPhone 응용 프로그램을 만들었으며, iOS를 처음 시도합니다.

우리의 앱을 제출하고 app-store에서 사용할 수있게 될 때까지 모든 것이 정상입니다. 푸시 알림 서비스가 작동하지 않습니다. 웹에서 검색 한 후 사람들의 조언을 통해 앱에 대한 이중 체크를 시도했지만 잘못된 정보를 찾을 수 없었습니다. 그래서이 질문은 여기에 게시됩니다.

이들은

우리가 무슨 짓을했는지 있습니다 :

우리는 응용 프로그램을 빌드
  1. , 그것은 "AppMaster"라는 것 같아요.

  2. iOS 프로비저닝 포털에서 AppId를 생성했습니다 : "pushtest". 이 ID는 개발 및 프로덕션 모두에서 푸시 알림을 활성화했습니다.

  3. 위의 appId에서 "AppMasterPushTest"라는 개발 용 프로비저닝을 만들었습니다. 이 프로비저닝은 내부 테스트 용으로, 팀원 모두가 Mac에 설치했습니다.

  4. 우리 서버는 Java로 구현되었으며 java-apn 패키지를 사용했습니다. 테스트 도중 개발 용 인증 파일을 다운로드하고 .p12 파일을 작성한 다음 패키지의 api - withSandboxDestination()에 해당 .p12 파일을 사용하여 "sandbox"서버에 메시지를 보냈습니다. 테스트가 잘 진행되고 알림이 수신됩니다.

  5. 나는 우리가 "AppMaster"라고하는 또 다른 AppId를 만들었고 제작을 위해서만 푸시 알림을 사용할 수 있다고 생각했습니다. 이 ID는 앱의 번들 식별자에 기록됩니다.

  6. "App Store"로 설정된 배포 방법으로 5 단계에서 AppId에서 "appMaster"라는 프로덕션을위한 다른 프로비저닝을 만들었습니다. 그것을 다운로드하고 응용 프로그램을 다시 작성하십시오. 이것은 사과에 제출되었고 app-stroe에서 살아납니다.

  7. 서버 측에서 프로덕션 용으로 인증을 다운로드하고 .p12 파일을 다시 작성합니다. .p12가 방금 작성된 api - withProductionDestination()을 사용하여 프로덕션 서버로 메시지를 푸시하도록 프로그램을 만들었습니다.

  8. 앱 스토어에서 앱을 설치했습니다. 슬프게도 그 통보는 전달되지 않았습니다.

뭔가 빠졌습니까? BTW, 5 단계에서 생성 한 ID는 "XXX.com.company.appname"과 유사하지만 앱의 번들 식별자에서 접두어없이 "com.company.appname"부분 만 설정합니다. 이것이 문제가 될 수 있습니까?

어떤 아이디어라도 환영합니다.

제발 우리의 보호자하십시오. 감사.

+1

당신이 직접 말했습니다. 푸시 앱 ID와 실제 번들 ID는 동일해야합니다. 인증서에 문제가있을 수도 있습니다. 주 배포 인증서와 푸시 인증서가 동일한 SSH RSA 키 쌍으로 서명되었는지 확인하십시오. –

+0

.p12 파일에서 pem 파일을 만든 다음 PHP를 통해 파일 전송을 시도해 볼 수 있습니까? 여기에 링크가 있습니다 - http://www.raywenderlich.com/3443/apple-push-notification-services-tutorial-part-12 –

+0

감사합니다. 앱 ID에 대해서, 나는 Eran이 옳았다 고 생각한다. 우리 서버는 순수한 자바이기 때문에 PHP를 추가하기에는 너무 많은 작업이 필요합니다. –

답변

28

위의 설명이 잘못되었습니다. 응용 프로그램 ID는 번들 ID 앞에 접두사가 있습니다

응용 프로그램 ID는 애플에 의해 생성 된 10 자리 코드로 시작하는 응용 프로그램의 번들 ID로 구성되어 있습니다. 팀 관리자는 번들 ID를 입력해야합니다.인증서의 경우 특정 번들 ID를 사용해야합니다. "와일드 카드"응용 프로그램 ID를 사용할 수 없습니다.

당신은 올바른 APS 자격이 포함되어 있는지 확인, 프로비저닝 프로파일을 확인해야합니다 :

가 프로비저닝 프로파일 파일에 자격이 올바른지 확인합니다. 이렇게하려면 텍스트 편집기에서 .mobileprovision 파일을 엽니 다. 파일의 내용은 XML로 구성되어 있습니다. 인 타이틀먼트 사전에서 aps- 환경 키를 찾으십시오. 프로비저닝 프로파일을 개발할 때이 키의 문자열 값은 이어야합니다. 분배 프로비저닝 프로파일의 경우 문자열 값 은 이어야합니다.

프로덕션 APNS 서버에 푸시 알림 (생산 ENV에서 작동하지 않습니다 샌드 박스 환경에서 작동하는 장치 토큰)를 보낼 때 생산 장치 토큰을 사용하고 있는지 확인해야한다.

앱 스토어에 앱을 출시하기 전에 AdHoc 프로비저닝 프로파일로 앱을 테스트 했어야합니다. AdHoc 프로파일은 프로덕션 푸시 환경에서 작동합니다.

편집 :

일부 인용에 대한 장치 토큰 다음 Local and Push Notification Programming Guide에서

:

를 적어 둡니다 그 개발 생산 환경에서 디바이스 토큰과 장치 토큰 (샌드 박스) 환경이 동일한 값이 아닙니다.

Technical Note TN2265에서

: 푸시 서비스 가 어떤 식 으로든 잘못된 알림을 수신하는 경우 잘못된 알림

간단한 바이너리 인터페이스를 처리

는 연결을 끊습니다. 공급자 이 알림을 보내면 EPIPE 또는 깨진 파이프 오류로 표시 될 수 있습니다. 반면에 향상된 바이너리 인터페이스는 에 대한 자세한 정보가 포함 된 오류 응답을 보내고 연결을 끊기 전에 알림이 잘못 표시됩니다. 공급자가 이러한 조건을 올바르게 파악하고 처리해야합니다.

가장 일반적인 문제는 잘못된 장치 토큰입니다. 토큰이 개발 빌드를 집에서 테스트하는 경우와 같이 샌드 박스 환경에서 으로 제공된 경우 프로덕션 푸시 서비스로 보낼 수 없습니다. 각 푸시 환경은 동일한 장치 또는 컴퓨터에 대해 다른 토큰을 발행합니다. 기기 토큰을 잘못된 환경으로 보내면 푸시 서비스에 잘못된 토큰으로 표시되고 알림을 무시합니다.

마지막으로, this article는 알림의 일부 (가장 흔한 원인은 잘못된 장치 토큰 인) 유효하지 않은 경우 애플에 여러 알림을 보내는 방법에 대한 좋은 설명이있다,뿐만 아니라 도착하지 유효한 통지의 일부를 일으킬 수 있습니다 .

+1

감사합니다. Eran, 프로비저닝 프로파일을 확인했는데 "생산 환경"값이있는 "aps-environment"키가 있습니다. 이제 장치 토큰에 대해서는 잘 모르겠지만 내 자신의 아이폰에 대해서는 우리 시스템이 토큰 토큰을 보여주었습니다. 여전히 작동 중입니다 ... –

+4

@HetfieldJoe 동일한 장치에 대해 두 개의 토큰이있는 경우, 둘 중 하나만 프로덕션 환경에서 작동합니다. 두 사람 모두에게 보내려고하면 처음에 잘못된 토큰을 보내면 연결이 끊어 질 수 있습니다 (연결을 닫음). – Eran

+1

이것은 새로운 아이디어입니다. 그것을 확인합니다 –

관련 문제