ফায়ারবেস আইওএস কোডল্যাব সুইফ্ট

2efe6805ef369641.png

বন্ধুত্বপূর্ণ চ্যাট কোডল্যাবে আপনাকে স্বাগতম। এই কোডল্যাবে আপনি কীভাবে আইওএস অ্যাপ্লিকেশন তৈরি করতে ফায়ারবেস প্ল্যাটফর্মটি ব্যবহার করবেন তা শিখবেন। আপনি একটি চ্যাট ক্লায়েন্ট বাস্তবায়ন করবেন এবং ফায়ারবেস ব্যবহার করে এর কার্যকারিতা পর্যবেক্ষণ করবেন।

এই কোডল্যাবটি ওজেক্টিভ-সি তেও উপলব্ধ।

আপনি কি শিখবেন

  • ব্যবহারকারীদের সাইন ইন করার অনুমতি দিন।
  • ফায়ারবেস রিয়েলটাইম ডেটাবেস ব্যবহার করে ডেটা সিঙ্ক করুন।
  • ফায়ারবেস স্টোরেজে বাইনারি ফাইলগুলি সঞ্চয় করুন।

আপনার যা দরকার

  • এক্সকোড
  • কোকোপডস
  • আইওএস 8.0+ বা সিমুলেটর সহ একটি পরীক্ষা ডিভাইস

আপনি এই টিউটোরিয়ালটি কীভাবে ব্যবহার করবেন?

এটি কেবল মাধ্যমে পড়ুন এটি পড়ুন এবং অনুশীলনগুলি সম্পূর্ণ করুন

আইওএস অ্যাপস তৈরির সাথে আপনার অভিজ্ঞতা কীভাবে রেট করবে?

নবীনতা মধ্যবর্তী দক্ষ

কমান্ড লাইন থেকে গিটহাব সংগ্রহস্থলটি ক্লোন করুন।

$ git clone https://github.com/firebase/codelab-friendlychat-ios

2f4c98d858c453fe.png

স্টার্টার অ্যাপ্লিকেশনটি তৈরি করতে:

  1. একটি টার্মিনাল উইন্ডোতে, নেভিগেট করুন android_studio_folder.png আপনার নমুনা কোড ডাউনলোড থেকে ios-starter/swift-starter ডিরেক্টরি
  2. pod install --repo-update চালান pod install --repo-update
  3. এক্সকোডে প্রকল্পটি খুলতে বন্ধুত্বের চ্যাটসুইফ্ট.এক্সকোর্সস্পেস ফাইলটি খুলুন।
  4. ক্লিক করুন 98205811bbed9d74.png রান বোতাম।

আপনার বন্ধুত্বপূর্ণ চ্যাট হোম স্ক্রিনটি কয়েক সেকেন্ড পরে উপস্থিত হওয়া উচিত। ইউআই উপস্থিত হতে হবে। তবে এই মুহুর্তে আপনি সাইন ইন করতে, বার্তা প্রেরণ বা গ্রহণ করতে পারবেন না। আপনি পরবর্তী পদক্ষেপটি শেষ না করা পর্যন্ত অ্যাপ্লিকেশনটি একটি ব্যতিক্রম সহ বাতিল হয়ে যাবে।

প্রকল্প তৈরি করুন

ফায়ারবেস কনসোল থেকে প্রকল্প যুক্ত করুন নির্বাচন করুন

প্রজেক্টকে FriendlyChat কল করুন, তারপরে তৈরি প্রকল্পে ক্লিক করুন।

2015-11-06 থেকে স্ক্রিনশট 14: 13: 39.png

আপনার আইওএস অ্যাপ্লিকেশনটি সংযুক্ত করুন

  1. আপনার নতুন প্রকল্পের প্রকল্প ওভারভিউ স্ক্রীন থেকে, আপনার আইওএস অ্যাপ্লিকেশনটিতে ফায়ারবেস যুক্ত করুন ক্লিক করুন
  2. " com.google.firebase.codelab.FriendlyChatSwift " হিসাবে বান্ডেল আইডি লিখুন।
  3. " 123456 " হিসাবে অ্যাপ স্টোর আইডি প্রবেশ করুন।
  4. রেজিস্টার অ্যাপ্লিকেশন ক্লিক করুন

আপনার অ্যাপ্লিকেশনে গুগল সার্ভিস-ইনফো.প্লেস্ট ফাইল যুক্ত করুন

দ্বিতীয় স্ক্রিনে আপনার অ্যাপ্লিকেশনের জন্য প্রয়োজনীয় সমস্ত ফায়ারবেস মেটাডেটা রয়েছে এমন একটি কনফিগারেশন ফাইল ডাউনলোড করতে গুগল সার্ভিস-ইনফো.লিস্ট ডাউনলোড করুন। আপনার অ্যাপ্লিকেশনে সেই ফাইলটি অনুলিপি করুন এবং এটিকে ফ্রেন্ডলি চ্যাটসুইফ্ট টার্গেটে যুক্ত করুন।

এটি বন্ধ করতে আপনি এখন পপআপের উপরের ডানদিকে "এক্স" ক্লিক করতে পারেন - 3 এবং 4 পদক্ষেপগুলি এড়িয়ে যাচ্ছেন - আপনি এখানে এই পদক্ষেপগুলি সম্পাদন করবেন।

19d59efb213ddbdc.png

ফায়ারবেস মডিউল আমদানি করুন

Firebase মডিউলটি আমদানি করা হয়েছে তা নিশ্চিত করে শুরু করুন।

AppDelegate.swift , FCViewController.swift

import Firebase

অ্যাপডেলিগেটে ফায়ারবেস কনফিগার করুন

আপনার .plist ফাইল থেকে অন্তর্নিহিত ফায়ারবেস পরিষেবাদি কনফিগার করতে ফায়ারবেস অ্যাপে "কনফিগার" পদ্ধতিটি ব্যবহার করুন: didFinishLaunchingWithOptions ফাংশন।

AppDelegate.swift

  func application(_ application: UIApplication, didFinishLaunchingWithOptions
      launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
  FirebaseApp.configure()
  GIDSignIn.sharedInstance().delegate = self
  return true
}

প্রমাণীকরণকারী ব্যবহারকারীদের মধ্যে সীমাবদ্ধ করতে বিধিগুলি ব্যবহার করুন

আমরা এখন কোনও বার্তা পড়া বা লেখার আগে প্রমাণীকরণের প্রয়োজনের একটি বিধি যুক্ত করব। এটি করার জন্য আমরা আমাদের বার্তাগুলির ডেটা অবজেক্টে নিম্নলিখিত নিয়মগুলি যুক্ত করি। ফায়ারবেস কনসোলের ডাটাবেস বিভাগের মধ্যে থেকে রিয়েলটাইম ডেটাবেস নির্বাচন করুন, তারপরে নিয়ম ট্যাবে ক্লিক করুন। তারপরে নিয়মগুলি আপডেট করুন যাতে তারা এটিকে দেখতে লাগে:

{
  "rules": {
    "messages": {
      ".read": "auth != null",
      ".write": "auth != null"
    }
  }
}

এটি কীভাবে কাজ করে সে সম্পর্কে আরও তথ্যের জন্য ("লেখক" ভেরিয়েবলের ডকুমেন্টেশন সহ) ফায়ারবেস সুরক্ষা ডকুমেন্টেশন দেখুন

প্রমাণীকরণের API গুলি কনফিগার করুন

আপনার অ্যাপ্লিকেশনটি আপনার ব্যবহারকারীর পক্ষে ফায়ারবেস প্রমাণীকরণ এপিআইগুলিতে অ্যাক্সেস করার আগে আপনাকে এটিকে সক্ষম করতে হবে

  1. ফায়ারবেস কনসোল নেভিগেট করুন এবং আপনার প্রকল্প নির্বাচন করুন
  2. প্রমাণীকরণ নির্বাচন করুন
  3. সাইন ইন পদ্ধতি ট্যাবটি নির্বাচন করুন
  4. সক্ষম করা (নীল) এ গুগল স্যুইচ টগল করুন
  5. ফলাফল ডায়ালগ উপর সংরক্ষণ টিপুন

"CONFIGURATION_NOT_FOUND" বার্তাটি দিয়ে যদি আপনি এই কোডলবটিতে পরে ত্রুটি পান তবে এই পদক্ষেপে ফিরে আসুন এবং আপনার কাজটি ডাবল পরীক্ষা করে দেখুন।

ফায়ারবেস আথ নির্ভরতা নিশ্চিত করুন

Podfile ফাইলটিতে Podfile অথ নির্ভরতা বিদ্যমান রয়েছে তা Podfile করুন।

পডফিল

pod 'Firebase/Auth'

গুগল সাইন ইন করার জন্য আপনার তথ্য.প্লেস্ট সেটআপ করুন।

আপনার এক্সকোড প্রকল্পে আপনাকে একটি কাস্টম URL স্কিম যুক্ত করতে হবে add

  1. আপনার প্রকল্পের কনফিগারেশনটি খুলুন: বাম গাছের ভিউতে প্রকল্পের নামটি ডাবল ক্লিক করুন। TARGETS বিভাগ থেকে আপনার অ্যাপ্লিকেশনটি নির্বাচন করুন, তারপরে তথ্য ট্যাবটি নির্বাচন করুন এবং URL টাইপ বিভাগটি প্রসারিত করুন।
  2. + বোতামটি ক্লিক করুন এবং আপনার বিপরীত ক্লায়েন্ট আইডির জন্য একটি URL স্কিম যুক্ত করুন। এই মানটি খুঁজে পেতে, গুগল সার্ভিস-ইনফো.লিস্ট কনফিগারেশন ফাইলটি খুলুন এবং REVERSED_CLIENT_ID কীটি সন্ধান করুন। এই কীটির মানটি অনুলিপি করুন এবং কনফিগারেশন পৃষ্ঠায় ইউআরএল স্কিমগুলি বাক্সে আটকে দিন। অন্যান্য ক্ষেত্রটি ফাঁকা ছেড়ে দিন।
  3. সম্পূর্ণ হয়ে গেলে, আপনার কনফিগারটিকে নিম্নলিখিতগুলির মতো কিছু দেখতে পাওয়া উচিত (তবে আপনার অ্যাপ্লিকেশন-নির্দিষ্ট মান সহ):

1b54d5bd2f4f1448.png

গুগল সাইন ইন জন্য ক্লায়েন্টআইডি সেট করুন

ফায়ারবেস কনফিগার হওয়ার পরে, আমরা "didFinishLaunchingWithOptions:" পদ্ধতির ভিতরে গুগল সাইন ইন সেট আপ করতে ক্লায়েন্টআইডি ব্যবহার করতে পারি।

AppDelegate.swift

  func application(_ application: UIApplication, didFinishLaunchingWithOptions
      launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
  FirebaseApp.configure()
  GIDSignIn.sharedInstance().clientID = FirebaseApp.app()?.options.clientID
  GIDSignIn.sharedInstance().delegate = self
  return true
}

সাইন ইন হ্যান্ডলারের সাথে যুক্ত করুন

একবার গুগল সাইন-ইন ফলাফল সফল হয়ে গেলে, ফায়ারবেস দিয়ে প্রমাণীকরণ করতে অ্যাকাউন্টটি ব্যবহার করুন।

AppDelegate.swift

  func sign(_ signIn: GIDSignIn!, didSignInFor user: GIDGoogleUser!, withError error: Error?) {
    if let error = error {
      print("Error \(error)")
      return
    }

    guard let authentication = user.authentication else { return }
    let credential = GoogleAuthProvider.credential(withIDToken: authentication.idToken,
                                                      accessToken: authentication.accessToken)
    Auth.auth().signIn(with: credential) { (user, error) in
      if let error = error {
        print("Error \(error)")
        return
      }
    }
  }

ব্যবহারকারীকে স্বয়ংক্রিয়ভাবে সাইন ইন করুন। তারপরে সফল সাইন ইন করার পরে ব্যবহারকারীকে অ্যাপটিতে প্রবেশ করতে ফায়ারবেস অথিতে একটি শ্রোতা যুক্ত করুন And

SignInViewController.swift

  override func viewDidLoad() {
    super.viewDidLoad()
    GIDSignIn.sharedInstance().uiDelegate = self
    GIDSignIn.sharedInstance().signInSilently()
    handle = Auth.auth().addStateDidChangeListener() { (auth, user) in
      if user != nil {
        MeasurementHelper.sendLoginEvent()
        self.performSegue(withIdentifier: Constants.Segues.SignInToFp, sender: nil)
      }
    }
  }

  deinit {
    if let handle = handle {
      Auth.auth().removeStateDidChangeListener(handle)
    }
  }

সাইন আউট

সাইন আউট পদ্ধতি যুক্ত করুন

এফসিভিউকন্ট্রোলআর সুইফট

  @IBAction func signOut(_ sender: UIButton) {
    let firebaseAuth = Auth.auth()
    do {
      try firebaseAuth.signOut()
      dismiss(animated: true, completion: nil)
    } catch let signOutError as NSError {
      print ("Error signing out: \(signOutError.localizedDescription)")
    }
  }

ব্যবহারকারীর সাইন ইন হিসাবে পরীক্ষা পাঠ্য বার্তা

  1. ক্লিক করুন 98205811bbed9d74.png রান বোতাম।
  2. আপনাকে অবিলম্বে সাইন ইন স্ক্রিনে প্রেরণ করা উচিত। গুগল সাইন-ইন বোতামটি আলতো চাপুন।
  3. তারপরে সবকিছু ঠিকঠাক কাজ করাতে আপনাকে বার্তা পর্দায় প্রেরণ করা উচিত।

2efe6805ef369641.png

বার্তা আমদানি করুন

ফায়ারবেস কনসোলে আপনার প্রকল্পে বাম নেভিগেশন বারে ডাটাবেস আইটেমটি নির্বাচন করুন। ডাটাবেসের ওভারফ্লো মেনুতে JSON আমদানি নির্বাচন করুন। বন্ধুত্বপূর্ণ initial_messages.json ডিরেক্টরিতে initial_messages.json ফাইলটিতে ব্রাউজ করুন, এটি নির্বাচন করুন এবং তারপরে আমদানি বোতামটি ক্লিক করুন। এটি বর্তমানে আপনার ডাটাবেজে থাকা কোনও ডেটা প্রতিস্থাপন করবে। আপনি আইটেমগুলি যুক্ত করতে এবং সরানোর জন্য সবুজ + এবং লাল এক্স ব্যবহার করে সরাসরি ডাটাবেস সম্পাদনা করতে পারেন।

20ccf4856b715b4c.png

আমদানি করার পরে আপনার ডাটাবেসটি দেখতে এমন হওয়া উচিত:

f3e0367f1c9cd187.png

ফায়ারবেস ডাটাবেস নির্ভরতা নিশ্চিত করুন

Podfile ফাইলের নির্ভরতা ব্লকে, Podfile Firebase/Database অন্তর্ভুক্ত রয়েছে তা নিশ্চিত করুন।

পডফিল

pod 'Firebase/Database'

বিদ্যমান বার্তাগুলি সিঙ্ক্রোনাইজ করুন

কোড যুক্ত করুন যা অ্যাপ্লিকেশন ইউআইতে নতুন যুক্ত হওয়া বার্তাগুলিকে সিঙ্ক্রোনাইজ করে।

আপনি এই বিভাগে কোড যুক্ত করবেন তা:

  • ফায়ারবেস ডাটাবেস সূচনা করুন এবং ডাটাবেসে করা পরিবর্তনগুলি পরিচালনা করতে শ্রোতা যুক্ত করুন।
  • DataSnapshot আপডেট করুন যাতে নতুন বার্তা প্রদর্শিত হবে।

আপনার এফসিভিউকন্ট্রোলারের "ডেইনিট", "কনফিগারড্যাটবেস", এবং "টেবিলভিউ: সেলফোরআর সূচকপথ:" পদ্ধতিগুলি সংশোধন করুন; নীচে সংজ্ঞায়িত কোড দিয়ে প্রতিস্থাপন:

এফসিভিউকন্ট্রোলআর সুইফট

  deinit {
    if let refHandle = _refHandle {
      self.ref.child("messages").removeObserver(withHandle: _refHandle)
    }
  }


  func configureDatabase() {
    ref = Database.database().reference()
    // Listen for new messages in the Firebase database
    _refHandle = self.ref.child("messages").observe(.childAdded, with: { [weak self] (snapshot) -> Void in
      guard let strongSelf = self else { return }
      strongSelf.messages.append(snapshot)
      strongSelf.clientTable.insertRows(at: [IndexPath(row: strongSelf.messages.count-1, section: 0)], with: .automatic)
    })
  }


  func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    // Dequeue cell
    let cell = self.clientTable.dequeueReusableCell(withIdentifier: "tableViewCell", for: indexPath)
    // Unpack message from Firebase DataSnapshot
    let messageSnapshot = self.messages[indexPath.row]
    guard let message = messageSnapshot.value as? [String: String] else { return cell }
    let name = message[Constants.MessageFields.name] ?? ""
    let text = message[Constants.MessageFields.text] ?? ""
    cell.textLabel?.text = name + ": " + text
    cell.imageView?.image = UIImage(named: "ic_account_circle")
    if let photoURL = message[Constants.MessageFields.photoURL], let URL = URL(string: photoURL),
        let data = try? Data(contentsOf: URL) {
      cell.imageView?.image = UIImage(data: data)
    }
    return cell
  }

পরীক্ষা বার্তা সিঙ্ক

  1. ক্লিক করুন 98205811bbed9d74.png রান বোতাম।
  2. বার্তা উইন্ডোতে যেতে সাইন ইন শুরু করতে ক্লিক করুন Click
  3. "বার্তা" প্রবেশের পাশের সবুজ + প্রতীকটিতে ক্লিক করে এবং নীচের মতো কোনও বস্তু যুক্ত করে সরাসরি ফায়ারবেস কনসোলে নতুন বার্তা যুক্ত করুন: f9876ffc8b316b14.png
  4. নিশ্চিত করুন যে তারা বন্ধুত্বপূর্ণ-চ্যাট ইউআইতে প্রদর্শিত হবে।

বার্তা প্রেরণ কার্যকর করুন

ডাটাবেসে মানগুলি পুশ করুন। আপনি যখন ফায়ারবেস রিয়েলটাইম ডেটাবেসে ডেটা যুক্ত করতে পুশ পদ্ধতিটি ব্যবহার করেন, তখন একটি স্বয়ংক্রিয় আইডি যুক্ত হবে। এই স্বয়ংক্রিয় উত্পাদিত আইডিগুলি অনুক্রমিক, যা নিশ্চিত করে যে নতুন বার্তাগুলি সঠিক ক্রমে যুক্ত হবে।

আপনার এফসিভিউকন্ট্রোলারের "সেন্ডম্যাসেজ:" পদ্ধতিটি পরিবর্তন করুন; নীচে সংজ্ঞায়িত কোড দিয়ে প্রতিস্থাপন:

এফসিভিউকন্ট্রোলআর সুইফট

  func sendMessage(withData data: [String: String]) {
    var mdata = data
    mdata[Constants.MessageFields.name] = Auth.auth().currentUser?.displayName
    if let photoURL = Auth.auth().currentUser?.photoURL {
      mdata[Constants.MessageFields.photoURL] = photoURL.absoluteString
    }

    // Push data to Firebase Database
    self.ref.child("messages").childByAutoId().setValue(mdata)
  }

বার্তা পাঠানোর পরীক্ষা করুন

  1. ক্লিক করুন 98205811bbed9d74.png রান বোতাম।
  2. বার্তা উইন্ডোতে যেতে সাইন ইন ক্লিক করুন
  3. একটি বার্তা টাইপ করুন এবং হিট প্রেরণ। নতুন বার্তাটি অ্যাপ্লিকেশন UI এবং ফায়ারবেস কনসোলে দৃশ্যমান হওয়া উচিত।

ফায়ারবেস স্টোরেজ নির্ভরতা নিশ্চিত করুন

Podfile নির্ভরতা ব্লকে Podfile Firebase/Storage অন্তর্ভুক্ত রয়েছে তা নিশ্চিত করুন।

পডফিল

pod 'Firebase/Storage'

ড্যাশবোর্ডে ফায়ারবেস স্টোরেজ সক্রিয় করুন

ফায়ারবেস কনসোলে যান এবং নিশ্চিত করুন যে স্টোরেজটি "gs: //PROJECTID.appspot.com" ডোমেন দিয়ে সক্রিয় হয়েছে

b0438b37a588bcee.png

আপনি যদি এর পরিবর্তে অ্যাক্টিভেশন উইন্ডোটি দেখেন, এটি ডিফল্ট নিয়ম সহ সক্রিয় করতে "শুরু করুন" ক্লিক করুন।

c290bbebff2cafa7.png

ফায়ারবেস স্টোরেজ কনফিগার করুন

এফসিভিউকন্ট্রোলআর সুইফট

  func configureStorage() {
    storageRef = Storage.storage().reference()
  }

বিদ্যমান বার্তায় চিত্রগুলি পান Re

ফায়ারবেস স্টোরেজ থেকে চিত্র ডাউনলোড করে এমন কোড যুক্ত করুন।

আপনার এফসিভিউকন্ট্রোলারের "টেবিলভিউ: সেলফোরআউটএক্স সূচিপথ:" পদ্ধতিটি পরিবর্তন করুন; নীচে সংজ্ঞায়িত কোড দিয়ে প্রতিস্থাপন:

এফসিভিউকন্ট্রোলআর সুইফট

  func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    // Dequeue cell
    let cell = self.clientTable .dequeueReusableCell(withIdentifier: "tableViewCell", for: indexPath)
    // Unpack message from Firebase DataSnapshot
    let messageSnapshot: DataSnapshot! = self.messages[indexPath.row]
    guard let message = messageSnapshot.value as? [String:String] else { return cell }
    let name = message[Constants.MessageFields.name] ?? ""
    if let imageURL = message[Constants.MessageFields.imageURL] {
      if imageURL.hasPrefix("gs://") {
        Storage.storage().reference(forURL: imageURL).getData(maxSize: INT64_MAX) {(data, error) in
          if let error = error {
            print("Error downloading: \(error)")
            return
          }
          DispatchQueue.main.async {
            cell.imageView?.image = UIImage.init(data: data!)
            cell.setNeedsLayout()
          }
        }
      } else if let URL = URL(string: imageURL), let data = try? Data(contentsOf: URL) {
        cell.imageView?.image = UIImage.init(data: data)
      }
      cell.textLabel?.text = "sent by: \(name)"
    } else {
      let text = message[Constants.MessageFields.text] ?? ""
      cell.textLabel?.text = name + ": " + text
      cell.imageView?.image = UIImage(named: "ic_account_circle")
      if let photoURL = message[Constants.MessageFields.photoURL], let URL = URL(string: photoURL),
          let data = try? Data(contentsOf: URL) {
        cell.imageView?.image = UIImage(data: data)
      }
    }
    return cell
  }

স্টোর এবং চিত্রগুলি প্রেরণ করুন

ব্যবহারকারীর কাছ থেকে একটি চিত্র আপলোড করুন, তারপরে এই চিত্রটির স্টোরেজ ইউআরএলটি ডাটাবেসে সিঙ্ক করুন যাতে এই চিত্রটি বার্তার ভিতরে প্রেরণ করা হয়।

আপনার এফসিভিউকন্ট্রোলারের "চিত্রপিকারকন্ট্রোলার: ডিডফিনিশপিকিংমিডিয়া উইথআইনফো:" পদ্ধতিটি পরিবর্তন করুন; নীচে সংজ্ঞায়িত কোড দিয়ে প্রতিস্থাপন:

এফসিভিউকন্ট্রোলআর সুইফট

  func imagePickerController(_ picker: UIImagePickerController,
    didFinishPickingMediaWithInfo info: [String : Any]) {
      picker.dismiss(animated: true, completion:nil)
    guard let uid = Auth.auth().currentUser?.uid else { return }

    // if it's a photo from the library, not an image from the camera
    if #available(iOS 8.0, *), let referenceURL = info[UIImagePickerControllerReferenceURL] as? URL {
      let assets = PHAsset.fetchAssets(withALAssetURLs: [referenceURL], options: nil)
      let asset = assets.firstObject
      asset?.requestContentEditingInput(with: nil, completionHandler: { [weak self] (contentEditingInput, info) in
        let imageFile = contentEditingInput?.fullSizeImageURL
        let filePath = "\(uid)/\(Int(Date.timeIntervalSinceReferenceDate * 1000))/\((referenceURL as AnyObject).lastPathComponent!)"
        guard let strongSelf = self else { return }
        strongSelf.storageRef.child(filePath)
          .putFile(from: imageFile!, metadata: nil) { (metadata, error) in
            if let error = error {
              let nsError = error as NSError
              print("Error uploading: \(nsError.localizedDescription)")
              return
            }
            strongSelf.sendMessage(withData: [Constants.MessageFields.imageURL: strongSelf.storageRef.child((metadata?.path)!).description])
          }
      })
    } else {
      guard let image = info[UIImagePickerControllerOriginalImage] as? UIImage else { return }
      let imageData = UIImageJPEGRepresentation(image, 0.8)
      let imagePath = "\(uid)/\(Int(Date.timeIntervalSinceReferenceDate * 1000)).jpg"
      let metadata = StorageMetadata()
      metadata.contentType = "image/jpeg"
      self.storageRef.child(imagePath)
        .putData(imageData!, metadata: metadata) { [weak self] (metadata, error) in
          if let error = error {
            print("Error uploading: \(error)")
            return
          }
          guard let strongSelf = self else { return }
          strongSelf.sendMessage(withData: [Constants.MessageFields.imageURL: strongSelf.storageRef.child((metadata?.path)!).description])
      }
    }
  }

চিত্র বার্তাগুলি প্রেরণ এবং গ্রহণের পরীক্ষা করুন

  1. ক্লিক করুন 98205811bbed9d74.png রান বোতাম।
  2. বার্তা উইন্ডোতে যেতে সাইন ইন ক্লিক করুন
  3. কোনও ছবি বাছতে "ফটো যুক্ত করুন" আইকনটি ক্লিক করুন। ছবির সহ নতুন বার্তাটি অ্যাপ্লিকেশন UI এবং ফায়ারবেস কনসোলে দৃশ্যমান হওয়া উচিত।

আপনি সহজেই রিয়েল-টাইম চ্যাট অ্যাপ্লিকেশনটি তৈরি করতে ফায়ারবেস ব্যবহার করেছেন।

আমরা কি আবরণ করেছি

  • রিয়েলটাইম ডাটাবেস
  • সংযুক্ত সাইন ইন
  • স্টোরেজ

আরও জানুন