- 投稿日:2021-03-15T22:53:33+09:00
Xcode シュミレーター @が打てない時の対処法
- 投稿日:2021-03-15T19:25:15+09:00
[Swift] Firebase-Authentication(新規登録)を使ってみた
概要
Firebaseを使ってみたい!ということで、
サンプルアプリを通して学習していきます。第一回目は、認証機能を用意してくれているAuthenticationの新規ユーザー登録です。
今回はメールアドレスでの登録を使いました。※注意
各UIView(部品)はコードで実装しております。
Storyboardを使用しているからは注意してください。完成品
サクッとコードがみたい場合はこちらです。
https://github.com/ksy781/FirebaseAuthentication/blob/main/FirebaseAuthentication/ViewController.swift環境
ツール バージョン Xcode 12.4 Swift 5.3.2 Cocoapods 1.10.1 FirebaseAuth 7.7.0 事前準備(設定)
実践
- Firebaseのインポート設定
- AppDelegateファイルへFirebaseをインポートします。
- FirebaseApp.configure()を記載します。
⇨ これでアプリ内でFirebaseが用意してくれている設定を利用することができます。AppDelegate.swiftimport UIKit import Firebase @main class AppDelegate: UIResponder, UIApplicationDelegate { func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { FirebaseApp.configure() return true }
- 登録機能の実装
- ボタンを押下したらFirebase側へ入力内応を登録(通信)してくれます。
- createUserはFirebase側で用意したメソッドで、その中に入力値とエラーハンドリングを記載します。
ViewController.swift// MARK: - Actions @objc func didTapLoginButton() { guard let email = emailTextField.text else { return } guard let password = passwordTextField.text else { return } Auth.auth().createUser(withEmail: email, password: password) { (authResult, error) in if let error = error { self.alert(settitle: "エラー", setmessage: "新規作成に失敗しました!") return } guard let uid = authResult?.user.uid else { return } self.alert(settitle: "成功", setmessage: "新規作成しました!") } }ここからどんどんFirebase使ってみたいと思います!
- 投稿日:2021-03-15T16:41:12+09:00
Firebaseを使用してiOSアプリにプッシュ通知機能を実装する
はじめに
Firebaseの
Cloud Messaging
を使用してアプリにプッシュ通知を実装します。前提条件
Apple Developer Programの登録と、Firebaseを導入していること前提で書いていきます。
プッシュ通知の仕組み
iOSの場合、Appleが提供しているプッシュ通知サービスAPNs(Apple Push Notification Service)を介して
プッシュ通知を配信しています。
出典:【Swift】iOSアプリにプッシュ通知を実装したサンプルアプリを作ってみた
このサービスのおかげで
Cloud Messaging
からプッシュ通知が送れるという訳です。実装する前に
まずは、
Cloud Messaging
を使用するために必要なライブラリをインストールしましょう。因みに自分はSPMでインストールしました。
Swift Package Manager (SwiftPM) を使ってみよう ~導入編~実装
・Capabilityを設定する
まずはプッシュ通知に必要な
Capabilityを設定
しましょう。1.TARGETS > Signing & Capabilities > + Capability をクリックする
2.Background ModesとPush Notificationsを追加する
3.Background Modes内のRemote notifiationsにチェックする
以上の流れを終えると、プロジェクト内に
プロジェクト名.entitlements
ファイルが追加されます。
このファイルは、
プッシュ通知の登録時に開発環境と本番環境のどちらのAPNsを使用するかを自動的に指定
します。
APS Environment Entitlement・APNs認証キーを発行する
APNsを介してCloud Messagingに接続するには
APNs認証キー
を発行して
Firebaseにアップロード
しなくてはいけません。1.Apple Developer Account > Certificates, Identifiers & Profiles > Keys > Keys+をクリックする
2.ページ内でKey Nameを入力 > Apple Push Notifications service (APNs)をチェック > continueをクリックする
3.APNs認証キーが発行されたらダウンロードする
これでFirebaseにアップロードする
APNs認証キー
が取得できました。・Firebaseプロジェクト内でAPNs認証キーをアップロードする
それでは、APNs認証キーをFirebaseにアップロードしましょう。
1.「プロジェクトの概要」の左にある歯車マークから「プロジェクトを設定」をクリックする
2.ページ上部にあるCloud Messaging > iOSアプリの構成 > APNs認証キーからアップロードする
3.APNs認証キーをアップロードする際に必要なキーIDとチームIDを入力してアップロードを完了させる
キーIDは、Apple Developer AccountのKeys > 自分のAPNs認証キー >
Key ID
から確認できます。チームIDは、Apple Developer AccountのIdentifiers > 自分のプロジェクト >
App ID Prefix
から確認できます。・実装コードを書く
必要最低限のコードのみを書きますのでご了承下さい。
import UIKit import Firebase @main class AppDelegate: UIResponder, UIApplicationDelegate { func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { // Coloud Messagingのデリゲート Messaging.messaging().delegate = self // 通知関連のアクションを処理 UNUserNotificationCenter.current().delegate = self // 通知の許可をユーザーにリクエストする UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .badge, .sound]) { (granted, error) in if let error = error { print(error.localizedDescription) return } if granted { // aregisterForRemoteNotificationsは必ずメインスレッドで実行する DispatchQueue.main.async { // Appleプッシュ通知サービスを介してリモート通知を受信するための登録を行う application.registerForRemoteNotifications() } } } return true } } extension AppDelegate: UNUserNotificationCenterDelegate { // アプリがフォアグラウンドで通知を受け取ったときに呼ばれる func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) { let userInfo = notification.request.content.userInfo print("========== Print full message =========") print(userInfo) print("===============") // プッシュ通知の表示方法を決める completionHandler([.banner, .sound, .badge]) } } extension AppDelegate: MessagingDelegate { // FCMトークンが利用可能になったり、更新されたりすると呼ばれる func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String?) { print("===============") print("Firebase registration token: \(String(describing: fcmToken))") print("===============") } }因みにiOS10以降なら上記のコードで大丈夫ですが、
iOS10未満だと実装コードが変わってきます
。
iOS で Firebase Cloud Messaging クライアント アプリを設定する | Firebase・プッシュ通知を送る
Firebaseプロジェクト内の
Cloud Messaging
からプッシュ通知を送りましょう。テスト送信をしたい場合は、
テスト メッセージを送信
から送ることができます。
テスト メッセージを送信
をクリックし、FCM登録トークンを追加
を入力すると
テスト送信を端末に送ることが出来ます。
因みに
FCM登録トークン
は先ほど記述したデリゲートメソッドから吐き出されます↓func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String?) { print("===============") print("Firebase registration token: \(String(describing: fcmToken))") print("===============") }おわりに
画像や動画もプッシュ通知と一緒に送ることができますが、調べてみると難しそうでした。
もし、実装できたらQiitaにまとめようと思います。
参考
Firebase Cloud Messagingを使ってアプリに通知機能を実装する
Push Notifications with Firebase iOS Swift 5 & Xcode 11.5 | Youtube
- 投稿日:2021-03-15T16:41:12+09:00
Firebaseを使用してiOSアプリにプッシュ通知を実装する
はじめに
Firebaseの
Cloud Messaging
を使用してアプリにプッシュ通知を実装します。前提条件
Apple Developer Programの登録と、Firebaseを導入していること前提で書いていきます。
プッシュ通知の仕組み
iOSの場合、Appleが提供しているプッシュ通知サービスAPNs(Apple Push Notification Service)を介して
プッシュ通知を配信しています。
出典:【Swift】iOSアプリにプッシュ通知を実装したサンプルアプリを作ってみた
このサービスのおかげで
Cloud Messaging
からプッシュ通知が送れるという訳です。実装する前に
まずは、
Cloud Messaging
を使用するために必要なライブラリをインストールしましょう。因みに自分はSPMでインストールしました。
Swift Package Manager (SwiftPM) を使ってみよう ~導入編~実装
・Capabilityを設定する
まずはプッシュ通知に必要な
Capabilityを設定
しましょう。1.TARGETS > Signing & Capabilities > + Capability をクリックする
2.Background ModesとPush Notificationsを追加する
3.Background Modes内のRemote notifiationsにチェックする
以上の流れを終えると、プロジェクト内に
プロジェクト名.entitlements
ファイルが追加されます。
このファイルは、
プッシュ通知の登録時に開発環境と本番環境のどちらのAPNsを使用するかを自動的に指定
します。
APS Environment Entitlement・APNs認証キーを発行する
APNsを介してCloud Messagingに接続するには
APNs認証キー
を発行して
Firebaseにアップロード
しなくてはいけません。1.Apple Developer Account > Certificates, Identifiers & Profiles > Keys > Keys+をクリックする
2.ページ内でKey Nameを入力 > Apple Push Notifications service (APNs)をチェック > continueをクリックする
3.APNs認証キーが発行されたらダウンロードする
これでFirebaseにアップロードする
APNs認証キー
が取得できました。・Firebaseプロジェクト内でAPNs認証キーをアップロードする
それでは、APNs認証キーをFirebaseにアップロードしましょう。
1.「プロジェクトの概要」の左にある歯車マークから「プロジェクトを設定」をクリックする
2.ページ上部にあるCloud Messaging > iOSアプリの構成 > APNs認証キーからアップロードする
3.APNs認証キーをアップロードする際に必要なキーIDとチームIDを入力してアップロードを完了させる
キーIDは、Apple Developer AccountのKeys > 自分のAPNs認証キー >
Key ID
から確認できます。チームIDは、Apple Developer AccountのIdentifiers > 自分のプロジェクト >
App ID Prefix
から確認できます。・実装コードを書く
必要最低限のコードのみを書きますのでご了承下さい。
import UIKit import Firebase @main class AppDelegate: UIResponder, UIApplicationDelegate { func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { // Coloud Messagingのデリゲート Messaging.messaging().delegate = self // 通知関連のアクションを処理 UNUserNotificationCenter.current().delegate = self // 通知の許可をユーザーにリクエストする UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .badge, .sound]) { (granted, error) in if let error = error { print(error.localizedDescription) return } if granted { // aregisterForRemoteNotificationsは必ずメインスレッドで実行する DispatchQueue.main.async { // Appleプッシュ通知サービスを介してリモート通知を受信するための登録を行う application.registerForRemoteNotifications() } } } return true } } extension AppDelegate: UNUserNotificationCenterDelegate { // アプリがフォアグラウンドで通知を受け取ったときに呼ばれる func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) { let userInfo = notification.request.content.userInfo print("========== Print full message =========") print(userInfo) print("===============") // プッシュ通知の表示方法を決める completionHandler([.banner, .sound, .badge]) } } extension AppDelegate: MessagingDelegate { // FCMトークンが利用可能になったり、更新されたりすると呼ばれる func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String?) { print("===============") print("Firebase registration token: \(String(describing: fcmToken))") print("===============") } }因みにiOS10以降なら上記のコードでOKですが、
iOS10未満だと実装コードが変わってきます
。
iOS で Firebase Cloud Messaging クライアント アプリを設定する | Firebase・プッシュ通知を送る
Firebaseプロジェクト内の
Cloud Messaging
からプッシュ通知を送りましょう。テスト送信をしたい場合は、
テスト メッセージを送信
から送ることができます。Firebaseのプロジェクト上でプッシュ通知を送ると
開発・本番用関係なく送信
されますので
開発用ではこちらでプッシュ通知を送りましょう。
テスト メッセージを送信
をクリックし、FCM登録トークンを追加
を入力すると
テスト送信を端末に送ることが出来ます。
FCM登録トークン
は先ほど記述したデリゲートメソッドから吐き出されます。func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String?) { print("===============") print("Firebase registration token: \(String(describing: fcmToken))") print("===============") }おわりに
画像や動画もプッシュ通知と一緒に送ることができますが、調べてみると難しそうでした。
もし、実装できたらQiitaにまとめようと思います。
参考
Firebase Cloud Messagingを使ってアプリに通知機能を実装する
Push Notifications with Firebase iOS Swift 5 & Xcode 11.5 | Youtube
- 投稿日:2021-03-15T12:13:11+09:00
swiftのMapKit(基礎)
フレームワークのインポート
import MapKitMKMapViewの生成
//mapViewの生成 let mapView = MKMapView(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.height)) self.view.addSubview(mapView)MKMapViewの中心にピンを生成する
let mapView = MKMapView(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.height)) self.view.addSubview(mapView) //緯度と軽度 let location: CLLocationCoordinate2D = CLLocationCoordinate2DMake(37, 140) var region: MKCoordinateRegion = mapView.region //表示するマップの中心座標を設定 region.center = location //地図の拡大状態の設定 //設定しないと地図の表示が最縮小される region.span.latitudeDelta = 0.5 region.span.longitudeDelta = 0.5 //regionに設定したマップの表示設定をmapViewに反映 mapView.setRegion(region, animated: true) //マップのタイプ mapView.mapType = .hybridFlyover //マップのデリゲートの設定 mapView.delegate = self //3Dの見え方の設定 mapView.isPitchEnabled = true //ピン留めの生成 let annotation = MKPointAnnotation() //どこにピンを設置するか annotation.coordinate = CLLocationCoordinate2DMake(location.latitude, location.longitude) annotation.title = "タイトル" annotation.subtitle = "サブタイトル" mapView.addAnnotation(annotation)複数箇所のピン留め
mapView.addAnnotations([annotation, annotation2, ...])MKMapViewDelegate
extension ViewController: MKMapViewDelegate { func mapView(_ mapView: MKMapView, didSelect view: MKAnnotationView) { print("ピン留めが選択された時に呼ばれる") } func mapView(_ mapView: MKMapView, didDeselect view: MKAnnotationView) { print("ピン留めが選択解除になった時に呼ばれる") } func mapViewWillStartLoadingMap(_ mapView: MKMapView) { print("マップビューを読み込もうとしている時に呼ばれる") } func mapViewDidFinishLoadingMap(_ mapView: MKMapView) { print("マップビューが必要なマップデータを読み込んだ時に呼ばれる") } func mapView(_ mapView: MKMapView, didUpdate userLocation: MKUserLocation) { print("ユーザーの場所が更新された時に呼ばれる") } func mapView(_ mapView: MKMapView, didAdd views: [MKAnnotationView]) { print("ひとつ以上のピン留めがマップに追加された時に呼ばれる") } }MKMapViewのプロパティ
プロパティ名 型 説明 delegate MKMapViewDelegate デリゲートを指定 mapType MKMapType .standard: 標準の地図 .satellite: 航空写真 .hybrid: 標準の地図+航空写真 .satelliteFlyover: 3D航空写真 .hybridFlyover: 3D標準の地図+航空写真 isZoomEnabled Bool ズームできるかどうか isScrollEnabled Bool 画面をスクロールできるかどうか isRotateEnabled Bool マップが回転するかどうか showCompass Bool コンパスを右上に表示するかどうか showsTraffic Bool 交通情報を表示すかどうか showsBuilding Bool 建物の名前を表示するかどうか isUserLocationVisble Bool 現在の位置マップに表示されるかどうか isPitchEnabled Bool 3Dに対応したmapType region MKcoodinateRegion マップビューで現在表示されているエリア camera MKMapCamera マップの外観を決定するために使用するカメラ annotaions [MKAnnotaion] ピン留め selectedAnnotations [MKAnnotation] 現在選択されているピン留め MKMapViewのメソッド
メソッド名 説明 setCenter(MKCoordinateRegion, animated: Bool) regionに設定したマップの設定をMKMapViewに反映 addAnnotation(MKAnnotation) 指定したピン留めの追加 removeAnnotation(MKAnnotation) 指定したピン留めの消去 addAnnotations([MKAnnotation]) 複数のピン留めの追加 removeAnnotations([MKAnnotation]) 複数のピン留めの消去 MKMapViewDelegateメソッド
メソッド名 説明 mapViewWillStartLoadMap(MKMapView) マップビューを読み込もうとしたときに呼ばれる mapViewDidFinishLoadingMap(MKMapView) マップビューが正常にロードした時に呼ばれる mapView(MKMapView, didUpdate UserLocation: MKUserLocation) ユーザーの場所が更新された時に呼ばれる mapView(MKMapView, didSelect view: MKAnnotationView) ピン留めが選択された時に呼ばれる mapView(MKMapView, didDeselect: MKAnnotationView) ピン留めの一つが選択消去された時に呼ばれる mapView(MKMapView, didAdd views: [MKAnnotationView]) 新しくピン留めがマップに追加された時に呼ばれる