我是一名php开发人员。我正在为iPhone实现推送通知模块。为此,我使用PHP进行服务器端实现。虽然我正在“连接到APNS {”aps“:{”alert“:”HI Push“,”badge“:1,”声音“:”默认“}}消息已成功发送”消息,iPhone未收到任何通知。我的PHP代码就像:
<? php
include('include/connect.php');
$device = mysql_query("SELECT device_token,badge,alert,sound FROM push_notification WHERE device_status='1' ");
while($res = mysql_fetch_array($device)){
// Put your device token here (without spaces):
$deviceToken = $res['device_token'];
// Put your private key's passphrase here:
$passphrase = "pushchat";
// Put your alert message here:
//$message = trim($_REQUEST['alert']);
$message = "HI Push" ;
////////////////////////////////////////////////////////////////////////////////
$ctx = stream_context_create();
stream_context_set_option($ctx, 'ssl', 'local_cert', 'ck.pem');
stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase);
// Open a connection to the APNS server
$fp = stream_socket_client(
'ssl://gateway.sandbox.push.apple.com:2195', $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;
$body['aps'] = array('alert' => $message,'badge' => 1,'sound' => 'default'); // Encode the payload as JSON
$payload = json_encode($body);
echo $payload;
// Build the binary notification
$msg = chr(0) . pack('n', 32) . pack('H*', $deviceToken) . pack('n', strlen($payload)) . $payload;
// Send it to the server
$result = fwrite($fp, $msg, strlen($msg));
if (!$result)
echo 'Message not delivered' . PHP_EOL;
else
echo 'Message successfully delivered' . PHP_EOL;
// Close the connection to the server
fclose($fp);
}
&GT;
目标c代码如下:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
// Override point for customization after application launch.
// Register for Push Notification Type
deviceTokenString=[[NSString alloc]init];
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound) ];
/*---------------Increasing Badge No-----------*/
application.applicationIconBadgeNumber=0;
}
#pragma mark-
#pragma mark PushNotification Delegate methods
/*------ Provide a user explanation for a place to get Device Token-------*/
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{
/*---------Get The Device Token here--------------*/
deviceTokenString = [deviceToken description];
deviceTokenString = [deviceTokenString stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"<>"]];
deviceTokenString = [deviceTokenString stringByReplacingOccurrencesOfString:@" " withString:@""];
}
/*------ Provide a user explanation for when the registration fails-------*/
- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error
{
NSLog(@"Error in registration. Error: %@", error);
}
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
NSLog(@"Received Notification");
NSLog(@"remote notification: %@",[userInfo description]);
NSDictionary *apsInfo = [userInfo objectForKey:@"aps"];
NSString *alert = [apsInfo objectForKey:@"alert"];
NSLog(@"Received Push Alert: %@", alert);
NSString *sound = [apsInfo objectForKey:@"sound"];
NSLog(@"Received Push Sound: %@", sound);
NSString *badge = [apsInfo objectForKey:@"badge"];
NSLog(@"Received Push Badge: %@", badge);
application.applicationIconBadgeNumber = [[apsInfo objectForKey:@"badge"] integerValue];
}
答案 0 :(得分:2)
请检查证书是否匹配。对于前者如果iphone处于调试模式,则服务器还使用开发者证书进行推送通知,如果iPhone是在发行版中构建的,则服务器使用生产证书发送推送通知。请验证您的证书是否匹配。同时检查iPhone设置是否为您的应用启用了通知。