1. সংক্ষিপ্ত বিবরণ

ফ্রেন্ডলি চ্যাট কোডল্যাবে আপনাকে স্বাগতম। এই কোডল্যাবে, আপনি শিখবেন কিভাবে ফায়ারবেস প্ল্যাটফর্ম ব্যবহার করে iOS অ্যাপ্লিকেশন তৈরি করতে হয়। আপনি একটি চ্যাট ক্লায়েন্ট বাস্তবায়ন করবেন এবং ফায়ারবেস ব্যবহার করে এর কর্মক্ষমতা পর্যবেক্ষণ করবেন।
তুমি কি শিখবে
- ব্যবহারকারীদের সাইন ইন করার অনুমতি দিন।
- ফায়ারবেস রিয়েলটাইম ডাটাবেস ব্যবহার করে ডেটা সিঙ্ক করুন।
- ফায়ারবেস স্টোরেজে বাইনারি ফাইল সংরক্ষণ করুন।
তোমার যা লাগবে
- এক্সকোড
- কোকোপডস
- iOS 8.0+ বা সিমুলেটর সহ একটি পরীক্ষামূলক ডিভাইস
আপনি এই টিউটোরিয়ালটি কীভাবে ব্যবহার করবেন?
iOS অ্যাপ তৈরির ক্ষেত্রে আপনার অভিজ্ঞতা কেমন হবে?
2. নমুনা কোড পান
কমান্ড লাইন থেকে GitHub রিপোজিটরি ক্লোন করুন।
$ git clone https://github.com/firebase/codelab-friendlychat-ios
৩. স্টার্টার অ্যাপ তৈরি করুন

স্টার্টার অ্যাপ তৈরি করতে:
- একটি টার্মিনাল উইন্ডোতে, নেভিগেট করুন
আপনার নমুনা কোড ডাউনলোড থেকে ios-starter/swift-starterডিরেক্টরি -
pod install --repo-updateচালান - Xcode-এ প্রজেক্টটি খুলতে FriendlyChatSwift.xcworkspace ফাইলটি খুলুন।
- ক্লিক করুন
রান বোতাম।
কয়েক সেকেন্ড পরে আপনার "ফ্রেন্ডলি চ্যাট" হোম স্ক্রিনটি দেখা যাবে। UI প্রদর্শিত হবে। তবে, এই মুহুর্তে আপনি সাইন ইন করতে, বার্তা পাঠাতে বা গ্রহণ করতে পারবেন না। পরবর্তী ধাপটি সম্পূর্ণ না করা পর্যন্ত অ্যাপটি ব্যতিক্রম ছাড়া বন্ধ হয়ে যাবে।
৪. একটি ফায়ারবেস প্রকল্প সেট আপ করুন
একটি নতুন Firebase প্রকল্প তৈরি করুন
- আপনার গুগল অ্যাকাউন্ট ব্যবহার করে ফায়ারবেস কনসোলে সাইন ইন করুন।
- একটি নতুন প্রকল্প তৈরি করতে বোতামটি ক্লিক করুন, এবং তারপর একটি প্রকল্পের নাম লিখুন (উদাহরণস্বরূপ,
FriendlyChat)। - চালিয়ে যান ক্লিক করুন।
- যদি অনুরোধ করা হয়, তাহলে Firebase শর্তাবলী পর্যালোচনা করুন এবং গ্রহণ করুন, এবং তারপর Continue এ ক্লিক করুন।
- (ঐচ্ছিক) Firebase কনসোলে ("Gemini in Firebase" নামে পরিচিত) AI সহায়তা সক্ষম করুন।
- এই কোডল্যাবের জন্য, আপনার গুগল অ্যানালিটিক্সের প্রয়োজন নেই , তাই গুগল অ্যানালিটিক্স বিকল্পটি টগল করে বন্ধ করে দিন ।
- Create project এ ক্লিক করুন, আপনার province করার জন্য অপেক্ষা করুন, এবং তারপর Continue এ ক্লিক করুন।
আপনার Firebase মূল্য পরিকল্পনা আপগ্রেড করুন
Firebase-এর জন্য ক্লাউড স্টোরেজ ব্যবহার করার জন্য, আপনার Firebase প্রকল্পটি pay-as-you go (Blaze) মূল্য পরিকল্পনায় থাকা প্রয়োজন, যার অর্থ এটি একটি ক্লাউড বিলিং অ্যাকাউন্টের সাথে লিঙ্ক করা আছে।
- একটি ক্লাউড বিলিং অ্যাকাউন্টের জন্য একটি পেমেন্ট পদ্ধতি প্রয়োজন, যেমন একটি ক্রেডিট কার্ড।
- আপনি যদি Firebase এবং Google Cloud-এ নতুন হন, তাহলে $300 ক্রেডিট এবং একটি বিনামূল্যে ট্রায়াল ক্লাউড বিলিং অ্যাকাউন্টের জন্য যোগ্য কিনা তা পরীক্ষা করে দেখুন।
- যদি আপনি কোনও ইভেন্টের অংশ হিসেবে এই কোডল্যাবটি করেন, তাহলে আপনার আয়োজককে জিজ্ঞাসা করুন যে কোনও ক্লাউড ক্রেডিট উপলব্ধ আছে কিনা।
আপনার প্রকল্পটিকে ব্লেজ প্ল্যানে আপগ্রেড করতে, এই পদক্ষেপগুলি অনুসরণ করুন:
- Firebase কনসোলে, আপনার প্ল্যান আপগ্রেড করতে নির্বাচন করুন।
- ব্লেজ প্ল্যানটি নির্বাচন করুন। আপনার প্রকল্পের সাথে একটি ক্লাউড বিলিং অ্যাকাউন্ট লিঙ্ক করতে অন-স্ক্রিন নির্দেশাবলী অনুসরণ করুন।
এই আপগ্রেডের অংশ হিসেবে যদি আপনার একটি ক্লাউড বিলিং অ্যাকাউন্ট তৈরি করার প্রয়োজন হয়, তাহলে আপগ্রেড সম্পূর্ণ করার জন্য আপনাকে Firebase কনসোলে আপগ্রেড ফ্লোতে ফিরে যেতে হতে পারে।
আপনার iOS অ্যাপটি সংযুক্ত করুন
- আপনার নতুন প্রকল্পের প্রজেক্ট ওভারভিউ স্ক্রিন থেকে, আপনার iOS অ্যাপে Firebase যোগ করুন এ ক্লিক করুন।
- বান্ডেল আইডিটি "
com.google.firebase.codelab.FriendlyChatSwift" হিসেবে লিখুন। - অ্যাপ স্টোর আইডিটি "
123456" হিসেবে লিখুন। - অ্যাপ নিবন্ধন করুন এ ক্লিক করুন।
আপনার অ্যাপে GoogleService-Info.plist ফাইল যোগ করুন
দ্বিতীয় স্ক্রিনে Download GoogleService-Info.plist এ ক্লিক করে আপনার অ্যাপের জন্য প্রয়োজনীয় সকল Firebase মেটাডেটা ধারণকারী একটি কনফিগারেশন ফাইল ডাউনলোড করুন। সেই ফাইলটি আপনার অ্যাপ্লিকেশনে কপি করুন এবং FriendlyChatSwift টার্গেটে যোগ করুন।
আপনি এখন পপআপটি বন্ধ করার জন্য উপরের ডানদিকের কোণায় "x" ক্লিক করতে পারেন - ধাপ 3 এবং 4 এড়িয়ে যান - কারণ আপনি এখানে সেই পদক্ষেপগুলি সম্পাদন করবেন।
ফায়ারবেস মডিউল আমদানি করুন
Firebase মডিউলটি আমদানি করা হয়েছে কিনা তা নিশ্চিত করে শুরু করুন।
AppDelegate.swift , FCViewController.swift
import Firebase
AppDelegate-এ Firebase কনফিগার করুন
আপনার .plist ফাইল থেকে অন্তর্নিহিত Firebase পরিষেবাগুলি কনফিগার করতে অ্যাপ্লিকেশন:didFinishLaunchingWithOptions ফাংশনের ভিতরে FirebaseApp-এ "configure" পদ্ধতিটি ব্যবহার করুন।
AppDelegate.swift সম্পর্কে
func application(_ application: UIApplication, didFinishLaunchingWithOptions
launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
FirebaseApp.configure()
GIDSignIn.sharedInstance().delegate = self
return true
}
৫. ব্যবহারকারীদের সনাক্ত করুন
প্রমাণিত ব্যবহারকারীদের জন্য সীমাবদ্ধ করার জন্য নিয়ম ব্যবহার করুন
এখন আমরা একটি নিয়ম যোগ করব যাতে কোনও বার্তা পড়ার বা লেখার আগে প্রমাণীকরণের প্রয়োজন হয়। এটি করার জন্য আমরা আমাদের বার্তা ডেটা অবজেক্টে নিম্নলিখিত নিয়মগুলি যোগ করব। Firebase কনসোলের ডেটাবেস বিভাগের মধ্যে থেকে Realtime Database নির্বাচন করুন, তারপর Rules ট্যাবে ক্লিক করুন। তারপর নিয়মগুলি আপডেট করুন যাতে সেগুলি এইরকম দেখায়:
{
"rules": {
"messages": {
".read": "auth != null",
".write": "auth != null"
}
}
}
এটি কীভাবে কাজ করে সে সম্পর্কে আরও তথ্যের জন্য ("auth" ভেরিয়েবলের ডকুমেন্টেশন সহ) Firebase নিরাপত্তা ডকুমেন্টেশন দেখুন।
প্রমাণীকরণ API গুলি কনফিগার করুন
আপনার অ্যাপ্লিকেশনটি আপনার ব্যবহারকারীদের পক্ষ থেকে Firebase প্রমাণীকরণ API গুলি অ্যাক্সেস করার আগে, আপনাকে এটি সক্ষম করতে হবে
- Firebase কনসোলে নেভিগেট করুন এবং আপনার প্রকল্পটি নির্বাচন করুন।
- প্রমাণীকরণ নির্বাচন করুন
- সাইন ইন পদ্ধতি ট্যাব নির্বাচন করুন
- গুগল সুইচটি সক্রিয় (নীল) এ টগল করুন।
- ফলে আসা ডায়ালগে সংরক্ষণ করুন টিপুন
যদি আপনি এই কোডল্যাবে পরে "CONFIGURATION_NOT_FOUND" বার্তা সহ ত্রুটি পান, তাহলে এই ধাপে ফিরে আসুন এবং আপনার কাজটি দুবার পরীক্ষা করুন।
Firebase Auth নির্ভরতা নিশ্চিত করুন
Podfile ফাইলে ফায়ারবেস অথেন্ট নির্ভরতা বিদ্যমান কিনা তা নিশ্চিত করুন।
পডফাইল
pod 'Firebase/Auth'
গুগল সাইন ইনের জন্য আপনার Info.plist সেটআপ করুন।
আপনার XCode প্রকল্পে একটি কাস্টম URL স্কিম যোগ করতে হবে।
- আপনার প্রোজেক্ট কনফিগারেশন খুলুন: বাম ট্রি ভিউতে প্রোজেক্টের নামের উপর ডাবল-ক্লিক করুন। TARGETS বিভাগ থেকে আপনার অ্যাপটি নির্বাচন করুন, তারপর তথ্য ট্যাব নির্বাচন করুন এবং URL প্রকার বিভাগটি প্রসারিত করুন।
- + বোতামে ক্লিক করুন এবং আপনার বিপরীত ক্লায়েন্ট আইডির জন্য একটি URL স্কিম যোগ করুন। এই মানটি খুঁজে পেতে, GoogleService-Info.plist কনফিগারেশন ফাইলটি খুলুন এবং REVERSED_CLIENT_ID কীটি সন্ধান করুন। সেই কীটির মানটি অনুলিপি করুন এবং কনফিগারেশন পৃষ্ঠার URL স্কিম বাক্সে পেস্ট করুন। অন্যান্য ক্ষেত্রগুলি ফাঁকা রাখুন।
- সম্পূর্ণ হয়ে গেলে, আপনার কনফিগারেশনটি নিম্নলিখিতগুলির মতো দেখতে হবে (তবে আপনার অ্যাপ্লিকেশন-নির্দিষ্ট মানগুলির সাথে):

গুগল সাইন ইনের জন্য ক্লায়েন্ট আইডি সেট করুন
Firebase কনফিগার করার পর, আমরা clientID ব্যবহার করে "didFinishLaunchingWithOptions:" পদ্ধতির ভিতরে Google সাইন ইন সেট আপ করতে পারি।
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
}
}
}
ব্যবহারকারীকে স্বয়ংক্রিয়ভাবে সাইন ইন করুন। তারপর সফলভাবে সাইন ইন করার পরে ব্যবহারকারীকে অ্যাপে প্রবেশ করতে দেওয়ার জন্য Firebase Auth-এ একজন শ্রোতা যোগ করুন। এবং deinit-এ শ্রোতাটি সরিয়ে দিন।
সাইনইনভিউকন্ট্রোলার.সুইফট
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)
}
}
সাইন আউট
সাইন আউট পদ্ধতি যোগ করুন
FCViewController.swift সম্পর্কে
@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)")
}
}
সাইন ইন করা ব্যবহারকারী হিসেবে বার্তা পড়া পরীক্ষা করুন
- ক্লিক করুন
রান বোতাম। - আপনাকে অবিলম্বে সাইন-ইন স্ক্রিনে পাঠানো হবে। গুগল সাইন-ইন বোতামটি আলতো চাপুন।
- সবকিছু ঠিকঠাক থাকলে আপনাকে মেসেজিং স্ক্রিনে পাঠানো হবে।
৬. রিয়েলটাইম ডাটাবেস সক্রিয় করুন

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

আমদানি করার পর আপনার ডাটাবেসটি এইরকম দেখাবে:

ফায়ারবেস ডাটাবেস নির্ভরতা নিশ্চিত করুন
Podfile ফাইলের ডিপেন্ডেন্সি ব্লকে, নিশ্চিত করুন যে Firebase/Database অন্তর্ভুক্ত আছে।
পডফাইল
pod 'Firebase/Database'
বিদ্যমান বার্তাগুলি সিঙ্ক্রোনাইজ করুন
অ্যাপ UI-তে নতুন যোগ করা বার্তাগুলিকে সিঙ্ক্রোনাইজ করে এমন কোড যোগ করুন।
এই বিভাগে আপনার যোগ করা কোডটি হবে:
- ফায়ারবেস ডাটাবেসটি শুরু করুন এবং ডাটাবেসে করা পরিবর্তনগুলি পরিচালনা করার জন্য একটি শ্রোতা যোগ করুন।
- নতুন বার্তা দেখানোর জন্য
DataSnapshotআপডেট করুন।
আপনার FCViewController এর "deinit", "configureDatabase", এবং "tableView:cellForRow indexPath:" পদ্ধতিগুলি পরিবর্তন করুন; নীচে সংজ্ঞায়িত কোড দিয়ে প্রতিস্থাপন করুন:
FCViewController.swift সম্পর্কে
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
}
বার্তা সিঙ্ক পরীক্ষা করুন
- ক্লিক করুন
রান বোতাম। - বার্তা উইন্ডোতে যেতে "শুরু করতে সাইন ইন করুন" বোতামে ক্লিক করুন।
- "বার্তা" এন্ট্রির পাশে সবুজ + চিহ্নে ক্লিক করে এবং নিম্নলিখিতটির মতো একটি বস্তু যুক্ত করে সরাসরি Firebase কনসোলে নতুন বার্তা যুক্ত করুন:

- নিশ্চিত করুন যে তারা Friendly-Chat UI তে দেখা যাচ্ছে।
৭. বার্তা পাঠান
বার্তা প্রেরণ বাস্তবায়ন করুন
ডাটাবেসে পুশ মান। যখন আপনি ফায়ারবেস রিয়েলটাইম ডাটাবেসে ডেটা যোগ করার জন্য পুশ পদ্ধতি ব্যবহার করবেন, তখন একটি স্বয়ংক্রিয় আইডি যোগ করা হবে। এই স্বয়ংক্রিয়ভাবে তৈরি আইডিগুলি ক্রমানুসারে তৈরি হয়, যা নিশ্চিত করে যে নতুন বার্তাগুলি সঠিক ক্রমে যোগ করা হবে।
আপনার FCViewController এর "sendMessage:" পদ্ধতিটি পরিবর্তন করুন; নীচের সংজ্ঞায়িত কোডটি দিয়ে প্রতিস্থাপন করুন:
FCViewController.swift সম্পর্কে
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)
}
বার্তা পাঠানোর পরীক্ষা করুন
- ক্লিক করুন
রান বোতাম। - বার্তা উইন্ডোতে যেতে সাইন ইন ক্লিক করুন।
- একটি বার্তা টাইপ করুন এবং পাঠান টিপুন। নতুন বার্তাটি অ্যাপ UI এবং Firebase কনসোলে দৃশ্যমান হওয়া উচিত।
৮. ছবি সংরক্ষণ এবং গ্রহণ করুন
Firebase স্টোরেজ নির্ভরতা নিশ্চিত করুন
Podfile এর নির্ভরতা ব্লকে, নিশ্চিত করুন যে Firebase/Storage অন্তর্ভুক্ত আছে।
পডফাইল
pod 'Firebase/Storage'
Firebase এর জন্য ক্লাউড স্টোরেজ সেট আপ করুন
আপনার Firebase প্রকল্পে Firebase এর জন্য ক্লাউড স্টোরেজ কীভাবে সেট আপ করবেন তা এখানে দেওয়া হল:
- Firebase কনসোলের বাম প্যানেলে, Build প্রসারিত করুন এবং তারপর Storage নির্বাচন করুন।
- শুরু করুন ক্লিক করুন।
- আপনার ডিফল্ট স্টোরেজ বাকেটের জন্য একটি অবস্থান নির্বাচন করুন।
US-WEST1,US-CENTRAL1, এবংUS-EAST1এর বাকেটগুলি Google ক্লাউড স্টোরেজের জন্য "সর্বদা বিনামূল্যে" স্তরের সুবিধা নিতে পারে। অন্যান্য সমস্ত অবস্থানের বাকেটগুলি Google ক্লাউড স্টোরেজের মূল্য এবং ব্যবহার অনুসরণ করে। - পরীক্ষা মোডে শুরু করুন ক্লিক করুন। নিরাপত্তা নিয়ম সম্পর্কে দাবিত্যাগ পড়ুন।
এই কোডল্যাবে পরে, আপনার ডেটা সুরক্ষিত করার জন্য আপনি সুরক্ষা নিয়ম যুক্ত করবেন। আপনার স্টোরেজ বাকেটের জন্য সুরক্ষা নিয়ম যুক্ত না করে কোনও অ্যাপ সর্বজনীনভাবে বিতরণ বা প্রকাশ করবেন না । - তৈরি করুন ক্লিক করুন।
FirebaseStorage কনফিগার করুন
FCViewController.swift সম্পর্কে
func configureStorage() {
storageRef = Storage.storage().reference()
}
বিদ্যমান বার্তাগুলিতে ছবিগুলি গ্রহণ করুন
ফায়ারবেস স্টোরেজ থেকে ছবি ডাউনলোড করে এমন কোড যোগ করুন।
আপনার FCViewController এর "tableView: cellForRowAt indexPath:" পদ্ধতিটি পরিবর্তন করুন; নীচের সংজ্ঞায়িত কোডটি দিয়ে প্রতিস্থাপন করুন:
FCViewController.swift সম্পর্কে
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
}
৯. ছবি বার্তা পাঠান
ছবি সংরক্ষণ এবং পাঠান বাস্তবায়ন করুন
ব্যবহারকারীর কাছ থেকে একটি ছবি আপলোড করুন, তারপর এই ছবির স্টোরেজ URL ডাটাবেসের সাথে সিঙ্ক করুন যাতে এই ছবিটি বার্তার ভিতরে পাঠানো হয়।
আপনার FCViewController এর "imagePickerController: didFinishPickingMediaWithInfo:" পদ্ধতিটি পরিবর্তন করুন; নীচের সংজ্ঞায়িত কোডটি দিয়ে প্রতিস্থাপন করুন:
FCViewController.swift সম্পর্কে
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])
}
}
}
ছবি বার্তা পাঠানো এবং গ্রহণ পরীক্ষা করুন
- ক্লিক করুন
রান বোতাম। - বার্তা উইন্ডোতে যেতে সাইন ইন ক্লিক করুন।
- একটি ছবি বাছাই করতে "একটি ছবি যোগ করুন" আইকনে ক্লিক করুন। ছবির সাথে নতুন বার্তাটি অ্যাপ UI এবং Firebase কনসোলে দৃশ্যমান হওয়া উচিত।
১০. অভিনন্দন!
আপনি সহজেই একটি রিয়েল-টাইম চ্যাট অ্যাপ্লিকেশন তৈরি করতে Firebase ব্যবহার করেছেন।
আমরা যা কভার করেছি
- রিয়েলটাইম ডাটাবেস
- ফেডারেটেড সাইন ইন
- স্টোরেজ
