تقوم شركة Puster Cannells Client Plugin باستهداف Android و iOS. إنه يلف Pusher-Websocket-Java v2.2.5 و Pusher-Websocket-swift V8.0.0.
للدروس التعليمية والمزيد من المعلومات المتعمقة حول قنوات Puster ، تفضل بزيارة المستندات الرسمية.
يعمل هذا العميل مع خوادم Pusher الرسمية وخادم WebSocket المستضافة ذاتيا (Laravel-Websockets).
أضف إلى pubspec.yaml
dependencies :
pusher_client : ^2.0.0 قم بتعيين الحد الأدنى لمدى النشر في Podfile إلى 9.0. انتقل إلى ios/Podfile ، ثم قم بإلغاء هذا الخط:
# platform :ios, '8.0'
تغييره إلى:
platform :ios, '9.0'
قد يكون لديك مشكلة في الاشتراك في القنوات الخاصة إذا كنت تستخدم خادمًا محليًا مثل Laravel-Websockets ، لإصلاح ذلك ، انتقل إلى ios/Runner/Info.plist وأضف:
< key >NSAppTransportSecurity</ key >
< dict >
< key >NSAllowsArbitraryLoads</ key >
< true />
</ dict >إذا كنت تعرف المجالات التي ستتصل بها لإضافة:
< key >NSAppTransportSecurity</ key >
< dict >
< key >NSExceptionDomains</ key >
< dict >
< key >example.com</ key >
< dict >
< key >NSExceptionAllowsInsecureHTTPLoads</ key >
< true />
< key >NSIncludesSubdomains</ key >
< true />
</ dict >
</ dict >
</ dict > إذا كنت قد قمت بتمكين التغلب على الكود مع R8 أو Proguard ، فأنت بحاجة إلى إضافة القاعدة التالية في android/app/build.gradle :
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile( ' proguard-android.txt ' ), ' proguard-rules.pro '
}
} ثم في android/app/proguard-rules.pro :
- keep class com.github.chinloyal.pusher_client .** { * ; } ها هي واجهة برمجة التطبيقات باختصار.
PusherOptions options = PusherOptions (
host : 'example.com' ,
wsPort : 6001 ,
encrypted : false ,
auth : PusherAuth (
'http://example.com/auth' ,
headers : {
'Authorization' : 'Bearer $ token ' ,
},
),
);
PusherClient pusher = PusherClient (
YOUR_APP_KEY ,
options,
autoConnect : false
);
// connect at a later time than at instantiation.
pusher. connect ();
pusher. onConnectionStateChange ((state) {
print ( "previousState: ${ state . previousState }, currentState: ${ state . currentState }" );
});
pusher. onConnectionError ((error) {
print ( "error: ${ error . message }" );
});
// Subscribe to a private channel
Channel channel = pusher. subscribe ( "private-orders" );
// Bind to listen for events called "order-status-updated" sent to "private-orders" channel
channel. bind ( "order-status-updated" , ( PusherEvent event) {
print (event.data);
});
// Unsubscribe from channel
pusher. unsubscribe ( "private-orders" );
// Disconnect from pusher service
pusher. disconnect ();
يمكن العثور على مزيد من المعلومات بتنسيق مرجعي أدناه.
يأخذ المُنشئ مفتاح تطبيق يمكنك الحصول عليه من قسم الوصول إلى API في التطبيق في لوحة معلومات قناة Puster ، وكائن خيارات Puster.
PusherClient pusher = PusherClient ( YOUR_APP_KEY , PusherOptions ()); إذا كنت ستستخدم القنوات الخاصة أو التواجد أو المشفرة ، فستحتاج إلى توفير PusherAuth لاستخدامها عند مصادقة الاشتراكات. من أجل القيام بذلك ، تحتاج إلى تمريرها في كائن PusherOptions الذي كان لديه مجموعة auth .
PusherAuth auth = PusherAuth (
// for auth endpoint use full url
'http://example.com/auth' ,
headers : {
'Authorization' : 'Bearer $ token ' ,
},
);
PusherOptions options = PusherOptions (
auth : auth
);
PusherClient pusher = PusherClient ( YOUR_APP_KEY , options);لتعطيل التسجيل والاتصال التلقائي ، قم بذلك:
PusherClient pusher = PusherClient (
YOUR_APP_KEY ,
options,
enableLogging : false ,
autoConnect : false ,
); إذا تم تعطيل الاتصال التلقائي ، فيمكنك الاتصال يدويًا باستخدام connect() على مثيل Pusher.
يتم تكوين معظم وظائف هذا البرنامج المساعد من خلال كائن PusherOptions. يمكنك تكوينه عن طريق تعيين المعلمات على الكائن قبل نقله إلى عميل Puster. فيما يلي جدول يحتوي على جميع الخصائص التي يمكنك تعيينها.
| طريقة | المعلمة | وصف |
|---|---|---|
| مشفرة | بول | ما إذا كان ينبغي إجراء الاتصال مع TLS أم لا. |
| مصادقة | Pusherauth | يحدد خيارات التفويض لاستخدامها عند مصادقة قنوات خاصة وذاتية خاصة. |
| يستضيف | خيط | المضيف الذي سيتم إجراء الاتصالات. |
| WSPORT | int | الميناء الذي سيتم إجراء اتصالات غير مشفرة. ضبط تلقائيا بشكل صحيح. |
| WSSPORT | int | سيتم إجراء الاتصالات المشفرة. ضبط تلقائيا بشكل صحيح. |
| تَجَمَّع | خيط | يعين المجموعة التي سيتصل بها العميل ، وبالتالي تعيين المضيف والمنفذ بشكل صحيح. |
| ActivityTimeout | int | عدد المللي ثانية من عدم النشاط الذي سيتم فيه تشغيل "ping" للتحقق من الاتصال. القيمة الافتراضية هي 120،000. |
| Pongtimeout | int | عدد المللي ثانية التي ينتظرها العميل لتلقي استجابة "pong" من الخادم قبل فصلها. القيمة الافتراضية هي 30،000. |
| MaxReConnectionattempts | int | عدد محاولات إعادة الاتصال التي سيتم إجراؤها عند استدعاء pusher.connect() ، وبعد ذلك سوف يستسلم العميل. |
| maxreconnectgapinseconds | int | يمتد التأخير في اثنين من إعادة الاتصال بشكل كبير (1 ، 2 ، 4 ، .. ثواني) تحدد هذه الخاصية الحد الأقصى بين محاولتين لإعادة الاتصال. |
يتم استخدام طريقة connect() أيضًا لإعادة الاتصال في حالة فقدان الاتصال ، على سبيل المثال إذا فقد الجهاز الاستقبال. لاحظ أنه سيتم الحفاظ على حالة اشتراكات القناة وروابط الأحداث أثناء فصلها وإعادة تفاوضها مع الخادم بمجرد إعادة تأسيس الاتصال.
pusher. disconnect (); بعد قطع الاتصال ، سيصدر مثيل PusherClient أي موارد مخصصة داخليًا (مؤشرات الترابط واتصالات الشبكة)
تستخدم القنوات مفهوم القنوات كوسيلة للاشتراك في البيانات. يتم تحديدها واشتراكها باسم بسيط. الأحداث مرتبطة بقناة ويتم تحديدها أيضًا بالاسم.
كما ذكر أعلاه ، يجب تسجيل اشتراكات القناة فقط مرة واحدة بواسطة مثيل PusherClient . يتم الحفاظ عليها عبر الانفصال وإعادة تأسيسها مع الخادم عند إعادة الاتصال. لا ينبغي إعادة تسجيلها. ومع ذلك ، قد يتم تسجيلهم في مثيل PusherClient قبل الاتصال الأول connect - سيتم إكمالهم مع الخادم بمجرد توفر الاتصال.
تتضمن الطريقة الافتراضية للاشتراك في قناة التذرع في طريقة الاشتراك في كائن العميل الخاص بك:
Channel channel = pusher. subscribe ( "my-channel" ); هذا يعيد كائن Channel ، والتي يمكن أن تكون الأحداث ملزمة.
يتم إنشاء القنوات الخاصة بنفس طريقة القنوات العامة تمامًا ، باستثناء أنها تتواجد في مساحة الاسم "الخاصة" . هذا يعني بادئة اسم القناة:
Channel privateChannel = pusher. subscribe ( "private-status-update" );يشمل الاشتراك في القنوات الخاصة المصادقة على العميل. راجع قسم مُنشئ Pusher للحصول على مثال القناة المصادقة لمزيد من المعلومات.
على غرار القنوات الخاصة ، يمكنك أيضًا الاشتراك في قناة مشفرة خاصة. يدعم هذا البرنامج المساعد بالكامل التشفير من طرف إلى طرف. هذا يعني أنك فقط أنت وعملائك المتصلون سيكونون قادرين على قراءة رسائلك. لا يمكن أن فك تشفيرهم. يجب أن تكون هذه القنوات مسبوقة بـ "incrypted-"
كما هو الحال مع القنوات الخاصة ، يجب عليك توفير نقطة نهاية مصادقة. يجب أن تستخدم نقطة النهاية هذه عميل خادم يدعم التشفير من طرف إلى طرف. هناك نقطة نهاية مظاهرة للنظر في استخدام nodejs.
قنوات التواجد هي القنوات التي تسبق أسماؤها عن طريق "التواجد" . تحتاج قنوات التواجد أيضًا إلى المصادقة.
Channel presenceChannel = pusher. subscribe ( "presence-another-channel" );هناك نوعان من الأحداث التي تحدث على اشتراكات القناة.
Channel channel = pusher. subscribe ( "private-orders" );
channel. bind ( "order-status-updated" , ( PusherEvent event) {
print (event.data);
}); تتلقى عمليات الاسترجاعات التي تربطها PusherEvent :
| ملكية | يكتب | وصف |
|---|---|---|
eventName | String | اسم الحدث. |
channelName | String | اسم القناة التي تم تشغيل الحدث. (خياري) |
data | String | البيانات التي تم تمريرها trigger ، مشفرة كسلسلة. إذا اجتازت كائنًا ، فسيتم تسلسله إلى سلسلة JSON التي يمكنك تحليلها حسب الضرورة. (خياري) |
userId | String | معرف المستخدم الذي أثار الحدث. هذا متاح فقط لأحداث العميل الناتجة عن قنوات التواجد. (خياري) |
يمكنك إلغاء الظهر من حدث عن طريق القيام:
channel. unbind ( "order-status-updated" );بمجرد أن يتم تصريح الاشتراك الخاص أو التواجد ونجاح الاشتراك ، من الممكن تشغيل الأحداث على تلك القنوات.
تسمى الأحداث الناتجة عن العملاء أحداث العميل. نظرًا لأنهم يتم تشغيلهم من عميل قد لا يتم الوثوق به ، فهناك عدد من القواعد القسرية عند استخدامها. تشمل بعض هذه القواعد:
channel. bind ( "pusher:subscription_succeeded" , ( PusherEvent event) {
channel. trigger ( "client-istyping" , { "name" : "Bob" });
});للحصول على التفاصيل الكاملة ، راجع وثائق أحداث العميل.
بمجرد الاتصال ، يمكنك الوصول إلى معرف فريد لاتصال العميل الحالي. هذا هو المعروف باسم معرف المقبس . يمكنك الوصول إلى القيمة بمجرد إنشاء الاتصال على النحو التالي:
String socketId = pusher. getSocketId ();لمزيد من المعلومات حول كيفية ولماذا يوجد معرف المقبس ، انظر الوثائق حول مصادقة المستخدمين واستبعاد المستلمين.
لا يبدو أن تسجيل IOS يخرج إلى تعويض Flutter ، ولكن إذا قمت بتشغيل التطبيق من XCode ، فيجب أن تكون قادرًا على رؤية السجلات.
إذا كنت تستخدم خادمًا محليًا للدافع ولكن غير قادر على الاشتراك في قناة خاصة ، فأضف هذا إلى iOS/Runner/Info.plist:
< key >NSAppTransportSecurity</ key >
< dict >
< key >NSAllowsArbitraryLoads</ key >
< true />
</ dict >إذا كنت تعرف المجالات التي ستتصل بها لإضافة:
< key >NSAppTransportSecurity</ key >
< dict >
< key >NSExceptionDomains</ key >
< dict >
< key >example.com</ key >
< dict >
< key >NSExceptionAllowsInsecureHTTPLoads</ key >
< true />
< key >NSIncludesSubdomains</ key >
< true />
</ dict >
</ dict >
</ dict >