2011-12-30 31 views
0

私はプッシュ通知が必要なアプリケーションを開発しています。 私はこれに続いて、tutorialはPHPでプッシュ通知を実装しています。 私は生産証明書を使用しています。 これはapplicationDelegateのコードです:プッシュ通知が機能しません

- (void)application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { 
    const unsigned* tokenBytes = [deviceToken bytes]; 
    NSString* tok = [NSString stringWithFormat:@"%08x%08x%08x%08x%08x%08x%08x%08x", 
           ntohl(tokenBytes[0]), ntohl(tokenBytes[1]), ntohl(tokenBytes[2]), 
           ntohl(tokenBytes[3]), ntohl(tokenBytes[4]), ntohl(tokenBytes[5]), 
           ntohl(tokenBytes[6]), ntohl(tokenBytes[7])]; 
    NSLog([NSString stringWithFormat:@"token 1 = %@",tok]); 
    [[NSUserDefaults standardUserDefaults] setObject:tok forKey:@"token"]; 
} 

- (void)application:(UIApplication *)app didFailToRegisterForRemoteNotificationsWithError:(NSError *)err { 
} 
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo { 
    NSLog(@"Received notification: %@", userInfo); 
} 

、これは、サーバー側のPHPのページです:

<?php 
    //$token = $_GET['t']; 
    $token = "xxxxxxxxxxx....xxxxxx"; 
    $who =$_GET['c']; 
    $notification = $_GET['n']; 
    $message = 'Hello'; 
    $badge = 3; 
    $sound = 'default'; 
    $payload = array(); 
    $payload['aps'] = array('alert' => $message, 'badge' => intval($badge), 'sound' => $sound); 
    $payload = json_encode($payload); 
    $apns_url = NULL;  
    $apns_cert = NULL; 
    $apns_port = 2195; 
$apns_url = 'gateway.push.apple.com'; 
$apns_cert = 'cert-prod.pem'; 

    $stream_context = stream_context_create(); 
    stream_context_set_option($stream_context, 'ssl', 'local_cert', $apns_cert); 
    $apns = stream_socket_client('ssl://' . $apns_url . ':' . $apns_port, $error, $error_string, 2, STREAM_CLIENT_CONNECT, $stream_context); 
    $device_tokens = array(); 
    $device_tokens[0] = $token; 
    foreach($device_tokens as $key=>$device_token) 
    { 
     $apns_message = chr(0) . chr(0) . chr(32) . pack('H*', str_replace(' ', '', $device_token)) . chr(0) . chr(strlen($payload)) . $payload; 
     fwrite($apns, $apns_message); 
    } 
    @socket_close($apns); 
    @fclose($apns); 
?> 

私は...なぜPHPのページを起動したときに何が起こるのか?誰が私を助けられるか?

答えて

0

あなたのトークンが正しくないと思います。試してみてください。

NSString *token = [NSString stringWithCString:[deviceToken bytes]]; 
+0

トークンのこのÀaÂÑ5ΔC≤¸uような何かを...正しいですか? – JackTurky

+0

PHPのコードにUbQNを追加すると何も起こりません:( – JackTurky

+0

いいえ試してみてください:NSString * token = [[NSString alloc] initWithBytes:[deviceToken bytes] length:deviceToken.length encoding:NSASCIIStringEncoding] ; – CarlJ

0

をこれで解決しなければならない。このようのNSLog印刷で

NSString *deviceTokenStr = [[[[deviceToken description] 
           stringByReplacingOccurrencesOfString: @"<" withString: @""] 
           stringByReplacingOccurrencesOfString: @">" withString: @""] 
           stringByReplacingOccurrencesOfString: @" " withString: @""]; 

    NSLog(@"Device Token: %@", deviceTokenStr); 
+0

so:NSString * tok = [[NSString alloc]トークンは空白でなければなりませんか?< >本当ですか?私は試してみますが、私はPHPコードを起動しません。(通知は届きません) – JackTurky

+0

1.はい、< > .soはありません。あなたはAPNの証明書ですか? PHPコード? – CarlJ

関連する問題