عميل .NET API الرسمي للدردشة ، خدمة لبناء تطبيقات الدردشة.
استكشف المستندات »
عينات الرمز · الإبلاغ عن ميزة طلب
يمكنك الاشتراك في حساب دفق في صفحة Get Get.
يمكنك استخدام هذه المكتبة للوصول إلى نقاط نهاية API للدردشة.
بالنسبة للتكامل من جانب العميل (الويب والجوال) ، ألق نظرة على مكتبات JavaScript و iOS و Android SDK (مستندات).
كسر التغييرات في v1.0 <
تلقت المكتبة العديد من التغييرات في V1.0 لتسهيل الاستخدام وأكثر قابلية للصيانة في المستقبل. التغيير الرئيسي هو أنه تم فصل كل من فئات
ChannelClientإلى وحدات صغيرة نسميها العملاء. (هذا يعيد تشكيل بنية مكتبة Java الخاصة بنا أيضًا.) التغييرات الرئيسية:
- اختفت فئات
ChannelClient، وتم تنظيمها في عملاء أصغر فيStreamChat.Clientsالاسم.- لا يحتفظ هؤلاء العملاء بالدولة
Channelاعتادت في وقت سابق حيث احتفظتchannelTypeوchannelIdفي الذاكرة. وهذا يعني أنك ستحتاج إلى تمريرها فيchannelTypeوchannelIdإلى الكثير من مكالمات الطريقة فيIChannelClient.- أسماء طريقة ASYNC لديها لاحقة
Asyncالآن.- جميع الأساليب والفصول العامة لها وثائق.
- تمت إعادة تسمية المعرفات من
IDإلىIdلمتابعة دليل التسمية من Microsoft. مثلuserID->userId.- تم إعادة تسمية الكثير من فئات البيانات لتكون أكثر منطقية. مثل
ChannelObject->Channel.- تم نقل فئات البيانات إلى
StreamChat.Modelsالاسم.- تكافؤ الميزة الكاملة: جميع واجهات برمجة التطبيقات الخلفية متوفرة.
- القيم التي تم إرجاعها هي نوع من
ApiResponseوفضح IMPONTION IMATIATON مع طريقةGetRateLimit().- تم إعادة تنظيم هيكل المجلد للمشروع لمتابعة توصية Microsoft.
- تم تحسين اختبارات الوحدة. فهي أصغر وأكثر تركيزًا ولديها طرق تنظيف.
- وأضاف .NET 6.0 دعم.
الاستخدام الصحيح للمكتبة:
var clientFactory = new StreamClientFactory ( "YourApiKey" , "YourApiSecret" ) ; // Note: all client instances can be used as a singleton for the lifetime // of your application as they don't maintain state. var userClient = clientFactory . GetUserClient ( ) ; var channelClient = clientFactory . GetChannelClient ( ) ; var messageClient = clientFactory . GetMessageClient ( ) ; var reactionClient = clientFactory . GetReactionClient ( ) ; var jamesBond = await userClient . UpsertAsync ( new UserRequest { Id = "james_bond" } ) ; var agentM = await userClient . UpsertAsync ( new UserRequest { Id = "agent_m" } ) ; var channel = await channelClient . GetOrCreateAsync ( "messaging" , "superHeroChannel" , createdBy : jamesBond . Id ) ; await channelClient . AddMembersAsync ( channel . Type , channel . Id , jamesBond . Id , agentM . Id ) ; var message = await messageClient . SendMessageAsync ( channel . Type , channel . Id , jamesBond . Id , "I need a new quest Agent M." ) ; await reactionClient . SendReactionAsync ( message . Id , "like" , agentM . Id ) ;
$ dotnet add package stream-chat-netنصيحة: يمكنك العثور على عينات رمز في مجلد العينات.
using StreamChat . Clients ; // Client factory instantiation.
var clientFactory = new StreamClientFactory ( "YourApiKey" , "YourApiSecret" ) ;
// Or you can configure some options such as custom HttpClient, HTTP timeouts etc.
var clientFactory = new StreamClientFactory ( "YourApiKey" , "YourApiSecret" , opts => opts . Timeout = TimeSpan . FromSeconds ( 5 ) ) ;
// Get clients from client factory. Note: all clients can be used as a singleton in your application.
var channelClient = clientFactory . GetChannelClient ( ) ;
var messageClient = clientFactory . GetMessageClient ( ) ; var userClient = clientFactory . GetUserClient ( ) ;
// Without expiration
var token = userClient . CreateToken ( "bob-1" ) ;
// With expiration
var token = userClient . CreateToken ( "bob-1" , expiration : DateTimeOffset . UtcNow . AddHours ( 1 ) ) ; var userClient = clientFactory . GetUserClient ( ) ;
var bob = new UserRequest
{
Id = "bob-1" ,
Role = Role . Admin ,
Teams = new [ ] { "red" , "blue" } // if multi-tenant enabled
} ;
bob . SetData ( "age" , 27 ) ;
await userClient . UpsertAsync ( bob ) ;
// Batch update is also supported
var jane = new UserRequest { Id = "jane" } ;
var june = new UserRequest { Id = "june" } ;
var users = await userClient . UpsertManyAsync ( new [ ] { bob , jane , june } ) ; var userClient = clientFactory . GetUserClient ( ) ;
await userClient . ExportAsync ( "bob-1" ) ;
await userClient . DeactivateAsync ( "bob-1" ) ;
await userClient . ReactivateAsync ( "bob-1" ) ;
await userClient . DeleteAsync ( "bob-1" ) ; var channelTypeClient = clientFactory . GetChannelTypeClient ( ) ;
var chanTypeConf = new ChannelTypeWithStringCommands
{
Name = "livechat" ,
Automod = Automod . Disabled ,
Commands = new List < string > { Commands . Ban } ,
Mutes = true
} ;
var chanType = await channelTypeClient . CreateChannelTypeAsync ( chanTypeConf ) ;
var allChanTypes = await channelTypeClient . ListChannelTypesAsync ( ) ; var channelClient = clientFactory . GetChannelClient ( ) ;
// Create a channel with members from the start, Bob is the creator
var channel = channelClient . GetOrCreateAsync ( "messaging" , "bob-and-jane" , bob . Id , bob . Id , jane . Id ) ;
// Create channel and then add members, Mike is the creator
var channel = channelClient . GetOrCreateAsync ( "messaging" , "bob-and-jane" , mike . Id ) ;
channelClient . AddMembersAsync ( channel . Type , channel . Id , bob . Id , jane . Id , joe . Id ) ; var messageClient = clientFactory . GetMessageClient ( ) ;
// Only text
messageClient . SendMessageAsync ( channel . Type , channel . Id , bob . Id , "Hey, I'm Bob!" ) ;
// With custom data
var msgReq = new MessageRequest { Text = "Hi june!" } ;
msgReq . SetData ( "location" , "amsterdam" ) ;
var bobMessageResp = await messageClient . SendMessageAsync ( channelType , channel . Id , msgReq , bob . Id ) ;
// Threads
var juneReply = new MessageRequest { Text = "Long time no see!" } ;
var juneReplyMessage = await messageClient . SendMessageToThreadAsync ( channel . Type , channel . Id , juneReply , june . Id , bobMessageResp . Message . Id ) var reactionClient = clientFactory . GetReactionClient ( ) ;
await reactionClient . SendReactionAsync ( message . Id , "like" , bob . Id ) ;
var allReactions = await reactionClient . GetReactionsAsync ( message . Id ) ; var channelClient = clientFactory . GetChannelClient ( ) ;
var userClient = clientFactory . GetUserClient ( ) ;
var flagClient = clientFactory . GetFlagClient ( ) ;
await channelClient . AddModeratorsAsync ( channel . Type , channel . Id , new [ ] { jane . Id } ) ;
await userClient . BanAsync ( new BanRequest
{
Type = channel . Type ,
Id = channel . Id ,
Reason = "reason" ,
TargetUserId = bob . Id ,
UserId = jane . Id
} ) ;
await flagClient . FlagUserAsync ( bob . Id , jane . Id ) ; var permissionClient = clientFactory . GetPermissionClient ( ) ;
await permissionClient . CreateRoleAsync ( "channel-boss" ) ;
// Assign users to roles (optional message)
await channelClient . AssignRolesAsync ( new AssignRoleRequest
{
AssignRoles = new List < RoleAssignment >
{
new RoleAssignment { UserId = bob . ID , ChannelRole = Role . ChannelModerator } ,
new RoleAssignment { UserId = june . ID , ChannelRole = "channel-boss" }
} ,
Message = new MessageRequest { Text = "Bob and June just became mods" , User = bob }
} ) ; var deviceClient = clientFactory . GetDeviceClient ( ) ;
var junePhone = new Device
{
ID = "iOS Device Token" ,
PushProvider = PushProvider . APN ,
UserId = june . ID
} ;
await deviceClient . AddDeviceAsync ( junePhone ) ;
var devices = await deviceClient . GetDevicesAsync ( june . Id ) ; var channelClient = clientFactory . GetChannelClient ( ) ;
var taskClient = clientFactory . GetTaskClient ( ) ;
var taskResponse = channelClient . ExportChannelAsync ( new ExportChannelRequest { Id = channel . Id , Type = channel . Type } ) ;
// Wait for the completion
var complete = false ;
var iterations = 0 ;
AsyncTaskStatusResponse resp = null ;
while ( ! complete && iterations < 1000 )
{
resp = await taskClient . GetTaskStatusAsync ( taskResponse . TaskId ) ;
if ( resp . Status == AsyncTaskStatus . Completed )
{
complete = true ;
break ;
}
iterations ++ ;
await Task . Delay ( 100 ) ;
}
if ( complete )
{
Console . WriteLine ( resp . Result [ "url" ] ) ;
} نرحب بتغييرات التعليمات البرمجية التي تعمل على تحسين هذه المكتبة أو تحدد مشكلة ، يرجى التأكد من اتباع جميع أفضل الممارسات وإضافة اختبارات إذا كان ذلك ممكنًا قبل إرسال طلب سحب على Github. يسعدنا جدًا دمج الكود الخاص بك في المستودع الرسمي. تأكد من توقيع اتفاقية ترخيص المساهم (CLA) أولاً. انظر ملف الترخيص الخاص بنا لمزيد من التفاصيل.
توجه إلى المساهمة. md لبعض نصائح التنمية.
لقد أغلقنا مؤخرًا جولة تمويل من سلسلة B بقيمة 38 مليون دولار ونواصل نموها بنشاط. يتم استخدام واجهات برمجة التطبيقات لدينا من قبل أكثر من مليار مستخدم نهائي ، وستتاح لك فرصة لإحداث تأثير كبير على المنتج داخل فريق من أقوى المهندسين في جميع أنحاء العالم.
تحقق من فتحاتنا الحالية وقدم التقديم عبر موقع Stream.