如何在 iPhone 应用程序中接收推送通知消息?
Posted
技术标签:
【中文标题】如何在 iPhone 应用程序中接收推送通知消息?【英文标题】:How to receive Push notification message in iphone app? 【发布时间】:2011-07-11 13:27:07 【问题描述】:我按照步骤创建了 .pem 文件
-
登录 iPhone 开发者计划门户。
从右侧菜单中选择应用 ID。
创建不带通配符的 App ID。
单击此 App ID 旁边的配置链接,然后单击按钮启动向导以生成新的开发推送 SSL 证书。
下载此证书并双击 aps_developer_identity.cer 将其导入您的钥匙串
启动钥匙串助手并点击左侧的我的证书
展开 Apple ios Development Push Services 并选择 Apple IOS Development Push Services AND my private key
右键单击并选择“导出 2 个元素...”并另存为 cert.p12。
打开终端并将目录更改为用于保存 cert.p12 并使用此命令将 PKCS12 证书包转换为 PEM 格式的位置
openssl pkcs12 -in cert.p12 -out cert.pem -nodes -clcerts
10.现在我在 Apnsphp 中使用这个 PEM 文件作为我的证书!
当我在它显示的浏览器中使用 url 时; "aps":"alert":"hi","badge":1,"sound":"beep.wav"
我正在使用此代码在 iphone 应用中接收通知
- (void)applicationDidFinishLaunching:(UIApplication *)application
[self.window addSubview:tabBarController.view];
[self.window makeKeyAndVisible];
NSLog(@"\n\n\n\nRegistering for push notifications...\n\n\n\n");
[[UIApplication sharedApplication]
registerForRemoteNotificationTypes:
(UIRemoteNotificationTypeAlert |
UIRemoteNotificationTypeBadge |
UIRemoteNotificationTypeSound)];
- (void)application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)devToken
NSString *token = [[devToken description] stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"<>"]];
token = [token stringByReplacingOccurrencesOfString:@" " withString:@""];
NSLog(@"\n\n\n\n\n device token===%@\n\n\n\n",token);
//DeviceRegisterer *registrar = [[DeviceRegisterer alloc] init];
//[registrar registerDeviceWithToken:token];
- (void)application:(UIApplication *)app didFailToRegisterForRemoteNotificationsWithError:(NSError *)err
NSLog(@"failed to regiser %@", err);
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
NSLog(@"notification options %@", userInfo);
UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Super" message:@"welcome" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alert show];
[alert release];
for (id key in userInfo)
NSLog(@"key: %@, value: %@", key, [userInfo objectForKey:key]);
UIAlertView *myAlertView = [[UIAlertView alloc] initWithTitle:@"Your title here!" message:@"this gets covered" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"OK", nil];
UITextField *myTextField = [[UITextField alloc] initWithFrame:CGRectMake(12.0, 45.0, 260.0, 25.0)];
[myTextField setBackgroundColor:[UIColor whiteColor]];
myTextField.text = [userInfo objectForKey:key];
[myAlertView addSubview:myTextField];
[myAlertView show];
[myAlertView release];
但我无法收到通知消息。 请帮忙解决这个问题。
提前致谢, 森蒂尔库玛
【问题讨论】:
【参考方案1】:您没有使用服务器来发送消息。 pem 密钥旨在供服务器用来发送消息。我认为您不能使用您的 iphone 应用程序直接发送推送消息。 如果您的服务器使用 php,请尝试在此站点中查找传递通知的代码。 注意:在我的服务器上,ApnsPHP 代码根本不起作用,我使用 *** 中的一个简单 php 脚本(抱歉不记得链接)来管理它并运行。
【讨论】:
if (!$fp) exit("连接失败:$err $errstr" . PHP_EOL); echo '连接到 APNS' 。 PHP_EOL; // 创建负载体 $body['aps'] = array( 'alert' => $message, 'sound' => 'default' ); // 将有效负载编码为 JSON $payload = json_encode($body); // 构建二进制通知 $msg = chr(0) .包('n',32)。包('H*',$deviceToken)。包('n',strlen($payload))。 $有效载荷; // 发送到服务器 $result = fwrite($fp, $msg, strlen($msg)); if (!$result) echo '消息未送达' 。 PHP_EOL;否则 echo '消息已成功传递' 。 PHP_EOL; fclose($fp);【参考方案2】:我解决了这个问题。 php .pem 文件attactment 中的问题。感谢您提供的想法。
【讨论】:
以上是关于如何在 iPhone 应用程序中接收推送通知消息?的主要内容,如果未能解决你的问题,请参考以下文章