简体   繁体   中英

Push Notification doesn't work

i'm developing an app that need push notification. I'm following this tutorial to implement push notification with php. So i'm using production certificate. This is the code in the 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);
}

and this is the server side php page:

<?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);
?>

Nothing happen when i launch php page.. why? who can help me?

i think your token isnt correct. try:

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

this should help:

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

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM