【问题标题】:How to test Push Notification is working in my application如何测试推送通知在我的应用程序中是否有效
【发布时间】:2011-11-13 17:57:08
【问题描述】:

在我的应用程序中,我正在实现推送通知服务。
我有一个 Content Provider 服务器,其中包含一些产品。
我已生成 SSL 客户端证书并将其附加到我的开发配置文件中。此个人资料也已添加到我的应用程序中。
我已经在委托方法中编写了代码(由 Apple 实现推送通知的指南指导)。一切就绪。

现在我想测试我的应用程序是否按照要求处理推送通知。关于如何测试它的任何想法都会对我有很大帮助。
我是否必须向内容提供商服务器添加新产品才能对此进行测试?

如果是,APNS 需要多少费用才能将推送通知发送到我的设备?

【问题讨论】:

    标签: ios objective-c push-notification


    【解决方案1】:

    我尝试了上述所有 3 个建议,但均未成功。万一其他人最终在这里寻找解决方案,我发现了这个并且效果很好:

    推送者https://github.com/noodlewerk/NWPusher

    【讨论】:

    • NWPusher 唯一的问题是它不支持 HTTP/2
    【解决方案2】:

    这里发布了非常酷的指南:Programming Apple Push Notification Services

    还有一个名为 PushMeBaby Mac Os App 的应用程序,您可以下载并使用它从 Mac 向您的设备发送推送通知。

    一旦您的设备可用,APNS 就会向您的设备发送推送通知。如果我没记错的话,你的设备每分钟都会 ping APNS。

    【讨论】:

    • 我正在运行 PushMeBaby 应用程序,但它不加载证书导致不发送任何推送通知。我已按照教程中的指导添加了该证书,但它仍然无法正常工作。任何想法?是沙盒证书还是生产证书?
    • 如教程中所说 - 您应该使用沙盒并在 PushMyBaby 中输入您的设备令牌。
    • 我这样做了。我也使用“将项目复制到目标组文件夹”在资源中添加了证书。但它仍然无法正常工作
    • 已解决:我的证书名称是“aps_developer_identity-1.cer”而不是“aps.developer.identity-1.cer”。感谢您的支持。
    【解决方案3】:

    如果您想通过 APNS 同时支持基于证书和令牌的身份验证,那么您可以尝试Push Notifications

    【讨论】:

    • 这应该被标记为正确答案。该应用程序太酷了。怕得用node-apn,又要多花一天时间调试。
    【解决方案4】:

    curl呢:

    curl -d '{"aps":{"alert":"This is a test notification"}}' --cert YourCertificate.pem:YourPassword -H "apns-topic: com.example.yourapp" --http2  https://api.development.push.apple.com/3/device/YourDeviceToken
    

    首先,您需要 curlhttp2 支持。
    并且您需要使用openssl 将您的推送证书转换为pem 格式。

    【讨论】:

    • 非常简单的简单测试
    • 谢谢!做起来很简单
    【解决方案5】:

    你应该试试PushMeBaby的分支,它对我有用。

    【讨论】:

    • +1 也为我工作;原始 PushMeBaby 未从接受的答案发送推送
    • 注意 this 似乎是最近更新的版本。
    【解决方案6】:

    试试这个在线应用程序,您可以通过它粘贴您的设备令牌并提供证书,然后向任何设备发送推送通知,并让您自定义数据。 http://pushmebaby.herokuapp.com

    【讨论】:

      【解决方案7】:

      你可以使用 APNS 测试器,它是一个非常好的从 Mac 机器测试 APNS 的工具 链接下载this软件。 测试推送通知需要提供的 2 件事

      1.APNS 证书(.cer 文件) 2.用户iOS设备的设备令牌

      【讨论】:

        【解决方案8】:

        当我在 Xcode8 中测试 iOS10 时,PushMeBaby 被冻结。试试 NWPusher,https://github.com/noodlewerk/NWPusher。一个友好而简单的 GUI 工具。

        【讨论】:

          【解决方案9】:

          如果您使用 Google 搜索,您会看到许多这样做的网站。 我通常使用https://www.apnstester.comhttps://www.pushty.com

          【讨论】:

            【解决方案10】:

            为此我创建了一个小脚本

            import json
            import jwt
            import time
            
            from hyper import HTTPConnection
            
            ALGORITHM = 'ES256'
            
            # fill these items
            APNS_KEY_ID = ''
            TEAM_ID = ''
            BUNDLE_ID = ''
            
            # put path to p8 file
            APNS_AUTH_KEY = ''
            
            # put device token id (of the notification receiver)
            REGISTRATION_ID = ''
            
            # let's do the magic :)
            f = open(APNS_AUTH_KEY)
            secret = f.read()
            
            token = jwt.encode(
                {
                    'iss': TEAM_ID,
                    'iat': time.time()
                },
                secret,
                algorithm= ALGORITHM,
                headers={
                   'alg': ALGORITHM,
                    'kid': APNS_KEY_ID,
               }
            )
            
            path = '/3/device/{0}'.format(REGISTRATION_ID)
            
            equest_headers = {
            'apns-expiration': '0',
            'apns-priority': '10',
            'apns-topic': BUNDLE_ID,
            'authorization': 'bearer {0}'.format(token.decode('ascii'))
            }
            
            connection = HTTPConnection('api.development.push.apple.com:443')
            
            # put the payload you need
            payload_data = {
            'aps': {
             'content-available': '1',
             },
            }
            payload = json.dumps(payload_data).encode('utf-8')
            
            connection.request(
            'POST',
            path,
            payload,
            headers=request_headers
            )
            resp = connection.get_response()
            
            print(resp.status)
            print(resp.read())
            

            https://gist.github.com/IvanivOleg/7ba4072128b2c05a068a6826be68a3d3

            【讨论】:

            • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能会失效。
            【解决方案11】:

            使用终端通过单行命令测试推送通知

            在您的 Mac 中安装 Houston,在终端中运行以下命令。

            1. gem 安装休斯顿

              如果你遇到这样的错误,

              正在获取 houston-2.4.0.gem 错误:执行 gem 时 ... (Gem::FilePermissionError) 您没有 /Library/Ruby/Gems/2.6.0 目录的写入权限。

              首先在终端中运行以下命令来安装 Ruby

              brew 安装红宝石

              导出 GEM_HOME="$HOME/.gem"

              gem 安装导轨

              安装成功后再次运行

              gem 安装休斯顿

            2. 转到 pem 文件文件夹并从该文件夹打开终端。

            3. 像下面这样运行命令

              apn push "设备令牌" -c PEM_FILE_NAME -m "MESSAGE"

              喜欢:

              apn push "5a4b74d5e5fc325b14d2f2641aa11bfb9744d1f88922822a5ed3512376d5f5b9" -c myapp_apns_dev.pem -m "测试"

            成功运行上述命令后,它会要求输入 PEM 密码,这是您的 pem 文件的密码。

            如果您的应用已上线,则使用生产 pem 文件名

            像这样,

            apn push "5a4b74d5e5fc325b14d2f2641aa11bfb9744d1f88922822a5ed3512376d5f5b9" -c myapp_apns_pro.pem -m "测试"

            完成。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2011-08-07
              • 1970-01-01
              • 2016-11-07
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多