我已经将推送通知作为开发人员帐户进行了测试,但是当我尝试将其放在TestFlight上供测试人员测试时,它没有显示推送通知但数据被正确接收,所以我需要为TestFlight生成一种证书吗?
答案 0 :(得分:78)
但是当我试图将它放在TestFlight上供测试人员测试时,它没有显示推送通知但数据被正确接收。
那句话令人困惑。如果您没有收到推送通知,那么正确接收了哪些数据?
无论如何,如果我没记错的话,对于TestFlight,您使用的是AdHoc配置文件,该配置文件适用于生产推送环境。因此,您需要一个生产推送证书才能推送到通过TestFlight安装应用程序的设备。另外,不要忘记开发设备令牌与生产设备令牌不同,因此请确保使用正确的令牌。
答案 1 :(得分:39)
答案 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,请使用
答案 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