【问题标题】:Is there a way to send user-specific push notifications for iOS devices?有没有办法为 iOS 设备发送用户特定的推送通知?
【发布时间】:2014-07-15 08:04:57
【问题描述】:

我想知道我是否可以创建一个服务来为 iOS 发送自定义的用户特定推送通知。

示例

@“嘿,%@,你好吗”,名字”

这可能吗?

【问题讨论】:

    标签: ios objective-c node.js push-notification apple-push-notifications


    【解决方案1】:

    除非我完全误解了你的需要,否则没有答案能满足你的需要。

    这是来自APNS guide 的相关示例:

    让我们考虑一个例子。提供者将以下字典指定为警报属性的值:

    { "aps" : 
      {
        "alert" : {
            "loc-key" : "GAME_PLAY_REQUEST_FORMAT",
            "loc-args" : [ "Jenna", "Frank"]
        }
      }
    }
    

    当设备收到通知时,它会使用“GAME_PLAY_REQUEST_FORMAT”作为键,在 .lproj 目录下的 Localizable.strings 文件中查找当前语言的相关字符串值。假设当前本地化有一个 Localizable.strings 条目,例如:

    "GAME_PLAY_REQUEST_FORMAT" = "%@ 和 %@ 邀请你玩大富翁";

    设备会显示一条提示消息“Jenna 和 Frank 已邀请您玩 Monopoly”。

    【讨论】:

      【解决方案2】:

      当然。查看 APNS 编程指南,特别是有效负载,您可以在将其发送到用户设备之前在服务器上对其进行自定义。

      https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Chapters/ApplePushService.html

      另外请注意,如果您知道通知应该何时出现(而不是在动态时间),那么请查看不需要服务器后端的本地通知。

      【讨论】:

      • 我不知道什么时候会出现,我已经启动并运行了我的服务器,我可以通过 HELLO WORLD 发送简单的推送通知。
      • @user3819540 在您设置 HELLO WORLD 字符串的位置,根据您数据库中的用户信息使其动态化。这样,它将特定于收件人。如果您愿意,可以发布您的代码,我们可以看看。
      • 这就是我怎样才能使它动态化的问题?我只是使用一个简单的例子 push 和 body payload HELLO WORLD
      • @user3819540 每当您的服务器触发发送新推送时,您都需要知道谁是接收者。我假设您将在数据库中链接了推送设备标识符和收件人姓名,因此您可以动态设置发送到 Apple 服务器的有效负载消息。
      • dude :) 是的,我有这些信息,你说的是我想做的,但你没有说我怎么才能到达那里:)
      【解决方案3】:

      您可以使用任何推送通知服务(如所列)或自己做。

      在您的代码中,当您收到推送通知消息时:

      - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
      {
          NSLog(@"Received notification: %@", userInfo);
          //here you should treat your received data
      }
      

      【讨论】:

        【解决方案4】:

        对于使用 APNS 的 iOS 推送通知服务,有一些非常好的解决方案。无需自己实现。

        • PushApps - 每月 100 万条通知免费,每月 19.99 条无限制通知,您可以通过 API 或发送 csv 文件导入您的用户 - documentation
        • Urban Airship - 每月最多免费 100 万条通知,之后按 1000 条通知收费
        • Parse - 前 100 万条通知也是免费的
        • PushWoosh - 100 万台设备免费,高级计划起价 39 欧元

        如果您必须自己实现它,如果您想自己托管,请查看easyAPNS

        另一个很好的信息站点是 Ray Wenderlich 的站点,其中包含一个 2 部分教程:

        this,适用于 Node.js 的 Apple 推送通知模块。

        【讨论】:

        • 他们都没有提供我想要的。他们只是发送分段推送通知
        • 不,你错了。您可以上传/链接您的数据库与用户并发送特定于用户的通知。为此,我们在我的公司使用 Parse。
        • 非常感谢您的帮助,但我们不能使用任何第三方来完成这项工作。但你所做的正是我想做的,将数据库输入与令牌链接并根据用户个性化推送发送通知。
        • 好的,知道了。然后,您必须在您的服务器上实现您自己的 APNS 服务。我用一些有用的链接更新了我的答案。
        【解决方案5】:

        当然可以……

        你需要为推送通知服务创建你自己的后端php文件,你可以从你的应用程序发送json数据到php文件中并使用$GET来实现你想要的数据,包括设备令牌、消息、徽章号码...请参考this

        在您的视图控制器中

        NSString *finalUrl =[NSString stringWithFormat:@"%@/pushService.php?device_token=%@&passphrase=%@&msg=%@",baseURL,device_token,passphrase,msg];
        NSURL *url  =[NSURL URLWithString:finalUrl];
        NSData *jsonData = [NSData dataWithContentsOfURL:url];
        
        if(jsonData != nil)
        {
            NSError *error = nil;
            NSDictionary *result = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:&error];
            NSLog(@"result: %@", result);
        
        }else
        {
            NSLog(@"connection error!");
        }
        

        pushService.php 文件

        // Put your device token here (without spaces):
        $deviceToken = $GET['device_token'];
        
        // Put your private key's passphrase here
        $passphrase = $GET['passphrase'];
        
        // Put your alert message here:
        $message = $GET['msg'];
        
        $body['aps'] = array(
            'alert' => $message,
            'sound' => 'default',
            'badge' =>  5 
        );
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-11-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-12-07
          • 1970-01-01
          相关资源
          最近更新 更多