【问题标题】:Why push notifications is not working on testflight?为什么推送通知在 testflight 上不起作用?
【发布时间】:2014-07-25 12:12:08
【问题描述】:

我已经将推送通知作为开发者帐户进行了测试,它可以正常工作,但是当我尝试将其放在 TestFlight 上供测试人员测试时,它没有显示推送通知,但数据已正确接收,所以有吗我需要为 TestFlight 生成一种证书吗?

【问题讨论】:

  • 使用 TestFlight 的生产证书,因为它是一个分发版本,并使用 ssl://gateway.push.apple.com:2195 而不是沙盒 URL 来发送通知

标签: ios push-notification apple-push-notifications testflight


【解决方案1】:

对于 Firebase,试试这个:

#if DEBUG
    Messaging.messaging().setAPNSToken(apnsToken, type: .sandbox)
#else
    Messaging.messaging().setAPNSToken(apnsToken, type: .prod)
#endif

【讨论】:

    【解决方案2】:

    请确保您已在 info.plist 文件中将 FirebaseAppDelegateProxyEnabled 设置为 YES

    【讨论】:

      【解决方案3】:
      1. 您需要使用生产证书进行 testflight 构建。
      2. 还需要从推送发送脚本中的推送通知 url 中删除 sanbox(沙盒模式)。

      【讨论】:

      • #1 是我应该记住的。谢谢。
      • 测试:gateway.sandbox.push.apple.com 生产:gateway.push.apple.com
      • 好的...但是如果他们使用相同的证书,我们如何控制仅向我们的测试客户发送测试通知?
      【解决方案4】:

      对于有人使用 Python apns (https://github.com/djacobs/PyAPNs):

      当您创建 APNS 对象时,例如 apns = APNs(cert_file="cert.pem", key_file="key.pem")。您需要再添加一个参数use_sandbox。它将是apns = APNs(use_sandbox=False, cert_file="cert.pem", key_file="key.pem")

      编码愉快。

      【讨论】:

        【解决方案5】:

        对于 TestFlight,使用

        1. 生产证书
        2. 服务器上的“gateway.push.apple.com”(后端作业)

        【讨论】:

        • 在哪里可以更改服务器的配置?
        • 嗨,Alexandre,我不确定后端开发人员声明网关的确切位置,因为我不是后端开发人员。但我知道在某些时候我们必须编写它。
        【解决方案6】:

        我们需要两张证书来发送通知,一张用于开发,一张用于生产。就我而言,我正在使用 PushSharp 解决方案发送通知。

        这是为了开发:

        var config = new ApnsConfiguration(ApnsConfiguration.ApnsServerEnvironment.Sandbox, "development.p12", "password");
        var broker = new ApnsServiceBroker(config);
        

        这是用于生产的:

        var config = new ApnsConfiguration(ApnsConfiguration.ApnsServerEnvironment.Production, "production.p12", "password");
        var broker = new ApnsServiceBroker(config);
        

        【讨论】:

          【解决方案7】:

          如果你使用 Firebase,你必须添加:

          • 测试飞行:

            -(void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
                [[FIRInstanceID instanceID] setAPNSToken:deviceToken type:FIRInstanceIDAPNSTokenTypeSandbox]; 
            }
            
          • 生产:

            -(void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
                [[FIRInstanceID instanceID] setAPNSToken:deviceToken type:FIRInstanceIDAPNSTokenTypeProd]; 
            }
            

          【讨论】:

          • 这可能是一个非常愚蠢的问题,但如果两者都做会发生什么?
          • @GáborAngyal - 不清楚会发生什么。有趣的是这句话“如果将令牌类型设置为 FIRInstanceIDAPNSTokenTypeUnknown InstanceID 将读取配置文件以找出令牌类型。”来自Firebase API FIRInstanceID setAPNSToken:type:。从逻辑上讲,这表示每个人 都可以简单地执行type: FIRInstanceIDAPNSTokenTypeUnknown,这样我们就不必记住要更改它。这个我自己没试过……
          • 我尝试使用 FIRInstanceIDAPNSTokenTypeUnknown valuef 或 type 参数,并且可以确认我能够在 testflight 构建中接收推送通知
          • 使用 Firebase 4.0 新的 Swift 语法,现在是 Messaging.messaging().setAPNSToken(deviceToken, type: .unknown)
          • @alexandre9865 - 这是 AppDelegate.m
          【解决方案8】:

          如果您使用 GCM。 开发中:-

          _registrationOptions = @{kGGLInstanceIDRegisterAPNSOption:deviceToken,
                                       kGGLInstanceIDAPNSServerTypeSandboxOption:@YES};
          

          在分发中:-

          _registrationOptions = @{kGGLInstanceIDRegisterAPNSOption:deviceToken,
                                       kGGLInstanceIDAPNSServerTypeSandboxOption:@NO};
          

          【讨论】:

            【解决方案9】:

            但是当我尝试将它放在 TestFlight 上供测试人员测试时,它没有显示推送通知,但数据被正确接收。

            这句话令人困惑。如果没有收到推送通知,正确接收到了哪些数据?

            无论如何,如果我没记错的话,对于 TestFlight,您使用的是 AdHoc 配置文件,它适用于生产推送环境。因此,您需要生产推送证书才能推送到通过 TestFlight 安装应用程序的设备。此外,不要忘记开发设备令牌与生产设备令牌不同,因此请确保使用正确的令牌。

            【讨论】:

            • 我在文档中没有看到任何关于生产设备令牌的信息 - 你能具体说明一下吗?
            • @PeterPiper If the token came from the sandbox environment, such as when you are testing a development build in house, you can't send it to the production push service. Each push environment will issue a different token for the same device or computer. If you do send a device token to the wrong environment, the push service will see that as an invalid token and discard the notification. 取自 here
            • 亲爱的@Eran,你有任何教程来展示如何创建生产证书吗?
            • 这是否也适用于 GameKit 的通知?
            • @tallis 我不知道。
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2017-09-16
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多