Check out what’s new from Firebase at Google I/O 2022. Learn more

রেফারেল পুরস্কার

নতুন ব্যবহারকারী পাওয়ার সবচেয়ে কার্যকর উপায় হল ব্যবহারকারীর রেফারেলের মাধ্যমে। আপনি আপনার ব্যবহারকারীদের তাদের বন্ধুদের আমন্ত্রণ জানাতে উত্সাহিত করতে রিয়েলটাইম ডেটাবেস এবং ফায়ারবেসের জন্য ক্লাউড ফাংশনের সাথে ডায়নামিক লিঙ্কগুলি ব্যবহার করতে পারেন রেফারার এবং প্রাপক উভয়কেই সফল রেফারেলের জন্য অ্যাপ-মধ্যস্থ পুরষ্কার অফার করে৷

যথোপযুক্ত সৃষ্টিকর্তা

  • আপনার ব্যবহারকারীদের তাদের বন্ধুদের আমন্ত্রণ জানানোর জন্য একটি প্রণোদনা প্রদান করে বৃদ্ধি ত্বরান্বিত করুন।
  • আমন্ত্রণ লিঙ্ক প্ল্যাটফর্ম জুড়ে কাজ করে.
  • যে নতুন ব্যবহারকারীরা প্রথমবার আপনার অ্যাপ খুলছেন তারা একটি প্রথম-চালিত অভিজ্ঞতা পাবেন যা আপনি তাদের জন্য কাস্টমাইজ করেন। উদাহরণস্বরূপ, আপনি স্বয়ংক্রিয়ভাবে তাদের আমন্ত্রিত বন্ধুর সাথে সংযুক্ত করতে পারেন।
  • ঐচ্ছিকভাবে পুরষ্কার প্রদানে দেরি করুন যতক্ষণ না নতুন ব্যবহারকারীরা কিছু প্রাথমিক কাজ সম্পন্ন করে, যেমন একটি টিউটোরিয়াল সম্পূর্ণ করা।

এখানে কিভাবে শুরু করতে হয়!

Firebase এবং Dynamic Links SDK সেট আপ করুন

একটি নতুন ফায়ারবেস প্রকল্প সেট আপ করুন এবং আপনার অ্যাপে ডায়নামিক লিঙ্ক SDK ইনস্টল করুন৷ ( আইওএস , অ্যান্ড্রয়েড , সি++ , ইউনিটি )। ডায়নামিক লিঙ্ক SDK ইনস্টল করলে Firebase অ্যাপটিতে ডায়নামিক লিঙ্ক সম্পর্কে ডেটা পাঠাতে দেয়, ব্যবহারকারী অ্যাপটি ইনস্টল করার পরেও। SDK ছাড়া, প্রি-ইনস্টল ক্লিকের মাধ্যমে পোস্ট-ইনস্টল ব্যবহারকারীকে সংযুক্ত করার কোনো উপায় নেই।

একটি আমন্ত্রণ তৈরি করতে, প্রথমে একটি লিঙ্ক তৈরি করুন যা প্রাপক আমন্ত্রণটি গ্রহণ করার জন্য খোলে। পরে, আপনি আমন্ত্রণের পাঠ্যে এই লিঙ্কটি অন্তর্ভুক্ত করবেন। আমন্ত্রণের একজন প্রাপক যখন লিঙ্কটি খুলে আপনার অ্যাপ ইনস্টল করেন, তখন তারা একটি কাস্টমাইজড প্রথম-চালিত অভিজ্ঞতা পেতে পারেন, যার মধ্যে একটি অ্যাপ-মধ্যস্থ পুরস্কার প্রাপ্তি রয়েছে।

এই আমন্ত্রণ লিঙ্কটি একটি ডায়নামিক লিঙ্ক যার একটি link প্যারামিটার মান যা নির্দেশ করে যে এটি আপনার বিদ্যমান ব্যবহারকারীর কাছ থেকে এসেছে।

আপনি এই link প্যারামিটার পেলোডগুলি ফর্ম্যাট করতে এবং সেগুলিকে আপনার অ্যাপে টাই করতে পারেন এমন অনেক উপায় রয়েছে৷ একটি সহজ উপায় হল প্রেরকের ব্যবহারকারীর অ্যাকাউন্ট আইডি নিম্নলিখিত উদাহরণের মতো একটি ক্যোয়ারী প্যারামিটারে নির্দিষ্ট করা:

https://mygame.example.com/?invitedby=SENDER_UID

তারপরে, একটি আমন্ত্রণে অন্তর্ভুক্তির জন্য উপযুক্ত ডায়নামিক লিঙ্ক তৈরি করতে, আপনি ডায়নামিক লিঙ্ক বিল্ডার API ব্যবহার করতে পারেন:

সুইফট

দ্রষ্টব্য: এই Firebase পণ্যটি macOS, Mac ক্যাটালিস্ট, tvOS, বা watchOS লক্ষ্যে উপলব্ধ নয়৷
guard let uid = Auth.auth().currentUser?.uid else { return }
let link = URL(string: "https://mygame.example.com/?invitedby=\(uid)")
let referralLink = DynamicLinkComponents(link: link!, domain: "example.page.link")

referralLink.iOSParameters = DynamicLinkIOSParameters(bundleID: "com.example.ios")
referralLink.iOSParameters?.minimumAppVersion = "1.0.1"
referralLink.iOSParameters?.appStoreID = "123456789"

referralLink.androidParameters = DynamicLinkAndroidParameters(packageName: "com.example.android")
referralLink.androidParameters?.minimumVersion = 125

referralLink.shorten { (shortURL, warnings, error) in
  if let error = error {
    print(error.localizedDescription)
    return
  }
  self.invitationUrl = shortURL
}

Java

FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
String uid = user.getUid();
String link = "https://mygame.example.com/?invitedby=" + uid;
FirebaseDynamicLinks.getInstance().createDynamicLink()
        .setLink(Uri.parse(link))
        .setDomainUriPrefix("https://example.page.link")
        .setAndroidParameters(
                new DynamicLink.AndroidParameters.Builder("com.example.android")
                        .setMinimumVersion(125)
                        .build())
        .setIosParameters(
                new DynamicLink.IosParameters.Builder("com.example.ios")
                        .setAppStoreId("123456789")
                        .setMinimumVersion("1.0.1")
                        .build())
        .buildShortDynamicLink()
        .addOnSuccessListener(new OnSuccessListener<ShortDynamicLink>() {
            @Override
            public void onSuccess(ShortDynamicLink shortDynamicLink) {
                mInvitationUrl = shortDynamicLink.getShortLink();
                // ...
            }
        });

Kotlin+KTX

val user = Firebase.auth.currentUser!!
val uid = user.uid
val invitationLink = "https://mygame.example.com/?invitedby=$uid"
Firebase.dynamicLinks.shortLinkAsync {
    link = Uri.parse(invitationLink)
    domainUriPrefix = "https://example.page.link"
    androidParameters("com.example.android") {
        minimumVersion = 125
    }
    iosParameters("com.example.ios") {
        appStoreId = "123456789"
        minimumVersion = "1.0.1"
    }
}.addOnSuccessListener { shortDynamicLink ->
    mInvitationUrl = shortDynamicLink.shortLink
    // ...
}

আমন্ত্রণ পাঠান

এখন আপনি লিঙ্কটি তৈরি করেছেন, আপনি এটি একটি আমন্ত্রণে অন্তর্ভুক্ত করতে পারেন। আপনার অ্যাপ এবং শ্রোতাদের জন্য সবচেয়ে উপযুক্ত কি তার উপর নির্ভর করে আমন্ত্রণটি একটি ইমেল, এসএমএস বার্তা বা অন্য কোনো মাধ্যম হতে পারে।

উদাহরণস্বরূপ, একটি ইমেল আমন্ত্রণ পাঠাতে:

সুইফট

দ্রষ্টব্য: এই Firebase পণ্যটি macOS, Mac ক্যাটালিস্ট, tvOS, বা watchOS লক্ষ্যে উপলব্ধ নয়৷
guard let referrerName = Auth.auth().currentUser?.displayName else { return }
let subject = "\(referrerName) wants you to play MyExampleGame!"
let invitationLink = invitationUrl?.absoluteString
let msg = "<p>Let's play MyExampleGame together! Use my <a href=\"\(invitationLink)\">referrer link</a>!</p>"

if !MFMailComposeViewController.canSendMail() {
  // Device can't send email
  return
}
let mailer = MFMailComposeViewController()
mailer.mailComposeDelegate = self
mailer.setSubject(subject)
mailer.setMessageBody(msg, isHTML: true)
myView.present(mailer, animated: true, completion: nil)

Java

String referrerName = FirebaseAuth.getInstance().getCurrentUser().getDisplayName();
String subject = String.format("%s wants you to play MyExampleGame!", referrerName);
String invitationLink = mInvitationUrl.toString();
String msg = "Let's play MyExampleGame together! Use my referrer link: "
        + invitationLink;
String msgHtml = String.format("<p>Let's play MyExampleGame together! Use my "
        + "<a href=\"%s\">referrer link</a>!</p>", invitationLink);

Intent intent = new Intent(Intent.ACTION_SENDTO);
intent.setData(Uri.parse("mailto:")); // only email apps should handle this
intent.putExtra(Intent.EXTRA_SUBJECT, subject);
intent.putExtra(Intent.EXTRA_TEXT, msg);
intent.putExtra(Intent.EXTRA_HTML_TEXT, msgHtml);
if (intent.resolveActivity(getPackageManager()) != null) {
    startActivity(intent);
}

Kotlin+KTX

val referrerName = Firebase.auth.currentUser?.displayName
val subject = String.format("%s wants you to play MyExampleGame!", referrerName)
val invitationLink = mInvitationUrl.toString()
val msg = "Let's play MyExampleGame together! Use my referrer link: $invitationLink"
val msgHtml = String.format("<p>Let's play MyExampleGame together! Use my " +
        "<a href=\"%s\">referrer link</a>!</p>", invitationLink)

val intent = Intent(Intent.ACTION_SENDTO).apply {
    data = Uri.parse("mailto:") // only email apps should handle this
    putExtra(Intent.EXTRA_SUBJECT, subject)
    putExtra(Intent.EXTRA_TEXT, msg)
    putExtra(Intent.EXTRA_HTML_TEXT, msgHtml)
}
intent.resolveActivity(packageManager)?.let {
    startActivity(intent)
}

আপনার অ্যাপে রেফারেল তথ্য পুনরুদ্ধার করুন

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

সাধারণত, আপনি আমন্ত্রণ প্রাপক সাইন আপ করার পরেই রেফারেল পুরষ্কার দিতে চান, অথবা নতুন ব্যবহারকারীর কিছু কাজ সম্পূর্ণ করার পরেও। পুরস্কারের মানদণ্ড পূরণ না হওয়া পর্যন্ত, আপনি ডায়নামিক লিঙ্ক থেকে যে পুরস্কারের তথ্য পেয়েছেন তার ট্র্যাক রাখতে হবে।

এই তথ্য ট্র্যাক রাখার একটি উপায় হল ব্যবহারকারীকে বেনামে সাইন ইন করা এবং বেনামী অ্যাকাউন্টের রিয়েলটাইম ডেটাবেস রেকর্ডে ডেটা সংরক্ষণ করা৷ যখন প্রাপক সাইন আপ করে এবং বেনামী অ্যাকাউন্টটি একটি স্থায়ী অ্যাকাউন্টে রূপান্তরিত হয়, তখন নতুন অ্যাকাউন্টে বেনামী অ্যাকাউন্টের মতো একই UID থাকবে এবং ফলস্বরূপ, পুরস্কারের তথ্যে অ্যাক্সেস থাকবে।

উদাহরণস্বরূপ, প্রাপক আপনার অ্যাপটি খোলার পরে রেফারারের UID সংরক্ষণ করতে:

সুইফট

দ্রষ্টব্য: এই Firebase পণ্যটি macOS, Mac ক্যাটালিস্ট, tvOS, বা watchOS লক্ষ্যে উপলব্ধ নয়৷
struct MyApplication: App {

  var body: some Scene {
    WindowGroup {
      VStack {
        Text("Example text")
      }
      .onOpenURL { url in
        if DynamicLinks.dynamicLinks()?.shouldHandleDynamicLink(fromCustomSchemeURL: url) ?? false {
        let dynamicLink = DynamicLinks.dynamicLinks()?.dynamicLink(fromCustomSchemeURL: url)
        handleDynamicLink(dynamicLink)
      }
      // Handle incoming URL with other methods as necessary
      // ...
      }
    }
  }
}

func handleDynamicLink(_ dynamicLink: DynamicLink?) {
  guard let dynamicLink = dynamicLink else { return false }
  guard let deepLink = dynamicLink.url else { return false }
  let queryItems = URLComponents(url: deepLink, resolvingAgainstBaseURL: true)?.queryItems
  let invitedBy = queryItems?.filter({(item) in item.name == "invitedby"}).first?.value
  let user = Auth.auth().currentUser
  // If the user isn't signed in and the app was opened via an invitation
  // link, sign in the user anonymously and record the referrer UID in the
  // user's RTDB record.
  if user == nil && invitedBy != nil {
    Auth.auth().signInAnonymously() { (user, error) in
      if let user = user {
        let userRecord = Database.database().reference().child("users").child(user.uid)
        userRecord.child("referred_by").setValue(invitedBy)
        if dynamicLink.matchConfidence == .weak {
          // If the Dynamic Link has a weak match confidence, it is possible
          // that the current device isn't the same device on which the invitation
          // link was originally opened. The way you handle this situation
          // depends on your app, but in general, you should avoid exposing
          // personal information, such as the referrer's email address, to
          // the user.
        }
      }
    }
  }
}

Java

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // ...

    FirebaseDynamicLinks.getInstance()
            .getDynamicLink(getIntent())
            .addOnSuccessListener(this, new OnSuccessListener<PendingDynamicLinkData>() {
                @Override
                public void onSuccess(PendingDynamicLinkData pendingDynamicLinkData) {
                    // Get deep link from result (may be null if no link is found)
                    Uri deepLink = null;
                    if (pendingDynamicLinkData != null) {
                        deepLink = pendingDynamicLinkData.getLink();
                    }
                    //
                    // If the user isn't signed in and the pending Dynamic Link is
                    // an invitation, sign in the user anonymously, and record the
                    // referrer's UID.
                    //
                    FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
                    if (user == null
                            && deepLink != null
                            && deepLink.getBooleanQueryParameter("invitedby", false)) {
                        String referrerUid = deepLink.getQueryParameter("invitedby");
                        createAnonymousAccountWithReferrerInfo(referrerUid);
                    }
                }
            });
}

private void createAnonymousAccountWithReferrerInfo(final String referrerUid) {
    FirebaseAuth.getInstance()
            .signInAnonymously()
            .addOnSuccessListener(new OnSuccessListener<AuthResult>() {
                @Override
                public void onSuccess(AuthResult authResult) {
                    // Keep track of the referrer in the RTDB. Database calls
                    // will depend on the structure of your app's RTDB.
                    FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
                    DatabaseReference userRecord =
                            FirebaseDatabase.getInstance().getReference()
                                    .child("users")
                                    .child(user.getUid());
                    userRecord.child("referred_by").setValue(referrerUid);
                }
            });
}

Kotlin+KTX

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)

    // ...

    Firebase.dynamicLinks
            .getDynamicLink(intent)
            .addOnSuccessListener(this) { pendingDynamicLinkData ->
                // Get deep link from result (may be null if no link is found)
                var deepLink: Uri? = null
                if (pendingDynamicLinkData != null) {
                    deepLink = pendingDynamicLinkData.link
                }
                //
                // If the user isn't signed in and the pending Dynamic Link is
                // an invitation, sign in the user anonymously, and record the
                // referrer's UID.
                //
                val user = Firebase.auth.currentUser
                if (user == null &&
                        deepLink != null &&
                        deepLink.getBooleanQueryParameter("invitedby", false)) {
                    val referrerUid = deepLink.getQueryParameter("invitedby")
                    createAnonymousAccountWithReferrerInfo(referrerUid)
                }
            }
}

private fun createAnonymousAccountWithReferrerInfo(referrerUid: String?) {
    Firebase.auth
            .signInAnonymously()
            .addOnSuccessListener {
                // Keep track of the referrer in the RTDB. Database calls
                // will depend on the structure of your app's RTDB.
                val user = Firebase.auth.currentUser
                val userRecord = Firebase.database.reference
                        .child("users")
                        .child(user!!.uid)
                userRecord.child("referred_by").setValue(referrerUid)
            }
}

তারপর, যখন আমন্ত্রণ প্রাপক একটি অ্যাকাউন্ট তৈরি করার সিদ্ধান্ত নেয়, তখন আপনি বেনামী অ্যাকাউন্ট থেকে আমন্ত্রণ প্রাপকের নতুন অ্যাকাউন্টে রেফারেল তথ্য বহন করতে পারেন।

প্রথমে, আমন্ত্রিত ব্যক্তি যে সাইন-ইন পদ্ধতি ব্যবহার করতে চান সেটি ব্যবহার করে একটি AuthCredential অবজেক্ট পান। উদাহরণস্বরূপ, একটি ইমেল ঠিকানা এবং পাসওয়ার্ড দিয়ে সাইন ইন করতে:

সুইফট

দ্রষ্টব্য: এই Firebase পণ্যটি macOS, Mac ক্যাটালিস্ট, tvOS, বা watchOS লক্ষ্যে উপলব্ধ নয়৷
let credential = EmailAuthProvider.credential(withEmail: email, password: password)

Java

AuthCredential credential = EmailAuthProvider.getCredential(email, password);

Kotlin+KTX

val credential = EmailAuthProvider.getCredential(email, password)

তারপর, এই শংসাপত্রটি বেনামী অ্যাকাউন্টে লিঙ্ক করুন:

সুইফট

দ্রষ্টব্য: এই Firebase পণ্যটি macOS, Mac ক্যাটালিস্ট, tvOS, বা watchOS লক্ষ্যে উপলব্ধ নয়৷
if let user = Auth.auth().currentUser {
  user.link(with: credential) { (user, error) in
    // Complete any post sign-up tasks here.
  }
}

Java

FirebaseAuth.getInstance().getCurrentUser()
        .linkWithCredential(credential)
        .addOnSuccessListener(new OnSuccessListener<AuthResult>() {
            @Override
            public void onSuccess(AuthResult authResult) {
                // Complete any post sign-up tasks here.
            }
        });

Kotlin+KTX

Firebase.auth.currentUser!!
        .linkWithCredential(credential)
        .addOnSuccessListener {
            // Complete any post sign-up tasks here.
        }

বেনামী অ্যাকাউন্টে আপনার যোগ করা সমস্ত পুরস্কার ডেটাতে নতুন, স্থায়ী, অ্যাকাউন্টের অ্যাক্সেস রয়েছে।

রেফারার এবং প্রাপককে পুরষ্কার দিন

এখন যেহেতু আপনি ডায়নামিক লিঙ্ক থেকে আমন্ত্রণ ডেটা পুনরুদ্ধার করেছেন এবং সংরক্ষণ করেছেন, আপনি রেফারার এবং প্রাপককে রেফারেল পুরষ্কার প্রদান করতে পারেন যখনই আপনার প্রয়োজনীয় মানদণ্ড পূরণ করা হয়েছে৷

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

উদাহরণস্বরূপ, ধরুন আপনার একটি গেম আছে এবং আপনি প্রাপক সাইন আপ করার পরে প্রাপককে এবং প্রাপক লেভেল 5 এ পৌঁছানোর পরে রেফারকারীকে ইন-গেম মুদ্রার একটি পুরষ্কার দিতে চান৷

সাইন আপ করার জন্য পুরষ্কার মঞ্জুর করতে, এমন একটি ফাংশন স্থাপন করুন যা একটি নির্দিষ্ট রিয়েলটাইম ডেটাবেস কী তৈরি করার জন্য পর্যবেক্ষণ করে এবং যখন এটি হয় তখন পুরষ্কার মঞ্জুর করে৷ উদাহরণ স্বরূপ:

const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);

exports.grantSignupReward = functions.database.ref('/users/{uid}/last_signin_at')
    .onCreate(event => {
      var uid = event.params.uid;
      admin.database().ref(`users/${uid}/referred_by`)
        .once('value').then(function(data) {
          var referred_by_somebody = data.val();
          if (referred_by_somebody) {
            var moneyRef = admin.database()
                .ref(`/users/${uid}/inventory/pieces_of_eight`);
            moneyRef.transaction(function (current_value) {
              return (current_value || 0) + 50;
            });
          }
        });
    });

তারপর, যখন একজন নতুন ব্যবহারকারী সাইন আপ করেন, রিয়েলটাইম ডেটাবেস কী তৈরি করে এই ফাংশনটি ট্রিগার করুন৷ উদাহরণ স্বরূপ, linkWithCredential এর সাকসেস লিসেনারে ফাংশনটি ট্রিগার করুন, যা আপনি আগের ধাপে তৈরি করেছেন:

সুইফট

দ্রষ্টব্য: এই Firebase পণ্যটি macOS, Mac ক্যাটালিস্ট, tvOS, বা watchOS লক্ষ্যে উপলব্ধ নয়৷
if let user = Auth.auth().currentUser {
  user.link(with: credential) { (user, error) in
    // Complete any post sign-up tasks here.

    // Trigger the sign-up reward function by creating the "last_signin_at" field.
    // (If this is a value you want to track, you would also update this field in
    // the success listeners of your Firebase Authentication signIn calls.)
    if let user = user {
      let userRecord = Database.database().reference().child("users").child(user.uid)
      userRecord.child("last_signin_at").setValue(ServerValue.timestamp())
    }
  }
}

Java

FirebaseAuth.getInstance().getCurrentUser()
        .linkWithCredential(credential)
        .addOnSuccessListener(new OnSuccessListener<AuthResult>() {
            @Override
            public void onSuccess(AuthResult authResult) {
                // Complete any post sign-up tasks here.

                // Trigger the sign-up reward function by creating the
                // "last_signin_at" field. (If this is a value you want to track,
                // you would also update this field in the success listeners of
                // your Firebase Authentication signIn calls.)
                FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
                DatabaseReference userRecord =
                        FirebaseDatabase.getInstance().getReference()
                                .child("users")
                                .child(user.getUid());
                userRecord.child("last_signin_at").setValue(ServerValue.TIMESTAMP);
            }
        });

Kotlin+KTX

Firebase.auth.currentUser!!
        .linkWithCredential(credential)
        .addOnSuccessListener {
            // Complete any post sign-up tasks here.

            // Trigger the sign-up reward function by creating the
            // "last_signin_at" field. (If this is a value you want to track,
            // you would also update this field in the success listeners of
            // your Firebase Authentication signIn calls.)
            val user = Firebase.auth.currentUser!!
            val userRecord = Firebase.database.reference
                    .child("users")
                    .child(user.uid)
            userRecord.child("last_signin_at").setValue(ServerValue.TIMESTAMP)
        }

প্রাপক লেভেল 5 এ পৌঁছালে রেফারকারীকে একটি পুরষ্কার প্রদান করতে, একটি ফাংশন স্থাপন করুন যা আপনার ব্যবহারকারীর রেকর্ডে level ক্ষেত্রের পরিবর্তনগুলি দেখে। যদি একজন ব্যবহারকারী লেভেল 4 থেকে লেভেল 5 এ যান এবং ব্যবহারকারীর রেফারার রেকর্ড করা থাকে, তাহলে পুরষ্কার দিন:

const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);

exports.rewardReferrals = functions.database.ref('/users/{uid}/level')
    .onUpdate(event => {
      var level = event.data.val();
      var prev_level = event.data.previous.val();
      if (prev_level == 4 && level == 5) {
        var referrerRef = event.data.ref.parent.child('referred_by');
        return referrerRef.once('value').then(function(data) {
          var referrerUid = data.val();
          if (referrerUid) {
            var moneyRef = admin.database()
                .ref(`/users/${referrerUid}/inventory/pieces_of_eight`);
            return moneyRef.transaction(function (current_value) {
              return (current_value || 0) + 50;
            });
          }
        });
      }
    });

রেফারকারী এবং আপনার নতুন ব্যবহারকারী উভয়ই এখন তাদের পুরস্কার পেয়েছেন।