iOS 推送通知不工作
iOS Push notification Not working
我必须为我的应用程序实施推送通知服务,因此我创建了在生产环境中启用推送通知的 App ID。第一次在我的设备中安装应用程序时,推送通知允许和不允许弹出窗口出现,如果它单击全部。它没有生成推送通知。下次我启动时它不会要求任何弹出窗口而且我无法生成设备令牌,请帮助我。
谢谢,
Nikhil.CH
首先,您需要确保在显示 "allow" 弹出窗口后收到令牌或错误消息。注册通知的方法在 iOS8 中发生了重大变化,如果您使用旧方法,它将无提示地失败。
这里有一个片段:
if ([application respondsToSelector:@selector(registerUserNotificationSettings:)])
{
// iOS 8
[application registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge) categories:nil]];
}
else{
//.. the old one
}
大多数情况下,失败的原因可能是错误的 prov 配置文件和证书匹配,或者是因为您在防火墙或 VPN 后面进行测试。
为了测试它们,我使用 PUSHER 一个很棒的软件。
首先,一旦您响应了推送通知权限警报详细信息就会被保存。要重置它并再次体验警报,请按照以下步骤操作:
从设备中删除您的应用程序。
完全关闭设备,然后重新打开。
前往“设置”>“通用”>“日期与时间”并将日期提前一天或更长时间。
再次完全关闭设备,然后重新打开。
现在,这是在 iOS 应用程序上注册推送通知的分步过程:
第 1 步:询问 iOS 设备上应用程序的推送通知设置:
if ([[UIApplication sharedApplication] respondsToSelector:@selector(registerUserNotificationSettings:)]) {
[[UIApplication sharedApplication] registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:(UIRemoteNotificationTypeSound|UIRemoteNotificationTypeAlert) categories:nil]];
} else {
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:UIRemoteNotificationTypeAlert|UIRemoteNotificationTypeSound];
}
步骤 2:注册从上述方法调用返回的委托回调通知
- (void)application:(UIApplication *)iApplication didRegisterUserNotificationSettings:(UIUserNotificationSettings *)iNotificationSettings {
[iApplication registerForRemoteNotifications];
}
第 3 步:实现以下方法来接收和保存从上述方法调用的令牌
- (void)application:(UIApplication *)iApplication didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)iDeviceToken
- (void)application:(UIApplication *)iApplication didFailToRegisterForRemoteNotificationsWithError:(NSError *)iError
如果您没有获得推送令牌,那么错误方法 didFailToRegisterForRemoteNotificationsWithError
一定会给您一些有用的信息。
我必须为我的应用程序实施推送通知服务,因此我创建了在生产环境中启用推送通知的 App ID。第一次在我的设备中安装应用程序时,推送通知允许和不允许弹出窗口出现,如果它单击全部。它没有生成推送通知。下次我启动时它不会要求任何弹出窗口而且我无法生成设备令牌,请帮助我。
谢谢, Nikhil.CH
首先,您需要确保在显示 "allow" 弹出窗口后收到令牌或错误消息。注册通知的方法在 iOS8 中发生了重大变化,如果您使用旧方法,它将无提示地失败。
这里有一个片段:
if ([application respondsToSelector:@selector(registerUserNotificationSettings:)])
{
// iOS 8
[application registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge) categories:nil]];
}
else{
//.. the old one
}
大多数情况下,失败的原因可能是错误的 prov 配置文件和证书匹配,或者是因为您在防火墙或 VPN 后面进行测试。
为了测试它们,我使用 PUSHER 一个很棒的软件。
首先,一旦您响应了推送通知权限警报详细信息就会被保存。要重置它并再次体验警报,请按照以下步骤操作:
从设备中删除您的应用程序。
完全关闭设备,然后重新打开。
前往“设置”>“通用”>“日期与时间”并将日期提前一天或更长时间。
再次完全关闭设备,然后重新打开。
现在,这是在 iOS 应用程序上注册推送通知的分步过程:
第 1 步:询问 iOS 设备上应用程序的推送通知设置:
if ([[UIApplication sharedApplication] respondsToSelector:@selector(registerUserNotificationSettings:)]) {
[[UIApplication sharedApplication] registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:(UIRemoteNotificationTypeSound|UIRemoteNotificationTypeAlert) categories:nil]];
} else {
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:UIRemoteNotificationTypeAlert|UIRemoteNotificationTypeSound];
}
步骤 2:注册从上述方法调用返回的委托回调通知
- (void)application:(UIApplication *)iApplication didRegisterUserNotificationSettings:(UIUserNotificationSettings *)iNotificationSettings {
[iApplication registerForRemoteNotifications];
}
第 3 步:实现以下方法来接收和保存从上述方法调用的令牌
- (void)application:(UIApplication *)iApplication didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)iDeviceToken
- (void)application:(UIApplication *)iApplication didFailToRegisterForRemoteNotificationsWithError:(NSError *)iError
如果您没有获得推送令牌,那么错误方法 didFailToRegisterForRemoteNotificationsWithError
一定会给您一些有用的信息。