如何在 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 应用程序中接收推送通知消息?的主要内容,如果未能解决你的问题,请参考以下文章

iPhone应用程序中的推送通知[关闭]

从 appery 发送时,iPhone 上未收到推送通知消息

在 iPhone 中接收推送通知时如何播放声音

并非所有 iPhone 推送通知都发送到 iPhone

1 台设备上的多个推送通知 - iPhone

在 iPhone 上处理时如何使 iPad 上的 iOS 推送通知无效?