Google Flutter

Google Flutter: เคล็ดลับวิธีตั้งค่าใช้งาน Firebase ในแอพ iOS ง่ายๆ ไม่ล่อบั๊ก

เรื่องที่เกี่ยวข้อง - , ,

ใครที่เรียนสร้างแอพด้วย Google Flutter Online จะมีช่วงที่เราได้ลองใช้งาน Firebase ในแอพของเรา ซึ่งขั้นตอนเริ่มต้น ก็คือการทำข้อมูลที่เราสร้างไว้บน Firebase มาเชื่อมต่อใช้งานในแอพ Flutter ของเราบน iOS

ทีนี้หลังจากที่เราทำการเอาไฟล์ GoogleService-Info.plist มาใส่ในโปรเจค Xcode แล้ว ขั้นตอนสำคัญไม่แพ้กันเลยก็คือการใส่โค้ดในไฟล์ Swift เพื่อให้ Firebase พร้อมใช้งาน

ทีนี้มันมีจุดเล็กๆ ครับ ที่หลังจากทำการใช้ Firebase ใน Flutter มาหลายครั้ง เจอ bug บ้าง build ไม่ขึ้นบ้าง สิ่งละอันพันละน้อยพาพลมาสังเกตตรงส่วนของการใส่ โค้ดในการ configure ตัว Firebase มีความเกี่ยวพันกับปัญหาจุกจิกพวกนั้นครับ

ดังนั้น ถ้าเราใส่โค้ดถูกที่ ก็น่าจะทำให้เราสามารถหลีกเลี่ยงต้นตอของปัญหาโลกแตกหลายๆ อันที่พลเจอมา น่าจะดีกว่าใช่ไหมล่ะ

เรามาดูไฟล์ AppDelegate.swift กันดีกว่า

import UIKit
import Flutter

@UIApplicationMain
@objc class AppDelegate: FlutterAppDelegate {
  override func application(
    _ application: UIApplication,
    didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
  ) -> Bool {
    GeneratedPluginRegistrant.register(with: self)
    return super.application(application, didFinishLaunchingWithOptions: launchOptions)
  }
}

ไฟล์นี้แหละ ที่ระหว่างการ Configure แอพ iOS ของ Firebase เราตามขั้นตอนที่เขาบอกจะเป็นประมาณนี้

import UIKit
import Firebase // เพิ่มบรรทัดนี้

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

  var window: UIWindow?

  func application(_ application: UIApplication,
    didFinishLaunchingWithOptions launchOptions:
      [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    FirebaseApp.configure() // เพิ่มบรรทัดนี้
    return true
  }
}

จะเห็นว่า จะมีอยู่ 2 บรรทัดที่เราต้องเพิ่มเข้าไปในไฟล์ AppDelegate.swift

import Firebase

FirebaseApp.configure()

คำสั่งแรก ไม่เท่าไหร่ แต่คำสั่งที่ 2 เนี่ย มันไม่ได้มีที่ว่างแบบเดียวกับในตัวอย่างของ Firebase นี่สิ มันเป็นแบบด้านล่างนี้

override func application(
    _ application: UIApplication,
    didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
  ) -> Bool {
    GeneratedPluginRegistrant.register(with: self)
    return super.application(application, didFinishLaunchingWithOptions: launchOptions)
  }

ซึ่งกลายเป็นว่าส่วนของ Firebase ที่วางลงไปใน function นี้จะมี 2 ตำแหน่งครับ

override func application(
    _ application: UIApplication,
    didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
  ) -> Bool {
    // ตำแหน่งที่ 1
    GeneratedPluginRegistrant.register(with: self)
    // ตำแหน่งที่ 2
    return super.application(application, didFinishLaunchingWithOptions: launchOptions)
  }

ซึ่งจาก bug ที่เจอๆ มา จะเกิดขึ้นจากการวางคำส่ัง FirebaseApp.configure() ไว้ในตำแหน่งที่ 2 ครับ

override func application(
    _ application: UIApplication,
    didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
  ) -> Bool {
    
    GeneratedPluginRegistrant.register(with: self)
    FirebaseApp.configure() // ตำแหน่งที่ 2
    return super.application(application, didFinishLaunchingWithOptions: launchOptions)
  }

ดังนั้นหากเราวางไว้ในส่วนตำแหน่งที่ 1 จะพบปัญหาจุกจิกน้อยกว่า ในส่วนของการใช้ Firebase กับแอพ iOS

override func application(
    _ application: UIApplication,
    didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
  ) -> Bool {
    FirebaseApp.configure() // ตำแหน่งที่ 1
    GeneratedPluginRegistrant.register(with: self)
  
    return super.application(application, didFinishLaunchingWithOptions: launchOptions)
  }

ใครเจอปัญหาจุกจิกมากมายลองเอาเทคนิคนี้ไปใช้กันดูนะครับ

เริ่มต้นเรียนรู้สร้างแอพ iOS และ Android ด้วย Google Flutter ไปกับโค้ชพล

เหมาะสำหรับผู้เริ่มต้น

เขียนครั้งเดียว ใช้ได้ทั้งระบบ iOS และ Android ประหยัดเวลา

เรียนได้ทุกเวลา ไม่มีวันหมดอายุ

ได้รู้ตั้งแต่วิธีติดตั้งโปรแกรม จนเอาขึ้นApp Store และ Play Store

ได้ทำแอพของจริง เริ่มต้นจาก 0 ทุกโปรเจค มีระบบถามตอบ กรณีติดปัญหา

 

Loading Facebook Comments ...
Menu