为什么推送通知不适用于testflight?

时间:2014-06-04 17:54:38

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

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

9 个答案:

答案 0 :(得分:78)

  

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

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

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

答案 1 :(得分:39)

  1. 您需要使用生产证书进行testflight构建。
  2. 还需要从推送发送脚本中的推送通知网址中删除sanbox(沙箱模式)。

答案 2 :(得分:12)

如果您使用Firebase,则必须添加:

  • TestFlight:

    -(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]; 
    }
    

答案 3 :(得分:5)

如果您使用GCM。 在发展中: -

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

在分发中: -

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

答案 4 :(得分:4)

对于TestFlight,请使用

  1. 生产证书
  2. " gateway.push.apple.com"在服务器(后端作业)

答案 5 :(得分:1)

我们需要两个证书来发送通知,一个用于开发,一个用于生产。就我而言,我使用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);

答案 6 :(得分:1)

对于使用 Python APNS https://github.com/djacobs/PyAPNs)的人:

创建APNS对象,例如.for( 'downcast' ).add( ... )。您需要再添加一个参数apns = APNs(cert_file="cert.pem", key_file="key.pem")。将会是use_sandbox

快乐的编码。

答案 7 :(得分:0)

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

答案 8 :(得分:0)

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

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