我已经将推送通知作为开发者帐户进行了测试,并且可以正常工作,但是当我尝试将其放在TestFlight上以供测试人员进行测试时,它没有显示推送通知,但是可以正确接收数据,所以有一种我需要为TestFlight生成的证书?
Answers:
但是,当我尝试将其放置在TestFlight上以供测试人员进行测试时,它没有显示推送通知,但可以正确接收数据。
那句话令人困惑。如果未收到推送通知,则正确接收了哪些数据?
无论如何,如果我没记错的话,对于TestFlight,您使用的是AdHoc配置文件,该文件可与生产推送环境一起使用。因此,您需要生产推送证书才能推送到通过TestFlight安装了该应用程序的设备。此外,请不要忘记开发设备令牌与生产设备令牌不同,因此请确保使用正确的令牌。
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.
从这里带走。
如果您使用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];
}
type: FIRInstanceIDAPNSTokenTypeUnknown
,因此我们不必记住要更改此设置。我自己还没有尝试过……
FIRInstanceIDAPNSTokenTypeUnknown
valuef或type参数,可以确认我能够在testflight构建上收到推送通知
如果您使用的是GCM。开发中:-
_registrationOptions = @{kGGLInstanceIDRegisterAPNSOption:deviceToken,
kGGLInstanceIDAPNSServerTypeSandboxOption:@YES};
发行中:
_registrationOptions = @{kGGLInstanceIDRegisterAPNSOption:deviceToken,
kGGLInstanceIDAPNSServerTypeSandboxOption:@NO};
我们需要两张用于发送通知的证书,一张用于开发,另一张用于生产。就我而言,我正在使用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);
对于某人使用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")
。
快乐的编码。