iOS10 のプッシュ通知を設定しようとしています。以前は 10 より前のバージョンでは機能していました。
いくつかのガイドを読んでみると、私の設定は次のようになります。
// Register for the defined notifications
if #available(iOS 10.0, *) {
let center = UNUserNotificationCenter.current()
center.delegate = UIApplication.shared.delegate as! AppDelegate
center.requestAuthorization(options: [.alert, .badge, .sound]) { (granted, error) in
if error == nil {
UIApplication.shared.registerForRemoteNotifications()
}
}
} else {
// Fallback on earlier versions
let notificationSettings = UIUserNotificationSettings(types: [.alert, .badge, .sound], categories: [autoCancelCategory])
UIApplication.shared.registerUserNotificationSettings(notificationSettings)
UIApplication.shared.registerForRemoteNotifications()
}
これは、ビュー コントローラーの 1 つでログイン時に呼び出されます。
そして現在AppDelegate
、 では に準拠しておりUNUserNotificationCenterDelegate
、次のメソッドがあります。
@available(iOS 10.0, *)
func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
print("Got a push!")
}
@available(iOS 10.0, *)
func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
print("Got a push!")
}
そして、私はまた、次のものも持っています:
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
let settings = UserDefaults.standard
settings.setValue(deviceToken, forKey: "deviceToken")
}
デバイス トークンは としてサーバーにアップロードされData
、以前のバージョンでは問題なく動作していました。
サーバー上のトークンが電話機上のトークンと一致することを確認しました。
のすべてのターゲットに対してプッシュ通知を有効にしCapabilities
、 もチェックしましたAdd the push Notifications entitlement to your entitlements file
。
プッシュでは何も受信されません。
ここで間違っている点について何かアイデアはありますか? 何かご指摘いただければ幸いです。
ありがとうございます!
編集: iOS9 ではプッシュ通知が機能していないことにも気付きました。
ベストアンサー1
ビルド設定 > コード署名エンタイトルメントにエンタイトルメント ファイルへの参照があることを確認しましたか? [AppName].entitlements。
資格ファイルに正しい情報が含まれていることを確認します。
(キー:APS環境、値:開発)
それ以外では、プッシュ証明書の再生成を試すことができます。IOS 10 へのアップグレード後に本番環境で動作させるには、新しい証明書を作成する必要がありました (ただし、サンドボックス環境では不要です)。