1. ホーム
  2. ios

[解決済み] Xcode 8/Swift 3.0でのPush Notificationの登録は?

2022-08-16 15:17:15

質問

私は自分のアプリを Xcode 8.0 で動作させようとしていますが、エラーに遭遇しています。私はこのコードがswiftの以前のバージョンでうまく動作したことを知っていますが、私はこのためのコードが新しいバージョンで変更されていると仮定しています。以下は、私が実行しようとしているコードです。

let settings = UIUserNotificationSettings(forTypes: [.Sound, .Alert, .Badge], categories: nil)     
UIApplication.sharedApplication().registerUserNotificationSettings(settings)
UIApplication.shared().registerForRemoteNotifications()

私が得たエラーは "引数ラベル '(forTypes:, categories:)' do not match any available overloads".The Argument labels '(forTypes:, categories:)' do not match any available overloads" です。

これを動作させるために試すことができる別のコマンドはありますか?

どのように解決するのですか?

インポートする UserNotifications フレームワークをインポートし UNUserNotificationCenterDelegate を AppDelegate.swift に追加します。

ユーザーの権限を要求する

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {


        let center = UNUserNotificationCenter.current()
        center.requestAuthorization(options:[.badge, .alert, .sound]) { (granted, error) in
            // Enable or disable features based on authorization.
        }
        application.registerForRemoteNotifications()
        return true
}

デバイストークンの取得

func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {

    let deviceTokenString = deviceToken.reduce("", {$0 + String(format: "%02X", $1)})
    print(deviceTokenString)
}

エラーが発生した場合

func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) {

        print("i am not available in simulator \(error)")
}

許可されたパーミッションを知る必要がある場合

UNUserNotificationCenter.current().getNotificationSettings(){ (settings) in

            switch settings.soundSetting{
            case .enabled:

                print("enabled sound setting")

            case .disabled:

                print("setting has been disabled")

            case .notSupported:
                print("something vital went wrong here")
            }
        }