Ios 为什么推送通知在testflight上不起作用?

Ios 为什么推送通知在testflight上不起作用?,ios,push-notification,apple-push-notifications,testflight,Ios,Push Notification,Apple Push Notifications,Testflight,我已经作为一个开发者帐户测试了推送通知,并且它工作了,但是当我尝试将它放在TestFlight上供测试人员测试它时,它没有显示推送通知,但是数据被正确接收,所以我需要为TestFlight生成一种证书吗 但是当我尝试将它放在TestFlight上供测试人员测试时,它没有显示推送通知,但数据被正确接收 那句话令人困惑。如果您没有收到推送通知,正确接收了哪些数据 无论如何,如果我没记错的话,对于TestFlight,您使用的是一个临时配置文件,它与生产推送环境一起工作。因此,您需要生产推送证书才能通

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

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

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

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

  • 您需要使用生产证书进行testflight构建
  • 还需要从推送发送脚本中的推送通知url中删除sanbox(沙箱模式)
  • 如果您使用GCM。 发展中:-

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

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

    如果使用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]; 
      }
      
      var config = new ApnsConfiguration(ApnsConfiguration.ApnsServerEnvironment.Production, "production.p12", "password");
      var broker = new ApnsServiceBroker(config);
      

    我们需要两个用于发送通知的证书,一个用于开发,一个用于生产。在我的情况下,我使用PushSharp解决方案发送通知

    这是为了发展:

    var config = new ApnsConfiguration(ApnsConfiguration.ApnsServerEnvironment.Sandbox, "development.p12", "password");
    var broker = new ApnsServiceBroker(config);
    
    这是为了生产:

    -(void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
        [[FIRInstanceID instanceID] setAPNSToken:deviceToken type:FIRInstanceIDAPNSTokenTypeProd]; 
    }
    
    var config = new ApnsConfiguration(ApnsConfiguration.ApnsServerEnvironment.Production, "production.p12", "password");
    var broker = new ApnsServiceBroker(config);
    
    对于TestFlight,使用

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

  • 对于使用Python APN的用户():

    创建APNS对象时,例如
    APNS=APNS(cert\u file=“cert.pem”,key\u file=“key.pem”)
    。您需要再添加一个参数
    使用\u sandbox
    。它将是
    apns=apns(使用\u sandbox=False,cert\u file=“cert.pem”,key\u file=“key.pem”)


    愉快的编码。

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

    对于Firebase,请尝试以下操作:

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

    我在文档中没有看到任何关于生产设备令牌的内容-您能指定一点吗?@PeterPiper
    如果令牌来自沙箱环境,例如当您在内部测试开发构建时,您不能将其发送到生产推送服务。每个推送环境将为同一设备或计算机发出不同的令牌。如果您确实向错误的环境发送了设备令牌,推送服务会将其视为无效令牌并放弃通知。
    摘自.Dear@Eran,你有任何教程来说明如何创建生产证书吗?这也适用于游戏套件的通知吗?@tallis我不知道。#1是我应该记住的。谢谢。测试:gateway.sandbox.push.apple.com生产:gateway.push.apple.com使用TestFlight的生产证书,因为它是一个分发版本,并且ssl://gateway.push.apple.com:2195 与发送通知的沙盒URL不同,这可能是一个非常愚蠢的问题,但是如果你同时做这两件事会发生什么呢?@GáborAngyal-不清楚会发生什么。有趣的是这句话“如果令牌类型设置为FirinStanceIdInstankEntyPeUnknown InstanceID将读取配置文件以查找令牌类型。”来自。从逻辑上讲,这意味着每个人都可以简单地执行
    type:FIRInstanceIDAPNSTokenTypeUnknown
    ,这样我们就不必记住要更改它了。我自己还没有尝试过……我尝试过使用
    FIRInstanceIDAPNSTokenTypeUnknown
    valuef或type参数,并且可以确认我能够使用Firebase 4.0新的Swift语法在testflight Builds上接收推送通知,它现在是Messaging.Messaging().setAPNSToken(deviceToken,type:.unknown)我需要从answer中添加此函数的文件是什么?我可以在哪里更改服务器的配置?嗨,Alexandre,我不确定后端开发人员在哪里声明网关,因为我不是后端开发人员。但我知道,在某个时候,我们必须写它。这也是行不通的。