আপনার অ্যাপে ব্যবহারকারীদের আমন্ত্রণ জানান

আপনার অ্যাপ ইনস্টল করার জন্য নতুন ব্যবহারকারীদের পেতে সবচেয়ে কার্যকর উপায়গুলির মধ্যে একটি হল আপনার ব্যবহারকারীদের তাদের বন্ধুদের সাথে আপনার অ্যাপ থেকে সামগ্রী ভাগ করতে সক্ষম করা৷ ডায়নামিক লিংকগুলির সাহায্যে, আপনি ব্যবহারকারী-থেকে-ব্যবহারকারী ভাগ করে নেওয়ার একটি দুর্দান্ত অভিজ্ঞতা তৈরি করতে পারেন: যে ব্যবহারকারীরা তাদের বন্ধুদের কাছ থেকে সামগ্রীর সুপারিশ পান তারা একটি লিঙ্কে ক্লিক করতে পারেন এবং সরাসরি আপনার অ্যাপের শেয়ার করা সামগ্রীতে নিয়ে যেতে পারেন, এমনকি যদি তাদের অ্যাপে যেতে হয় প্রথমে আপনার অ্যাপ ইনস্টল করতে স্টোর বা Google Play Store এ যান।

ব্যবহারকারীর রেফারেলের আঠালোতা এবং ডায়নামিক লিঙ্কগুলির অধ্যবসায়কে একত্রিত করে, আপনি ব্যবহারকারী-থেকে-ব্যবহারকারী ভাগ করে নেওয়া এবং রেফারেল বৈশিষ্ট্যগুলি তৈরি করতে পারেন যা নতুন ব্যবহারকারীদেরকে সরাসরি আপনার অ্যাপের সামগ্রীতে আঁকতে বা প্রচার পরিবেশন করে যা রেফারকারী এবং রেফার করাদের পারস্পরিকভাবে উপকৃত হয়। .

প্রধান লাভ

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

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

একটি নতুন ফায়ারবেস প্রকল্প সেট আপ করুন এবং আপনার অ্যাপে ডায়নামিক লিঙ্ক SDK ইনস্টল করুন৷

ডায়নামিক লিঙ্ক SDK ইনস্টল করলে Firebase অ্যাপটিতে ডায়নামিক লিঙ্ক সম্পর্কে ডেটা পাঠাতে দেয়, ব্যবহারকারী অ্যাপটি ইনস্টল করার পরেও।

এখন ব্যবহারকারীরা তাদের বন্ধুদের পাঠাতে পারে এমন লিঙ্কগুলি সেট আপ করার সময়। আপনার ব্যবহারকারীর বন্ধুদের অ্যাপটি এখনও ইনস্টল না থাকলে চিন্তা করবেন না; ডায়নামিক লিঙ্কগুলি আপনার জন্য এটি যত্ন নিতে পারে।

কন্টেন্টের প্রতিটি উপাদানের জন্য আপনি শেয়ার করার যোগ্য হতে চান, একটি ডায়নামিক লিঙ্ক তৈরি করুন

আপনি যখন ডায়নামিক লিঙ্ক তৈরি করেন, আপনাকে link প্যারামিটার হিসাবে একটি HTTP বা HTTPS URL প্রদান করতে হবে যা আপনি যে সামগ্রী ভাগ করছেন তা সনাক্ত করতে ব্যবহার করা হবে৷ আপনার যদি সমতুল্য সামগ্রী সহ একটি ওয়েবসাইট থাকে তবে আপনার ওয়েবসাইটের URL ব্যবহার করা উচিত৷ এটি নিশ্চিত করবে যে এই লিঙ্কগুলি একটি প্ল্যাটফর্মে সঠিকভাবে রেন্ডার করে যা ডায়নামিক লিঙ্কগুলিকে সমর্থন করে না, যেমন একটি ডেস্কটপ ব্রাউজার। যেমন:

https://example.page.link/?link=https://www.example.com/content?item%3D1234&apn=com.example.android&ibi=com.example.ios&isi=12345

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

https://example.page.link/?link=https://www.example.com/invitation?gameid%3D1234%26referrer%3D555&apn=com.example.android&ibi=com.example.ios&isi=12345

আপনি এই লিঙ্কগুলি ভাগ করার আগে, আপনি বন্ধুত্বপূর্ণ-সুদর্শন URL তৈরি করতে Firebase ডায়নামিক লিঙ্ক URL শর্টনার API ব্যবহার করতে চাইতে পারেন। একটি সংক্ষিপ্ত ডায়নামিক লিঙ্ক নিম্নলিখিত উদাহরণের মত দেখাচ্ছে:

https://example.page.link/WXYZ

আপনি যে লিঙ্কই ব্যবহার করুন না কেন, ব্যবহারকারীরা যখন তাদের ডিভাইসে ডায়নামিক লিঙ্ক খুলবেন, অ্যাপটি ইনস্টল করার জন্য ibi apn isi প্যারামিটার (iOS-এ) দ্বারা নির্দিষ্ট করা অ্যাপ ব্যবহারকারীদের প্লে স্টোর বা অ্যাপ স্টোরে নিয়ে যাবে। যদি এটি ইতিমধ্যে ইনস্টল করা না থাকে। তারপরে, যখন অ্যাপটি ইনস্টল করা হয় এবং খোলা হয়, 'লিঙ্ক' প্যারামিটারে নির্দিষ্ট করা URLটি অ্যাপে চলে যায়।

প্রথমে, Hangouts এর মতো একটি রুম-ভিত্তিক চ্যাট অ্যাপের এই সাধারণ উদাহরণটি দেখুন যা লোকেদের চ্যাট রুমে আমন্ত্রণ জানাতে লিঙ্ক তৈরি করে৷

iOS

chat app screenshotchat app screenshot with share sheet

অ্যান্ড্রয়েড

chat app screenshotchat app screenshot with share sheet

সুইফট

দ্রষ্টব্য: এই Firebase পণ্যটি macOS, Mac ক্যাটালিস্ট, tvOS, বা watchOS লক্ষ্যে উপলব্ধ নয়৷
func generateContentLink() -> URL {
  let baseURL = URL(string: "https://your-custom-name.page.link")!
  let domain = "https://your-app.page.link"
  let linkBuilder = DynamicLinkComponents(link: baseURL, domainURIPrefix: domain)
  linkBuilder?.iOSParameters = DynamicLinkIOSParameters(bundleID: "com.your.bundleID")
  linkBuilder?.androidParameters =
      DynamicLinkAndroidParameters(packageName: "com.your.packageName")


  // Fall back to the base url if we can't generate a dynamic link.
  return linkBuilder?.link ?? baseURL
}

উদ্দেশ্য গ

দ্রষ্টব্য: এই Firebase পণ্যটি macOS, Mac ক্যাটালিস্ট, tvOS, বা watchOS লক্ষ্যে উপলব্ধ নয়৷
- (NSURL *)generateContentLink {
  NSURL *baseURL = [NSURL URLWithString:@"https://your-custom-name.page.link"];
  NSString *domain = @"https://your-app.page.link";
  FIRDynamicLinkComponents *builder = [[FIRDynamicLinkComponents alloc] initWithLink:baseURL domainURIPrefix:domain];
  builder.iOSParameters = [FIRDynamicLinkIOSParameters parametersWithBundleID:@"com.your.bundleID"];
  builder.androidParameters = [FIRDynamicLinkAndroidParameters parametersWithPackageName:@"com.your.packageName"];

  // Fall back to the base url if we can't generate a dynamic link.
  return builder.link ?: baseURL;
}

Java

public static Uri generateContentLink() {
    Uri baseUrl = Uri.parse("https://your-custom-name.page.link");
    String domain = "https://your-app.page.link";

    DynamicLink link = FirebaseDynamicLinks.getInstance()
            .createDynamicLink()
            .setLink(baseUrl)
            .setDomainUriPrefix(domain)
            .setIosParameters(new DynamicLink.IosParameters.Builder("com.your.bundleid").build())
            .setAndroidParameters(new DynamicLink.AndroidParameters.Builder("com.your.packageName").build())
            .buildDynamicLink();

    return link.getUri();
}

Kotlin+KTX

fun generateContentLink(): Uri {
    val baseUrl = Uri.parse("https://your-custom-name.page.link")
    val domain = "https://your-app.page.link"

    val link = FirebaseDynamicLinks.getInstance()
            .createDynamicLink()
            .setLink(baseUrl)
            .setDomainUriPrefix(domain)
            .setIosParameters(DynamicLink.IosParameters.Builder("com.your.bundleid").build())
            .setAndroidParameters(DynamicLink.AndroidParameters.Builder("com.your.packageName").build())
            .buildDynamicLink()

    return link.uri
}

একবার আপনার একটি ডায়নামিক লিঙ্ক হয়ে গেলে, আপনি আপনার UI এ একটি শেয়ার বোতাম যোগ করতে পারেন যা স্ট্যান্ডার্ড প্ল্যাটফর্ম শেয়ারিং ফ্লো চালু করবে:

সুইফট

দ্রষ্টব্য: এই Firebase পণ্যটি macOS, Mac ক্যাটালিস্ট, tvOS, বা watchOS লক্ষ্যে উপলব্ধ নয়৷
lazy private var shareController: UIActivityViewController = {
  let activities: [Any] = [
    "Learn how to share content via Firebase",
    URL(string: "https://firebase.google.com")!
  ]
  let controller = UIActivityViewController(activityItems: activities,
                                            applicationActivities: nil)
  return controller
}()

@IBAction func shareButtonPressed(_ sender: Any) {
  let inviteController = UIStoryboard(name: "Main", bundle: nil)
    .instantiateViewController(withIdentifier: "InviteViewController")
  self.navigationController?.pushViewController(inviteController, animated: true)
}

উদ্দেশ্য গ

দ্রষ্টব্য: এই Firebase পণ্যটি macOS, Mac ক্যাটালিস্ট, tvOS, বা watchOS লক্ষ্যে উপলব্ধ নয়৷
- (UIActivityViewController *)shareController {
  if (_shareController == nil) {
    NSArray *activities = @[
      @"Learn how to share content via Firebase",
      [NSURL URLWithString:@"https://firebase.google.com"]
    ];
    UIActivityViewController *controller = [[UIActivityViewController alloc] initWithActivityItems:activities applicationActivities:nil];
    _shareController = controller;
  }
  return _shareController;
}

- (IBAction)shareLinkButtonPressed:(UIView *)sender {
  if (![sender isKindOfClass:[UIView class]]) {
    return;
  }

  self.shareController.popoverPresentationController.sourceView = sender;
  [self presentViewController:self.shareController animated:YES completion:nil];
}

Java

private void onShareClicked() {
    Uri link = DynamicLinksUtil.generateContentLink();

    Intent intent = new Intent(Intent.ACTION_SEND);
    intent.setType("text/plain");
    intent.putExtra(Intent.EXTRA_TEXT, link.toString());

    startActivity(Intent.createChooser(intent, "Share Link"));
}

Kotlin+KTX

private fun onShareClicked() {
    val link = DynamicLinksUtil.generateContentLink()

    val intent = Intent(Intent.ACTION_SEND)
    intent.type = "text/plain"
    intent.putExtra(Intent.EXTRA_TEXT, link.toString())

    startActivity(Intent.createChooser(intent, "Share Link"))
}

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

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

কখনও কখনও, যদিও, শুধুমাত্র কোন টেক্সট ছাড়া একটি খালি লিঙ্ক পাঠানো একটি বাধ্যতামূলক রেফারেলের জন্য যথেষ্ট নয়। একটি সংক্ষিপ্ত বার্তা সহ লিঙ্কটির সাথে এবং, যদি সম্ভব হয়, একটি সমৃদ্ধ উপস্থাপনা দ্বারা, ব্যবহারকারীরা রেফারেলের মূল্য প্রস্তাবটি যখন তারা এটি গ্রহণ করে তখন বুঝতে পারে:

iOS

rewarded referral screenshotrewarded referral screenshot with share sheet

অ্যান্ড্রয়েড

rewarded referral screenshotrewarded referral screenshot with share sheet

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

  • ইমেল, টেক্সট বার্তা, এবং লিঙ্ক শেয়ার বোতামগুলি অনুলিপি করুন এবং তাদের বার্তাগুলি যথাযথভাবে কাস্টমাইজ করুন। ইমেল একটি বিষয় অন্তর্ভুক্ত করবে এবং লাইন বিরতি, ছবি এবং হোয়াইটস্পেস সহ একটি দীর্ঘ বডি অন্তর্ভুক্ত করতে পারে; টেক্সটে লাইন ব্রেক সহ একটি ছোট বডি অন্তর্ভুক্ত করা উচিত কিন্তু সামান্য হোয়াইটস্পেস এবং কোনও ছবি নেই; এবং লিঙ্ক অনুলিপি শুধুমাত্র লিঙ্ক এবং অন্য কিছু অনুলিপি করা উচিত.
  • লিঙ্কের সাথে একটি ছোট আমন্ত্রণ বার্তা সহ অন্য সবকিছুর জন্য সিস্টেম শেয়ার UI ব্যবহার করুন৷
  • ইউআরএল স্কিমের মাধ্যমে গভীর লিঙ্ক বা অন্য অ্যাপের সার্বজনীন লিঙ্ক যা আপনার অ্যাপের আমন্ত্রণগুলি পরিচালনা করার জন্য বিশেষ যুক্তিযুক্ত। এটি আপনার সংস্থা এবং অন্যান্য অ্যাপের মধ্যে অংশীদারিত্বের বাইরে কাজ করবে না এবং সম্ভবত ছোট সংস্থাগুলির জন্য এটি একটি বিকল্প নয়৷ এটি বলেছে, কিছু অ্যাপ তাদের সর্বজনীন/গভীর লিঙ্কিং আচরণকে সর্বজনীনভাবে নথিভুক্ত করতে পারে। আমরা আমাদের নমুনায় এর একটি ডামি সংস্করণ প্রয়োগ করব।

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

সুইফট

দ্রষ্টব্য: এই Firebase পণ্যটি macOS, Mac ক্যাটালিস্ট, tvOS, বা watchOS লক্ষ্যে উপলব্ধ নয়৷
/// The content within an invite, with optional fields to accommodate all presenters.
/// This type could be modified to also include an image, for sending invites over email.
struct InviteContent {

  /// The subject of the message. Not used for invites without subjects, like text message invites.
  var subject: String?

  /// The body of the message. Indispensable content should go here.
  var body: String?

  /// The URL containing the invite. In link-copy cases, only this field will be used.
  var link: URL

}

উদ্দেশ্য গ

দ্রষ্টব্য: এই Firebase পণ্যটি macOS, Mac ক্যাটালিস্ট, tvOS, বা watchOS লক্ষ্যে উপলব্ধ নয়৷
/// The content within an invite, with optional fields to accommodate all presenters.
/// This type could be modified to also include an image, for sending invites over email.
@interface InviteContent : NSObject <NSCopying>

/// The subject of the message. Not used for invites without subjects, like text message invites.
@property (nonatomic, readonly, nullable) NSString *subject;

/// The body of the message. Indispensable content should go here.
@property (nonatomic, readonly, nullable) NSString *body;

/// The URL containing the invite. In link-copy cases, only this field will be used.
@property (nonatomic, readonly) NSURL *link;

- (instancetype)initWithSubject:(nullable NSString *)subject
                           body:(nullable NSString *)body
                           link:(NSURL *)link NS_DESIGNATED_INITIALIZER;

- (instancetype)init NS_UNAVAILABLE;

@end

Java

/**
 * The content of an invitation, with optional fields to accommodate all presenters.
 * This type could be modified to also include an image, for sending invites over email.
 */
public class InviteContent {

    /**
     * The subject of the message. Not used for invites without subjects, like SMS.
     **/
    @Nullable
    public final String subject;

    /**
     * The body of the message. Indispensable content should go here.
     **/
    @Nullable
    public final String body;

    /**
     * The URL containing the link to invite. In link-copy cases, only this field will be used.
     **/
    @NonNull
    public final Uri link;

    public InviteContent(@Nullable String subject, @Nullable String body, @NonNull Uri link) {
        // ...
    }

}

Kotlin+KTX

/**
 * The content of an invitation, with optional fields to accommodate all presenters.
 * This type could be modified to also include an image, for sending invites over email.
 */
data class InviteContent(
    /** The subject of the message. Not used for invites without subjects, like SMS.  */
    val subject: String?,
    /** The body of the message. Indispensable content should go here.  */
    val body: String?,
    /** The URL containing the link to invite. In link-copy cases, only this field will be used.  */
    val link: Uri
)

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

সুইফট

দ্রষ্টব্য: এই Firebase পণ্যটি macOS, Mac ক্যাটালিস্ট, tvOS, বা watchOS লক্ষ্যে উপলব্ধ নয়৷
/// A type responsible for presenting an invite given using a specific method
/// given the content of the invite.
protocol InvitePresenter {

  /// The name of the presenter. User-visible.
  var name: String { get }

  /// An icon representing the invite method. User-visible.
  var icon: UIImage? { get }

  /// Whether or not the presenter's method is available. iOS devices that aren't phones
  /// may not be able to send texts, for example.
  var isAvailable: Bool { get }

  /// The content of the invite. Some of the content type's fields may be unused.
  var content: InviteContent { get }

  /// Designated initializer.
  init(content: InviteContent, presentingController: UIViewController)

  /// This method should cause the presenter to present the invite and then handle any actions
  /// required to complete the invite flow.
  func sendInvite()

}

উদ্দেশ্য গ

দ্রষ্টব্য: এই Firebase পণ্যটি macOS, Mac ক্যাটালিস্ট, tvOS, বা watchOS লক্ষ্যে উপলব্ধ নয়৷
/// A type responsible for presenting an invite given using a specific method
/// given the content of the invite.
@protocol InvitePresenter <NSObject>

/// The name of the presenter. User-visible.
@property (nonatomic, readonly) NSString *name;

/// An icon representing the invite method. User-visible.
@property (nonatomic, readonly, nullable) UIImage *icon;

/// Whether or not the presenter's method is available. iOS devices that aren't phones
/// may not be able to send texts, for example.
@property (nonatomic, readonly) BOOL isAvailable;

/// The content of the invite. Some of the content type's fields may be unused.
@property (nonatomic, readonly) InviteContent *content;

/// Designated initializer.
- (instancetype)initWithContent:(InviteContent *)content presentingViewController:(UIViewController *)controller;

/// This method should cause the presenter to present the invite and then handle any actions
/// required to complete the invite flow.
- (void)sendInvite;

@end

Java

/**
 * Presents the invite using a specific method, such as email or social.
 */
public class InvitePresenter {

    /**
     * The user-visible name of the invite method, like 'Email' or 'SMS'
     **/
    public final String name;

    /**
     * An icon representing the invite method.
     **/
    @DrawableRes
    public final int icon;

    /**
     * Whether or not the method is available on this device. For example, SMS is phone only.
     **/
    public final boolean isAvailable;

    /**
     * The Content of the invitation
     **/
    public final InviteContent content;

    public InvitePresenter(String name, @DrawableRes int icon, boolean isAvailable, InviteContent content) {
        // ...
    }

    /**
     * Send the invitation using the specified method.
     */
    public void sendInvite(Context context) {
        // ...
    }

}

Kotlin+KTX

/**
 * Presents the invite using a specific method, such as email or social.
 */
open class InvitePresenter(
    /** The user-visible name of the invite method, like 'Email' or 'SMS'  */
    val name: String,
    /** An icon representing the invite method.  */
    @param:DrawableRes @field:DrawableRes
    val icon: Int,
    /** Whether or not the method is available on this device. For example, SMS is phone only.  */
    val isAvailable: Boolean,
    /** The Content of the invitation  */
    val content: InviteContent
) {
    /**
     * Send the invitation using the specified method.
     */
    open fun sendInvite(context: Context) {
        // ...
    }
}

এখন যা বাকি আছে তা হল এটিকে আপনার পছন্দের একটি UI উপাদানে প্লাগ করুন। এই আমন্ত্রণ প্রবাহের সম্পূর্ণ বাস্তবায়নের জন্য, iOS এবং Android এর জন্য GitHub-এ নমুনাগুলি দেখুন।

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

সুবিধা:

  • জটিল মার্কআপ সহ ইমেলগুলি সক্ষম করে যা পাঠানোর আগে আপনার ব্যবহারকারী দ্বারা সংশোধন করা যায় না৷
  • আরও দানাদার ট্র্যাকিং/বিশ্লেষণ সক্ষম করে (যেমন আপনার ব্যাকএন্ডে সাফল্য এবং ব্যর্থতা পাঠান)।

অসুবিধা:

  • ইমেল স্প্যাম হিসাবে পতাকাঙ্কিত হওয়ার সম্ভাবনা বেশি
  • একটি ইমেল বিতরণ পরিষেবার সাথে একীকরণ প্রয়োজন৷
  • অ্যাপ-মধ্যস্থ যোগাযোগের অনুমতি প্রয়োজন

সাধারণত, আপনার নিজস্ব ইমেল ডেলিভারি পরিষেবার মাধ্যমে আমন্ত্রণ পাঠানো বহুমুখীতার খরচে আরও সামঞ্জস্যপূর্ণ এবং সম্ভাব্য সমৃদ্ধ আমন্ত্রণ অভিজ্ঞতা প্রদান করে।

আপনার অ্যাপে লিঙ্ক করা বিষয়বস্তু খুলুন

অবশেষে, আপনাকে আপনার অ্যাপে পাস করা লিঙ্কটি গ্রহণ করতে হবে যাতে আপনি প্রাপকের কাছে লিঙ্ক করা সামগ্রী প্রদর্শন করতে পারেন। এটি ডায়নামিক লিঙ্ক SDK ব্যবহার করা সহজ:

iOS

iOS-এ, আপনি application:continueUserActivity:restorationHandler: পদ্ধতি প্রয়োগ করে ডায়নামিক লিঙ্ক পাবেন। পুনরুদ্ধার হ্যান্ডলারে, আপনি handleUniversalLink:completion: কল করে ডায়নামিক লিঙ্ক পেতে পারেন। যদি আপনার অ্যাপে একটি ডায়নামিক লিঙ্ক পাঠানো হয়, তাহলে আপনি এটি FIRDynamicLink এর url প্রপার্টি থেকে পেতে পারেন। উদাহরণ স্বরূপ:

উদ্দেশ্য গ

দ্রষ্টব্য: এই Firebase পণ্যটি macOS, Mac ক্যাটালিস্ট, tvOS, বা watchOS লক্ষ্যে উপলব্ধ নয়৷
[[FIRDynamicLinks dynamicLinks]
    handleUniversalLink:userActivity.webpageURL
             completion:^(FIRDynamicLink * _Nullable dynamicLink,
                          NSError * _Nullable error) {
      NSString *link = dynamicLink.url;
      BOOL strongMatch = dynamicLink.matchConfidence == FIRDynamicLinkMatchConfidenceStrong;
      // ...
    }];

সুইফট

দ্রষ্টব্য: এই Firebase পণ্যটি macOS, Mac ক্যাটালিস্ট, tvOS, বা watchOS লক্ষ্যে উপলব্ধ নয়৷
FIRDynamicLinks.dynamicLinks()?.handleUniversalLink(userActivity.webpageURL!) { (dynamiclink, error) in
    let link = dynamicLink.url
    let strongMatch = dynamicLink.matchConfidence == FIRDynamicLinkMatchConfidenceStrong
    // ...
}

অতিরিক্তভাবে, আপনাকে অবশ্যই কল করতে হবে dynamicLinkFromCustomSchemeURL: application:openURL:options: পদ্ধতিতে আপনার অ্যাপে কাস্টম স্কিম URL হিসাবে পাস করা ডায়নামিক লিঙ্কগুলি পেতে। উদাহরণ স্বরূপ:

উদ্দেশ্য গ

দ্রষ্টব্য: এই Firebase পণ্যটি macOS, Mac ক্যাটালিস্ট, tvOS, বা watchOS লক্ষ্যে উপলব্ধ নয়৷
FIRDynamicLink *dynamicLink = [[FIRDynamicLinks dynamicLinks] dynamicLinkFromCustomSchemeURL:url];
if (dynamicLink) {
  NSString *link = dynamicLink.url;
  BOOL strongMatch = dynamicLink.matchConfidence == FIRDynamicLinkMatchConfidenceStrong;
  // ...
  return YES;
}

সুইফট

দ্রষ্টব্য: এই Firebase পণ্যটি macOS, Mac ক্যাটালিস্ট, tvOS, বা watchOS লক্ষ্যে উপলব্ধ নয়৷
let dynamicLink = FIRDynamicLinks.dynamicLinks()?.dynamicLinkFromCustomSchemeURL(url)
if let dynamicLink = dynamicLink {
  let link = dynamicLink.url
  let strongMatch = dynamicLink.matchConfidence == FIRDynamicLinkMatchConfidenceStrong
  // ...
  return true
}

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

আপনি যদি একটি নির্দিষ্ট প্রাপকের উদ্দেশ্যে একটি লিঙ্ক পান তবে নিশ্চিত করুন যে কোনও ব্যবহারকারী-নির্দিষ্ট যুক্তি চালানোর আগে ডায়নামিক লিঙ্কের মিলের আত্মবিশ্বাস strong

অ্যান্ড্রয়েড

অ্যান্ড্রয়েডে, আপনি ডায়নামিক লিঙ্ক থেকে ডেটা পেতে getDynamicLink() পদ্ধতি ব্যবহার করেন:

Java

FirebaseDynamicLinks.getInstance()
        .getDynamicLink(getIntent())
        .addOnCompleteListener(new OnCompleteListener<PendingDynamicLinkData>() {
            @Override
            public void onComplete(@NonNull Task<PendingDynamicLinkData> task) {
                if (!task.isSuccessful()) {
                    // Handle error
                    // ...
                }

                FirebaseAppInvite invite = FirebaseAppInvite.getInvitation(task.getResult());
                if (invite != null) {
                    // Handle invite
                    // ...
                }
            }
        });

Kotlin+KTX

Firebase.dynamicLinks
        .getDynamicLink(intent)
        .addOnCompleteListener { task ->
            if (!task.isSuccessful) {
                // Handle error
                // ...
            }

            val invite = FirebaseAppInvite.getInvitation(task.result)
            if (invite != null) {
                // Handle invite
                // ...
            }
        }

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