Google is committed to advancing racial equity for Black communities. See how.
This page was translated by the Cloud Translation API.
Switch to English

আইওএস এ ফায়ারবেস ক্লাউড মেসেজিং ক্লায়েন্ট অ্যাপ সেট আপ করুন

আইওএস ক্লায়েন্ট অ্যাপ্লিকেশনগুলির জন্য, আপনি ফায়ারবেস ক্লাউড মেসেজিং এপিএনএস ইন্টারফেসের মাধ্যমে 4KB অবধি নোটিফিকেশন এবং ডেটা পেলোডগুলি পেতে পারেন।

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

ফায়ারবেস ক্লাউড মেসেজিংয়ে পদ্ধতি সুইজিং

এফসিএম এসডিকে দুটি মূল ক্ষেত্রে সুইজলিং পদ্ধতি সম্পাদন করে: আপনার এপিএনগুলি এফসিএম রেজিস্ট্রেশন টোকনে ম্যাপিং এবং ডাউন স্ট্রিম মেসেজ কলব্যাক হ্যান্ডলিংয়ের সময় বিশ্লেষণী ডেটা ক্যাপচার করা। বিকাশকারীরা যারা সুইজলিং ব্যবহার করতে পছন্দ করেন না তারা অ্যাপ্লিকেশনটির তথ্য.প্লেস্ট ফাইলটিতে FirebaseAppDelegateProxyEnabled অ্যাপ্লিকেশনডেক্সিএক্সএলড পতাকাটি যুক্ত করে এবং এটির (বুলিয়ান মান) সেট করে অক্ষম করতে পারেন। গাইডগুলির প্রাসঙ্গিক ক্ষেত্রগুলি পদ্ধতি সুইজলিং সক্ষম এবং ছাড়া উভয়ই কোড উদাহরণ সরবরাহ করে।

আপনার আইওএস প্রকল্পে ফায়ারবেস যুক্ত করুন

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

পূর্বশর্ত

  • নিম্নলিখিত ইনস্টল করুন:

    • এক্সকোড 11.0 বা তারপরে
    • কোকোপডস ১.৪.০ বা তারপরে
  • আপনার প্রকল্পটি এই প্রয়োজনীয়তাগুলি পূরণ করে তা নিশ্চিত করুন:

    • আপনার প্রকল্প অবশ্যই iOS 8 বা তারপরে লক্ষ্যবস্তু করা উচিত।
  • আপনার অ্যাপ্লিকেশন চালানোর জন্য একটি শারীরিক আইওএস ডিভাইস সেট আপ করুন এবং এই কাজগুলি সম্পূর্ণ করুন:

যদি আপনার কাছে ইতিমধ্যে কোনও এক্সকোড প্রকল্প নেই এবং কেবল একটি ফায়ারবেস পণ্য ব্যবহার করে দেখতে চান তবে আপনি আমাদের কুইকস্টার্ট নমুনাগুলির মধ্যে একটি ডাউনলোড করতে পারেন।

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

আপনি নিজের আইওএস অ্যাপ্লিকেশনটিতে ফায়ারবেস যুক্ত করার আগে আপনার আইওএস অ্যাপ্লিকেশনটিতে সংযোগ স্থাপনের জন্য আপনাকে ফায়ারবেস প্রকল্প তৈরি করতে হবে। ফায়ারবেস প্রকল্পগুলি সম্পর্কে আরও জানার জন্য ফায়ারবেস প্রকল্পগুলি বোঝা দেখুন।

ফায়ারবেস দিয়ে আপনার অ্যাপ্লিকেশন নিবন্ধন করুন

আপনার ফায়ারবেস প্রকল্পের পরে, আপনি এটিতে আপনার আইওএস অ্যাপ যুক্ত করতে পারেন।

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

  1. ফায়ারবেস কনসোলে যান।

  2. প্রকল্প ওভারভিউ পৃষ্ঠার কেন্দ্রে, সেটআপ ওয়ার্কফ্লো প্রবর্তন করতে আইওএস আইকন ( ) ক্লিক করুন।

    আপনি যদি ইতিমধ্যে আপনার ফায়ারবেস প্রকল্পে একটি অ্যাপ যুক্ত করেছেন, প্ল্যাটফর্মের বিকল্পগুলি প্রদর্শন করতে অ্যাপ্লিকেশন যুক্ত করুন ক্লিক করুন।

  3. আইওএস বান্ডেল আইডি ক্ষেত্রে আপনার অ্যাপ্লিকেশনটির বান্ডিল আইডি দিন

  4. (Ptionচ্ছিক) অন্যান্য অ্যাপ্লিকেশন তথ্য লিখুন: অ্যাপ ডাকনাম এবং অ্যাপ স্টোর আইডি

  5. অ্যাপ্লিকেশন রেজিস্টার ক্লিক করুন

একটি ফায়ারবেস কনফিগারেশন ফাইল যুক্ত করুন

  1. আপনার ফায়ারবেস আইওএস কনফিগারেশন ফাইল ( GoogleService-Info.plist ) পেতে গুগল সার্ভিস-ইনফো.প্লেস্ট ক্লিক করুন

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

আপনার প্রকল্পে যদি আপনার একাধিক বান্ডেল আইডি থাকে তবে আপনাকে অবশ্যই প্রতিটি বান্ডিল আইডি ফায়ারবেস কনসোলে নিবন্ধিত অ্যাপ্লিকেশানের সাথে সংযুক্ত করতে হবে যাতে প্রতিটি অ্যাপ্লিকেশানের নিজস্ব GoogleService-Info.plist সার্ভিস GoogleService-Info.plist ফাইল থাকতে পারে।

আপনার অ্যাপে ফায়ারবেস এসডিকে যুক্ত করুন

আমরা ফায়ারবেস লাইব্রেরি ইনস্টল করতে কোকোপড ব্যবহার করার পরামর্শ দিই । তবে আপনি যদি কোকোপডগুলি ব্যবহার না করেন তবে আপনি এসডিকে ফ্রেমওয়ার্কগুলি সরাসরি সংহত করতে পারেন বা সুইফট প্যাকেজ ম্যানেজার বিটা ব্যবহার করতে পারেন।

আপনি কি কুইকস্টার্ট নমুনা ব্যবহার করছেন? এক্সকোড প্রকল্প এবং পডফিল (শুঁটি সহ) ইতিমধ্যে উপস্থিত রয়েছে, তবে আপনাকে এখনও আপনার ফায়ারবেস কনফিগারেশন ফাইল যুক্ত করতে এবং শুঁটি ইনস্টল করতে হবে।

  1. আপনার যদি ইতিমধ্যে একটি না থাকে তবে একটি পডফিল তৈরি করুন:

    cd your-project-directory
    pod init
  2. আপনার পোডফাইলে, আপনি আপনার অ্যাপ্লিকেশনটিতে ব্যবহার করতে চান এমন ফায়ারবেস শুঁটি যুক্ত করুন।

    আপনি আপনার iOS অ্যাপ্লিকেশনটিতে সমর্থিত ফায়ারবেস পণ্যগুলির মধ্যে যে কোনওটিকে যুক্ত করতে পারেন।

    ফায়ারবেস ক্লাউড মেসেজিংয়ের সর্বোত্তম অভিজ্ঞতার জন্য, আমরা আপনার প্রকল্পে গুগল অ্যানালিটিকাগুলি সক্ষম করার প্রস্তাব দিই। এছাড়াও, অ্যানালিটিক্স স্থাপনের অংশ হিসাবে আপনার অ্যাপ্লিকেশনটিতে অ্যানালিটিকাগুলির জন্য ফায়ারবেস এসডিকে যুক্ত করা দরকার।

    বিশ্লেষণ সক্ষম

    # Add the Firebase pod for Google Analytics
    pod 'Firebase/Analytics'
    # Add the pod for Firebase Cloud Messaging pod 'Firebase/Messaging'

    বিশ্লেষণ সক্ষম নয়

    # Add the pod for Firebase Cloud Messaging
    pod 'Firebase/Messaging'
  3. .xcworkspace ইনস্টল করুন, তারপরে এক্সকোডে প্রকল্পটি দেখতে আপনার .xcworkspace ফাইলটি খুলুন:

    pod install
    open your-project.xcworkspace

আপনার APN গুলি প্রমাণীকরণ কী আপলোড করুন

আপনার APN গুলি প্রমাণীকরণ কী ফায়ারবেসে আপলোড করুন। আপনার যদি ইতিমধ্যে একটি APNs প্রমাণীকরণ কী না থাকে তবে এফসিএম দিয়ে এপিএন কনফিগার করতে দেখুন।

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

  2. আইওএস অ্যাপ্লিকেশন কনফিগারেশনের আওতায় এপিএনগুলির অনুমোদন কীতে , আপলোড বোতামটি ক্লিক করুন

  3. আপনি যেখানে আপনার কীটি সংরক্ষণ করেছেন সেই স্থানে ব্রাউজ করুন, এটি নির্বাচন করুন এবং খুলুন ক্লিক করুন। কীটির জন্য কী আইডি যুক্ত করুন ( অ্যাপল বিকাশকারী সদস্য কেন্দ্রের শংসাপত্র, সনাক্তকারী এবং প্রোফাইলগুলিতে উপলব্ধ) এবং আপলোড ক্লিক করুন

আপনার অ্যাপে ফায়ারবেস শুরু করুন ize

আপনার অ্যাপ্লিকেশনটিতে আপনাকে ফায়ারবেস সূচনা কোড যুক্ত করতে হবে। ফায়ারবেস মডিউলটি আমদানি করুন এবং দেখানো হিসাবে একটি ভাগ করা উদাহরণটি কনফিগার করুন:

  1. আপনার UIApplicationDelegate মডিউলটি আমদানি করুন:

    সুইফট

    import Firebase

    উদ্দেশ্য গ

    @import Firebase;
  2. কনফিগার একটি FirebaseApp , উদাহরণস্বরূপ ভাগ সাধারণত আপনার অ্যাপ্লিকেশনের মধ্যে application:didFinishLaunchingWithOptions: পদ্ধতি:

    সুইফট

    // Use Firebase library to configure APIs
    FirebaseApp.configure()

    উদ্দেশ্য গ

    // Use Firebase library to configure APIs
    [FIRApp configure];

দূরবর্তী বিজ্ঞপ্তিগুলির জন্য নিবন্ধন করুন

হয় প্রারম্ভকালে বা আপনার অ্যাপ্লিকেশন প্রবাহের পছন্দসই পয়েন্টে দূরবর্তী বিজ্ঞপ্তির জন্য আপনার অ্যাপ্লিকেশনটি নিবন্ধ করুন। কল করুন registerForRemoteNotifications হিসাবে দেখানো হয়েছে:

সুইফট

if #available(iOS 10.0, *) {
  // For iOS 10 display notification (sent via APNS)
  UNUserNotificationCenter.current().delegate = self

  let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound]
  UNUserNotificationCenter.current().requestAuthorization(
    options: authOptions,
    completionHandler: {_, _ in })
} else {
  let settings: UIUserNotificationSettings =
  UIUserNotificationSettings(types: [.alert, .badge, .sound], categories: nil)
  application.registerUserNotificationSettings(settings)
}

application.registerForRemoteNotifications()

উদ্দেশ্য গ

if ([UNUserNotificationCenter class] != nil) {
  // iOS 10 or later
  // For iOS 10 display notification (sent via APNS)
  [UNUserNotificationCenter currentNotificationCenter].delegate = self;
  UNAuthorizationOptions authOptions = UNAuthorizationOptionAlert |
      UNAuthorizationOptionSound | UNAuthorizationOptionBadge;
  [[UNUserNotificationCenter currentNotificationCenter]
      requestAuthorizationWithOptions:authOptions
      completionHandler:^(BOOL granted, NSError * _Nullable error) {
        // ...
      }];
} else {
  // iOS 10 notifications aren't available; fall back to iOS 8-9 notifications.
  UIUserNotificationType allNotificationTypes =
  (UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge);
  UIUserNotificationSettings *settings =
  [UIUserNotificationSettings settingsForTypes:allNotificationTypes categories:nil];
  [application registerUserNotificationSettings:settings];
}

[application registerForRemoteNotifications];

নিবন্ধকরণ টোকেন অ্যাক্সেস করুন

ডিফল্টরূপে, FCM SDK অ্যাপ্লিকেশন প্রবর্তনের সময় ক্লায়েন্ট অ্যাপ্লিকেশনটির জন্য একটি নিবন্ধকরণ টোকেন উত্পন্ন করে। এপিএনএস ডিভাইস টোকেনের অনুরূপ, এই টোকন আপনাকে আপনার অ্যাপ্লিকেশানের কোনও নির্দিষ্ট উদাহরণে লক্ষ্যযুক্ত বিজ্ঞপ্তিগুলি প্রেরণ করতে দেয়।

আইওএস সাধারণত অ্যাপ্লিকেশন শুরু হওয়ার সাথে সাথে একটি এপিএন ডিভাইস টোকেন সরবরাহ করে, এফসিএম FIRMessagingDelegate এর messaging:didReceiveRegistrationToken: পদ্ধতির মাধ্যমে একটি নিবন্ধকরণ টোকেন সরবরাহ করে। প্রাথমিক অ্যাপ্লিকেশন লঞ্চের সময় এবং যখনই টোকেন আপডেট বা অবৈধ হয় এফসিএম এসডিকে একটি নতুন বা বিদ্যমান টোকেন পুনরুদ্ধার করে। সব ক্ষেত্রে, এফসিএম এসডিকে messaging:didReceiveRegistrationToken: কল করে messaging:didReceiveRegistrationToken: একটি বৈধ টোকেন সহ।

নিবন্ধকরণ টোকেন পরিবর্তন হতে পারে যখন:

  • অ্যাপ্লিকেশনটি একটি নতুন ডিভাইসে পুনরুদ্ধার করা হয়েছে
  • ব্যবহারকারী অ্যাপটি আনইনস্টল / পুনরায় ইনস্টল করে
  • ব্যবহারকারী অ্যাপ্লিকেশন ডেটা সাফ করে।

মেসেজিং প্রতিনিধি সেট করুন

নিবন্ধকরণ টোকেনগুলি পেতে, মেসেজিং ডেলিগেট প্রোটোকলটি বাস্তবায়ন করুন এবং [FIRApp configure] কল করার পরে FIRMessaging এর delegate সম্পত্তি সেট করুন। উদাহরণস্বরূপ, যদি আপনার অ্যাপ্লিকেশন প্রতিনিধি মেসেজিং প্রতিনিধি প্রোটোকলের সাথে application:didFinishLaunchingWithOptions: তবে আপনি ডেলিগেট application:didFinishLaunchingWithOptions: সেট করতে পারেন application:didFinishLaunchingWithOptions: নিজেই।

সুইফট

Messaging.messaging().delegate = self

উদ্দেশ্য গ

[FIRMessaging messaging].delegate = self;

বর্তমান নিবন্ধকরণ টোকেন আনছে

নিবন্ধকরণ টোকেনগুলি পদ্ধতি messaging:didReceiveRegistrationToken: মাধ্যমে সরবরাহ করা হয় messaging:didReceiveRegistrationToken: এই পদ্ধতিটি সাধারণত অ্যাপ্লিকেশন একবার নিবন্ধকরণ টোকেন দিয়ে শুরু করা হয়। যখন এই পদ্ধতিটি বলা হয়, তখন এটি আদর্শ সময়:

  • যদি নিবন্ধকরণ টোকেনটি নতুন হয় তবে এটি আপনার অ্যাপ্লিকেশন সার্ভারে প্রেরণ করুন।
  • বিষয়গুলিতে নিবন্ধন টোকেন সাবস্ক্রাইব করুন। এটি কেবলমাত্র নতুন সাবস্ক্রিপশনের জন্য বা এমন পরিস্থিতিতে প্রয়োজন যেখানে ব্যবহারকারী অ্যাপটি পুনরায় ইনস্টল করেছেন।

উদাহরণস্বরূপ হ্যান্ডলারের সাহায্যে আপনি সরাসরি টোকনটি পুনরুদ্ধার করতে পারেন : এই কলব্যাকটি একটি InstanceIDResult , এতে টোকেন রয়েছে। InstanceID পুনরুদ্ধার কোনওভাবে ব্যর্থ হলে একটি নন নাল ত্রুটি সরবরাহ করা হয়।

সুইফট

InstanceID.instanceID().instanceID { (result, error) in
  if let error = error {
    print("Error fetching remote instance ID: \(error)")
  } else if let result = result {
    print("Remote instance ID token: \(result.token)")
    self.instanceIDTokenMessage.text  = "Remote InstanceID token: \(result.token)"
  }
}

উদ্দেশ্য গ

[[FIRInstanceID instanceID] instanceIDWithHandler:^(FIRInstanceIDResult * _Nullable result,
                                                    NSError * _Nullable error) {
  if (error != nil) {
    NSLog(@"Error fetching remote instance ID: %@", error);
  } else {
    NSLog(@"Remote instance ID token: %@", result.token);
    NSString* message =
      [NSString stringWithFormat:@"Remote InstanceID token: %@", result.token];
    self.instanceIDTokenMessage.text = message;
  }
}];

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

টোকেন রিফ্রেশ নিরীক্ষণ

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

সুইফট

func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String) {
  print("Firebase registration token: \(fcmToken)")

  let dataDict:[String: String] = ["token": fcmToken]
  NotificationCenter.default.post(name: Notification.Name("FCMToken"), object: nil, userInfo: dataDict)
  // TODO: If necessary send token to application server.
  // Note: This callback is fired at each app startup and whenever a new token is generated.
}

উদ্দেশ্য গ

- (void)messaging:(FIRMessaging *)messaging didReceiveRegistrationToken:(NSString *)fcmToken {
    NSLog(@"FCM registration token: %@", fcmToken);
    // Notify about received token.
    NSDictionary *dataDict = [NSDictionary dictionaryWithObject:fcmToken forKey:@"token"];
    [[NSNotificationCenter defaultCenter] postNotificationName:
     @"FCMToken" object:nil userInfo:dataDict];
    // TODO: If necessary send token to application server.
    // Note: This callback is fired at each app startup and whenever a new token is generated.
}

বিকল্পভাবে, আপনি একটি প্রতিনিধি পদ্ধতি সরবরাহের পরিবর্তে kFIRMessagingRegistrationTokenRefreshNotification NSNotification নামের kFIRMessagingRegistrationTokenRefreshNotification শুনতে পারেন। টোকেন সম্পত্তিটিতে সর্বদা বর্তমান টোকেন মান থাকে।

সুইজলিং অক্ষম: আপনার APN গুলি টোকেন এবং নিবন্ধকরণ টোকেন ম্যাপিং

যদি আপনি পদ্ধতিটি সাঁতার কাটা অক্ষম করে থাকেন তবে আপনাকে এপিসি রেজিস্ট্রেশন টোকনে আপনার APN গুলি স্পষ্টভাবে ম্যাপ করতে হবে। didRegisterForRemoteNotificationsWithDeviceToken টোকেনটি পুনরুদ্ধার করতে রেজিস্টার didRegisterForRemoteNotificationsWithDeviceToken পদ্ধতিগুলি ওভাররাইড করুন এবং তারপরে FIRMessaging এর APNSToken সম্পত্তি সেট করুন:

সুইফট

func application(application: UIApplication,
                 didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) {
  Messaging.messaging().apnsToken = deviceToken
}

উদ্দেশ্য গ

321275547 ডি

এফসিএম নিবন্ধকরণ টোকেন উত্পন্ন হওয়ার পরে, আপনি এটি অ্যাক্সেস করতে পারেন এবং সুইজলিং সক্ষম হিসাবে একই পদ্ধতি ব্যবহার করে রিফ্রেশ ইভেন্টগুলি শুনতে পারেন।

বিদ্যমান ব্যবহারকারীর এপিএন টোকেন আমদানি করুন

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

স্বয়ংক্রিয় সূচনা প্রতিরোধ করুন

এফসিএম একটি ইনস্ট্যান্স আইডি উত্পন্ন করে, যা এফসিএমের মধ্যে নিবন্ধকরণ টোকেন হিসাবে ব্যবহৃত হয়। যখন কোনও ইনস্ট্যান্স আইডি তৈরি করা হয় তখন গ্রন্থাগারটি ফায়ারবেসে আইডেন্টিফায়ার এবং কনফিগারেশন ডেটা আপলোড করে। এটি করার জন্য, আপনার Info.plist একটি মেটাডেটা মান যুক্ত করুন (আপনার Info.plist GoogleService-Info.plist ):

FirebaseMessagingAutoInitEnabled = NO

FCM পুনরায় সক্ষম করতে, আপনি একটি রানটাইম কল করতে পারেন:

সুইফট

Messaging.messaging().autoInitEnabled = true

উদ্দেশ্য গ

2f9097035 ডি

এই মানটি একবার সেট হয়ে গেলে অ্যাপ্লিকেশনটির পুনরায় শুরু হয় across

পরবর্তী পদক্ষেপ

আপনি আপনার আইওএস ক্লায়েন্ট সেট আপ করার পরে, আপনি আপনার অ্যাপ্লিকেশনটিতে বার্তা হ্যান্ডলিং এবং অন্যান্য, আরও উন্নত আচরণ যুক্ত করতে প্রস্তুত। আরও তথ্যের জন্য এই গাইডগুলি দেখুন: