我有2部iphone:1 - ios 10和2 - ios 9
尝试第一部iphone:
当用户点击"允许"时,不会调用 didRegisterForRemoteNotificationsWithDeviceToken
方法。在警报上
但是,调用方法didRegisterUserNotificationSettings
。
在这种情况下,设备不会收到推送通知。
尝试第二部iphone:
这两种方法都在这里调用。并且设备会收到推送通知。
然后我查看了模拟器ios 8
在这种情况下与第1次相同。只调用一种方法。
我检查了类似问题的一些答案,但他们并没有帮助我。 我怀疑这个问题是在推送通知设置中的某个地方,因为它可以正常工作。 所以这个问题就在ios 10中。
问题是:
didRegisterForRemoteNotificationsWithDeviceToken
期待您的帮助!
答案 0 :(得分:9)
对于使用xCode 8 GM的iOS 10。
此问题通过以下步骤解决。 要求: - Xcode 8 GM Seed。 MAC OS: - EL 10.11.6上尉
请勿删除IOS 9或更低版本的代码。
第1步: - 转到 - > Xcode中的目标设置 - >能力 - >启用PushNotifications。
第2步: - 添加UserNotifications框架 - >构建阶段 - >链接库
第3步: -
#import <UserNotifications/UserNotifications.h>
@interface AppDelegate : UIResponder <UIApplicationDelegate,UNUserNotificationCenterDelegate>
@end
第4步: - 在方法didFinishLaunchingWithOptions中注册UIUserNotificationSettings。
-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
if(SYSTEM_VERSION_EQUALTO(@"10.0")){
UNUserNotificationCenter *notifiCenter = [UNUserNotificationCenter currentNotificationCenter];
notifiCenter.delegate = self;
[notifiCenter requestAuthorizationWithOptions:(UNAuthorizationOptionSound | UNAuthorizationOptionAlert | UNAuthorizationOptionBadge) completionHandler:^(BOOL granted, NSError * _Nullable error){
if( !error ){
[[UIApplication sharedApplication] registerForRemoteNotifications];
}
}];
}
return YES;
}
步骤5: - 实施UNUserNotificationCenterDelegate的2个委托方法。
-(void)userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions options))completionHandler{
//Do Your Code.................Enjoy!!!!
}
-(void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void(^)())completionHandler{
}
答案 1 :(得分:0)
您应该在didFinishLaunchingWithOptions
中调用此方法func registerForNotifications(){
if #available(iOS 10.0, *) {
let center = UNUserNotificationCenter.current()
center.delegate = self
center.requestAuthorization(options:[.alert,.sound,.badge]) { (granted, error) in
if granted{
UIApplication.shared.registerForRemoteNotifications()
}else{
print("Notification permission denied.")
if !(SharedPrefs.sharedInstance!.isLoggedIn){
Defaults.sharedPref.removeNotificationToken()
}else{
UIApplication.shared.unregisterForRemoteNotifications()
print("We will delete the token at the time of logout")
}
}
}
} else {
// For ios 9 and below
let type: UIUserNotificationType = [.alert,.sound,.badge];
let setting = UIUserNotificationSettings(types: type, categories: nil);
UIApplication.shared.registerUserNotificationSettings(setting);
UIApplication.shared.registerForRemoteNotifications()
}
}
答案 2 :(得分:0)
您可能需要查看“项目设置”。选择您的项目。转到第二个标签 - &gt;能力 - &gt;选择推送通知为开。