推送通知不起作用

时间:2011-12-30 13:21:34

标签: php iphone apple-push-notifications

我正在开发一款需要推送通知的应用。 我正在关注此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页面时没有任何事情发生..为什么?谁能帮我?

2 个答案:

答案 0 :(得分:0)

我认为您的令牌不正确。尝试:

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

答案 1 :(得分:0)

这应该有所帮助:

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

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