2012-01-19 4 views
9

Apple의 Push Notification Service (APN) 문제로 인해 StackOverflow 전체에 약간의 홍수가 발생했기 때문에 실제로 질문을하기 전에 많은 연구를했습니다.Apple Push Notification이 전달되지 않았습니다.

기본적으로 apns-php's CertificateCreation을, on mobiforge과 같은 튜토리얼을, 그리고 일부는 Matthijs Hollemans을 따라갔습니다. 그래도, 내가 어떤 통지가 내 아이 패드 2

에 게시 얻을 수 기본적으로이 내가 수행 한 단계는 다음과 같습니다

  1. 가 나는 CertificateCreation 튜토리얼을 따라 나는 server_certificates_bundle_sandbox.pem, entrust_root_certification_authority.pem 나왔다.
  2. mobiforge blog에 지정된 지침서를 따라 가면서 App ID, 프로비저닝 프로파일을 성공적으로 생성하고 잘 연결했습니다.

    • 설명 : APNTest
    • 는 번들 시드 ID : 를 사용하여 팀 ID는
    • 번들 식별자 : com.learn.APN는
  3. 는 그럼 난 개발 푸시 SSL을 사용하도록 설정 동일한 인증서 요청을 사용하는 인증서 (당분간) 인증서를 얻으려고 지금 막 사용했고 다운로드하여 키 체인에 설치합니다. .

  4. 내 프로비저닝 프로파일을 .mobileprovision 파일에 다운로드하고 iPad 2 장치 아래 Xcode 's Organizer에로드했습니다.

  5. 다음 나는 단지 이러한 코드와 간단한 응용 프로그램을 만드는 :

    • 대상> 정보> 식별자를 구축 : net.learn.APN를

      - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
      { 
          [[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound)]; 
          // Override point for customization after application launch. 
          return YES; 
      } 
      
      - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken 
      { 
          NSLog(@"%@", deviceToken); 
      } 
      
      - (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error 
      { 
          NSLog(@"Error: %@", error); 
      } 
      
    • 그럼 내가 빌드 매개 변수를 구성

    • 대상> 빌드 설정> 코드 서명 ID> (필자는 지금 설치 한 프로비저닝 프로파일을 선택하고 자동으로 ide를 선택합니다

      2012-01-19 12:43:26.345 TestAPN[578:707] <3cb08612 9392996b 5332d2fc 5adce03d 994f8959 d7a2ac38 de7bed52 c8e0778e> 
      
      : 내 디버그 및 릴리스) I 구축하고 내 아이 패드 2 푸시 알림과 나는 그것을 승인 후 요청 내 응용 프로그램에 응용 프로그램을 실행
  6. 에 대한 ntical 프로파일, 토큰 ID는 내 콘솔에 등장

  7. apns-php을 사용하고 기기 ID (원시 64 진수 값)를 변경 한 다음 sample_push.php을 실행합니다. 스크립트가 성공적으로 실행되었지만 장치에 알림이 수신되지 않습니다.

  8. 그런 다음 SimplePush.php을 사용하려고합니다."메시지가 성공적으로 전달되었습니다"라는 메시지가 나타 났지만 내 iPad는 여전히 APN으로부터 알림을받지 못합니다.

질문 : 어떤 단계를 잘못 수행 했습니까? 저는이 분야에서 꽤 초보자입니다. 그리고 실제로 서버가 우리 자신의 어플리케이션에 메시지를 보내야한다는 것이 제 프로젝트의 요구 사항입니다. 우리는 귀하를 대신하여 APN을 보내는 제 3 자 소프트웨어에 대해 알고 있습니다.하지만 우리는 스스로를 구현하고 싶습니다.

나는 또한 "APN Feedback Service"을 보았고 이것을 (SimplePush의 기본) 쓰지 만 슬프지만 비어 있습니다. 지금 어떻게해야합니까?

<?php 
// Put your private key's passphrase here: 
$passphrase = ''; 

$ctx = stream_context_create(); 
stream_context_set_option($ctx, 'ssl', 'local_cert', 'server_certificates_bundle_sandbox.pem'); 
stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase); 

// Open a connection to the APNS server 
$fp = stream_socket_client(
     'ssl://feedback.sandbox.push.apple.com:2196', $err, 
     $errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx); 

if (!$fp) 
     exit("Failed to connect: $err $errstr" . PHP_EOL); 

echo 'Connected to APNS' . PHP_EOL; 

while (!feof($fp)) { 
     $data = fgets($fp, 1024); 
     var_dump(unpack("N1timestamp/n1length/H*devtoken", $data)); 
} 
// Close the connection to the server 
fclose($fp); 

  1. 내가 개발/생산 인증서에서의 차이점을 알고 있습니다.
  2. 아이 패드는, 사자 10.7.2 내가 중 하나를 복제하고 있지 않다 희망

을 실행하는 아이폰 OS 5.0.1

  • 다른 앱 스토어 애플 리케이션 알림 일반적으로
  • 엑스 코드 4.2.1 수신을 탈옥하지 않습니다 여기에 질문 ..)

    편집

    내가 php simplepush.php 다음 php feedback.php 실행, 나는 레크 리 에이션 내 장치 ID로 피드백을 받았습니다. 내 앱이 여전히 iPad에 있기 때문에 내 장치 ID가 잘못되었음을 의미합니까?

    [[email protected] SimplePush]# php feedback.php 
    Connected to APNS 
    array(3) { 
        ["timestamp"]=> 
        int(1326962028) 
        ["length"]=> 
        int(32) 
        ["devtoken"]=> 
        string(64) "3cb086129392996b5332d2fc5adce03d994f8959d7a2ac38de7bed52c8e0778e" 
    } 
    

    감사

    편집

    많은 어려움을 겪고과 Matthijs Hollemans에 의해 작성된 모든 단계를 다시 실행 후, 나는 마침내 작업을 진행. 그래서 문제는 잘못된 PEM 파일 내에 생성됩니다 ... hmm

  • +0

    모든 것을 재설정하고 모든 단계를 다시 시작하십시오 @ http://www.raywenderlich.com/3443/apple-push-notification-services-tutorial-part-12 이제 푸시 알림이 작동합니다 ... hmm –

    +0

    푸시 알림 서비스는 지난 며칠 동안 문제가 발생했습니다. Apple은 프로비저닝 프로파일을 재생성하라는 이메일을 보냈습니다. 너는 그걸로 잡혔을지도 모른다. –

    +0

    감사합니다.raywenderlich.com의 모든 단계를 자세히 수행하여 문제를 해결했습니다. 나는 이것이 cert 문제와 관련이 있다고 생각합니다. 어쨌든, 나는 내 문제를 해결했다. 내 답변을 게시해야합니까? (기본적으로 페이지와 동일합니다.) –

    답변

    16

    나에게는 비슷한 문제가 있습니다. 내가 모르는 핵심은 그 장치가 입니다. 장치 토큰이 dev와 prod (다른 장치).

    dev에서 테스트 할 때 사용하는 장치 토큰을 사용하고있었습니다. 이것은 dev에서 잘 동작하고 있었지만, prod로 바꿨을 때 파이썬 스크립트에 동일한 장치 토큰을 보관했습니다 (잘못하여 장치 토큰이 동일한 장치에 대해 동일 함). 그러나 prod에 등록 된 실제 장치 토큰은 다른.

    실제로 장치 토큰이 서버로 보내지기 때문에 이런 일은 일어나지 않을 것입니다.하지만 테스트 할 때 서버를 포함시키지 않으려 고 하드 코딩 된 장치 토큰을 사용하고있었습니다.

    이렇게하면 누군가에게 불편을 덜어주기를 바랍니다.

    +0

    에 대한 수정 사항을 기반으로하지만 아직 프로덕션 인증서를 손댈 수는 없다. . 어떻게 내가 그걸로 엉망이 될 수 있니? 빠른 답변 감사합니다! –

    +0

    이것은 정확합니다! 프로덕션 모드의 장치 토큰은 개발 모드의 장치 토큰과 다릅니다. 나는 무엇이 잘못되었는지를 알아 내려고 노력하면서 몇 시간 동안 머리를 으깨고 있었고 & 해결했습니다. 고맙습니다! – Mahouk

    +0

    이 답변은 클라이언트 문제와 제가 개인적으로 꽤 오랫동안 테스트했던 두통을 해결했습니다. 문제를 정확하게 지적 할 수 없었습니다. 나는 너의 모자를 가져 간다! 무리 감사. p.s. 내 문제는 심지어/dev 환경 prod에 대한 백엔드에 의해 사용되는 .pem 파일을 변경하는 데 나를 데려 갔다. –

    관련 문제