امکانات پیشرفته چت - قسمت دوم

دقت کنید که این مستند مخصوص نیازمندی‌های چت است و برای رقابت آنلاین هیچ کاربردی ندارد.

در قسمت اول امکانات چت پیشرفته دیدید که چگونه می‌توان یک گروه ساخت، فردی را به گروه اضافه کرد، دوستان را به گروه دعوت نمود و … . در این مستند، کارهای تکمیلی باقیمانده برای اینکه اپلیکیشن چت خود را کامل کنید، را خواهید دید. اینکه چگونه پیام‌های گروه‌هایی را که کاربر اپلیکیشن شما در آنها عضو است، دریافت کنید و در صفحه اپلیکیشن به او نشان دهید و … را در این مستند خواهید دید.

پیش‌نیازها

  1. در صورتی که با سرویس بلادرنگ آشنایی ندارید به معرفی سرویس بلادرنگ مراجعه کنید.
  2. در صورتی که هنوز با تنظیمات پنل سرویس بلادرنگ آشنا نشده اید، به تنظیمات پنل سرویس بلادرنگ مراجعه کنید.
  3. اگر هنوز SDK یونیتی را راه‌اندازی نکرده‌اید، به راه‌اندازی SDK یونیتی مراجعه کنید.
  4. در صورتی که با نحوه ایجاد یک چت ساده به کمک سرویس بلادرنگ آشنایی ندارید، مستند اتصال ساده و ارسال پیام را حتما مطالعه کنید.
  5. این مستند ادامه قسمت اول امکانات چت پیشرفته است و نیاز است که نگاهی به قسمت اول بیاندازید.

مفهوم Listener

در صورتی که در SDK بکتوری، شما سرویس بلادرنگ را فعال کنید، پیام‌هایی که برای کاربر فعلی شما ارسال می‌شود، مانند چت مستقیم و یا پیامی در یک گروه، منطقا می‌بایست به دست کاربر شما برسند. در صورتی که یک اپلیکیشن چت می‌نویسید، قطعا علاقه‌مند هستید که این پیام‌ها در جایی از کد به دست شما برسد تا بتوانید بر اساس اتفاقات مختلف، چیزی به کاربر نمایش دهید و او را در جریان بگذارید. مثلا اگر پیامی از دوستش به دست وی رسید، نوتیفیکیشنی در صفحه برایش ظاهر شود، اگر به گروهی دعوت شد، در جایی لیست دعوت‌هایی که در حالت Pending است را مشاهده کرده و تایید یا رد کند و … .

راه‌کاری که بکتوری برای این مسئله دارد، استفاده از Listener می‌باشد. همانطور که ادامه خواهید دید، Listener یک تابع در محیط Unity است که شما باید آن را به نحوه‌ای که دوست دارید پیاده‌سازی کنید. کد زیر یک پیاده‌سازی بسیار ساده از تمامی توابع Listener مورد نیاز برای این قسمت را نشان می‌دهد. شما باید این تکه کد را در جای مناسبی از برنامه‌تان، مثلا بعد از اتصال به بلادرنگ، قرار دهید: (توضیح دقیق بعد از کد)

BacktoryChat.Direct.SetOnReceivingMessageListener ((message) => {
    // 1. TODO handle direct chat message receive here
});
BacktoryChat.Group.SetOnInvitingToJoinListener((message) => {
    // 2. TODO handle group invitation here
});
BacktoryChat.Group.SetOnMemberAddedListener((message) => {
    // 3. TODO handle member addition here
});
BacktoryChat.Group.SetOnMemberJoinedListener((message) => {
    // 4. TODO handle member join here
});
BacktoryChat.Group.SetOnMemberLeftListener((message) => {
    // 5. TODO handle member leave here
});
BacktoryChat.Group.SetOnMemberRemovedListener((message) => {
    // 6. TODO handle member remove here
});
BacktoryChat.Group.SetOnReceivingMessageListener((message) => {
    // 7. TODO handle group chat message receive here
});

همان‌طور که می‌بینید، به ازای هر اتفاقی که در گروه‌های مختلف بیافتد و یا پیام‌هایی که بین کاربر فعلی شما و کاربران دیگر و یا گروه‌هایی که کاربر فعلی شما در آن عضو است، جابه‌جا شود، یک تابع وجود دارد که تمام افراد مرتبط با آن خبردار خواهند شد. دقت کنید که جهت فعال‌سازی Listenerهای فوق ابتدا باید به سرویس بلادرنگ اتصال برقرار کنید.

دریافت چت از کاربران دیگر

برای آنکه پیام‌های چتی که از کاربران دیگر، مستقیما برای کاربر شما ارسال می‌شود، را دریافت کنید، باید تابع OnReceivingMessageListener از Listener چت را پیاده‌سازی کنید و پیام دریافتی را به هر صورت که تمایل دارید نمایش دهید:

BacktoryChat.Direct.SetOnReceivingMessageListener ((BacktoryDirectChatMessage message) => {
     Debug.Log("Sent from: " + message.SenderUserId);
     Debug.Log("Message: " + message.Content);
});

همانطور که دیده می‌شود، با سادگی می‌توانید بفهمید چه پیامی از چه کسی به دست شما رسیده است.

دریافت پیام در یک گروه دیگر

در صورتی که در یکی از گروه‌های تحت عضویت کاربر فعلی اپ شما، پیامی داده شود، شما می‌توانید با پیاده‌سازی Listener چت به کمک تابع زیر پیام را دریافت کرده و به نحوه مناسب در گروه مورد نظر به کاربر نمایش دهید‍:

BacktoryChat.Group.SetOnReceivingMessageListener((BacktoryGroupChatMessage message) => {
    Debug.Log("Group: " + message.GroupId)
    Debug.Log("Sent from: " + message.SenderUserId);
    Debug.Log("Message: " + message.Content);
});

در تکه کد بالا، تمامی اطلاعاتی که لازم است تا شما بتوانید متن پیام، فرستنده‌ی آن و گروهی که پیام به آن تعلق دارد را ببینید، برای شما log کرده‌ایم.

دریافت یک Invitation عضویت

در صورتی که برای کاربر فعلی شما (CurrentUser) یک درخواست عضویت در گروه دیگر (Invitation) توسط Owner آن گروه ارسال شود، کاربر شما به کمک تابع OnInvitingToJoinListener از Listener چت درخواست را دریافت خواهد کرد و می‌تواند به کمک سرویس عضویت در گروه‌های دیگر در آن سرویس عضو شود.

BacktoryChat.Group.SetOnInvitingToJoinListener((BacktoryInvitationToGroupMessage message) =>
{
    Debug.Log("You are invited to group: " + message.GroupName);
    Debug.Log("Id of group is: " + message.GroupId);
    Debug.Log("You are invited by: " + message.InvitorId);
});

دریافت اضافه شدن کاربر به گروه

در صورتی که عضو گروهی باشید و کاربری به آن اضافه شود، شما از طریق Listener چت و تابع OnMemberAddedListener خبردار خواهید شد. دقت کنید که این کاربر می‌توانید خود شما باشید، یعنی وقتی شما به یک گروه اضافه شوید، پیام به خود شما هم خواهد آمد. به این ترتیب اگر چندین دستگاه داشته باشید و روی یکی از آنها خود را به گروه اضافه کنید، بقیه دستگاه‌ها هم خبردار خواهند شد.

BacktoryChat.Group.SetOnMemberAddedListener((BacktoryUserAddedToGroupMessage message) =>
{
    Debug.Log(message.AdderUserId + " has added "
        + message.AddedUserId + " to group "
        + message.GroupId);
});

همانطور که می‌بینید محتوای پیام شامل کاربری که افزودن را انجام داده، کاربری که افزوده شده و گروهی که اتفاق در آن افتاده است می‌شود.

دریافت Join شدن کاربر به گروه

زمانی که در یکی از گروه‌های تحت عضویت کاربر موبایل شما، یک کاربر دیگر Join شود، SDK از طریق Listener چت و تابع OnMemberJoinedListener به شما خبر خواهد داد. در کد زیر می‌توانید فیلدهایی که در این پیام به شما داده می‌شود را ببینید:

BacktoryChat.Group.SetOnMemberJoinedListener((BacktoryUserJoinedGroupMessage message) => {
    Debug.Log("Group is: " + message.GroupId);
    Debug.Log("User is: " + message.UserId);
});

همانطور که می‌بینید شناسه گروه و شناسه کاربر در اختیار شما قرار گرفته است.

دریافت ترک گروه توسط یک کاربر

وقتی عضو یک گروه هستید و کاربری آن گروه را ترک می‌کند، شما از طریق Listener چت و تابع OnMemberLeftListener از این اتفاق خبردار خواهید شد.

BacktoryChat.Group.SetOnMemberLeftListener((BacktoryUserLeftGroupMessage message) => {
    Debug.Log("Group is: " + message.GroupId);
    Debug.Log("User is: " + message.UserId);
}

همانطور که می‌بینید شناسه گروه و شناسه کاربر در اختیار شما قرار گرفته است.

دریافت حذف یک کاربر از گروه

برخلاف ترک یک کاربر که کاربر به اختیار گروه را ترک می‌کند، گاهی Owner تصمیم می‌گیرد که کاربری را از گروه اخراج کند، به این عمل Remove گفته می‌شود. وقتی در یکی از گروه‌هایی که کاربر موبایل شما عضو است، کاربری Remove شود، پیامی برای همه اعضای گروه از جمله کاربر شما ارسال خواهد شد. این پیام از طریق Listener چت و تابع OnMemberRemovedListener در اختیار شما قرار خواهد گرفت:

BacktoryChat.Group.SetOnMemberRemovedListener(
    (BacktoryUserRemovedFromGroupMessage message) =>
{
    Debug.Log(message.RemovedUserId + " is removed");
    Debug.Log("He is removed by: " + message.RemoverUserId);
    Debug.Log("This has happened in group: " + message.GroupId);
}

همانطور که می‌بینید، کاربری که حذف‌کننده است، کاربری که حذف شده و گروه به شما داده شده است.

به این ترتیب، شما با تمامی ویژگی‌های بکتوری برای ساخت یک اپلیکیشن چت کامل آشنا شدید. در صورتی که قصد تولید بازی و رقابت آنلاین ندارید، نیاز به مطالعه مستندات بعدی بکتوری ندارید. در غیر این صورت در مستند بعدی خواهید دید که چگونه می‌توان برای یک رقابت آنلاین رقیب یافت و اصطلاحا عمل Match-Making انجام داد.

گام بعدی