Không thể import thư viện ngoài khi dùng window

lúc mình thêm các thư viện từ ngoài như socket-io hay các cái package từ ngoài thì gặp vấn đề :
lúc mình dùng mac thì có thể sử dụng còn dùng win thì nó báo lỗi như hình.

  • cả mac và win cùng version node , version npm
    mình đã cập nhật tini-app-studio
    ở win nó báo lỗi như này
    (! mình xin phép xóa ảnh)
    bạn xem giúp mình với ạ
    tks

Chào bạn, hiện Tini App không cho phép sử dụng trực tiếp các network api như fetch, XML, Websocket vì vấn đề bảo mật và một số policy của Tiki. Để truy cập network bạn phải thông qua các jsapi có dạng my.<api function>();
ví dụ như my.request;
Chính vì vậy các npm package có sử dụng các api này sẽ không được Tini App hỗ trợ.

Nếu bạn sử dụng socket.io thì mình có viết một package polyfill cho Tini App và có hướng dẫn ở thread này (Làm sao để lấy kết quả của webSocket trả về - #2 by thien.ly).

thế phần mình code bằng mac import thư viện ngoài test chạy được ở trên tini console thì lúc build không chạy được ạ bạn ?

Nếu bạn dùng được thư viện ngoài trên Simulator/ Compiler của Tini Studio IDE thì khi upload build lên Tini Console và chạy thử cũng sẽ dùng được nhé. Nếu bạn thấy bất cứ lỗi nào thì có thể nói rõ hơn cho team ở đây hoặc yêu cầu support trực tiếp trên slack bạn nhé.

  • ở trên bạn bảo mình là “không cho phép sử dụng trực tiếp các network api như websocket vì vấn đề bảo mật” nhưng mình vẫn import thư viện socket vào và test chạy được (chỉ chạy được ở trên máy mac và trên tini console)
  • ở dưới thì bạn bảo test được thì sẽ chạy được
    vậy không biết là code dùng thư viện websocket có chạy được lúc build trên app không bạn nhỉ ??

Bạn đang dùng thư viện socket nào đó?

cái này nhé bạn. mình thấy package của bạn hình như cũng overwrite lại cái này

Đúng rồi, package mà mình gửi là bản mình patch lại socket.io-client v2 để chạy được trên Tini App thôi. Còn nguyên bản thư viện socket.io-client chưa patch sẽ không được hỗ trợ bạn nhé.

không được hỗ trợ hay là không được dùng ạ bạn ??
mình muốn biết phần code mình import thư viện socket.io-client v2 nó chạy được lúc build thực tế không.

Sẽ không được hỗ trợ nhé bạn. Và khả năng cao sẽ bị reject khi bạn submit app để review.
Mình thấy có một số cách để solve vấn đề này của bạn:

  • 1 Sử dụng native api của Tini App để connect tới websocket server: my.connectSocket, my. closeSocket, my. onSocketMessage,…
  • 2 Sử dụng package của mình gửi ở trên, tuy nhiên package trên chỉ phù hợp với các server socket.io version 2.x và không support polling transport;
  • 3 Bạn có thể tham khảo cách patching package của mình ở trên để tạo các package phù hợp cho các socket.io version mới hơn.

Lưu ý: Bạn cần phải thêm tên miền trong phần Cài đặt chung của ứng dụng trên Tini Console trước khi sử dụng các Networking API và Webview. Xem phần hướng dẫn tại đây.

Mình recommend cách 1 vì dễ sử dụng hơn và giảm bundle size, tăng tốc độ load cho Tini App của bạn

  • my.connectSocket bạn test thử chưa ạ( mình đọc doc không thấy ví dụ với mình test cũng không dùng được )
  • package của bạn thì mình thấy có gửi request kết nối đến websocket được nhưng không cho nhận response với mã lỗi khác 200 còn response với mã lỗi khác thì báo Error during WebSocket handshake: Unexpected response code: 502

Package của mình polyfill lại class Websocket bằng các api của Tini App:
my.connectSocket, my.onSocketClose, my.onSocketOpen, my.onSocketError, my.onSocketMessage, my.sendSocketMessage, my.closeSocket;
bạn có thể xem thêm ở file này. Nghĩa là package tiniapp.socket-io.adapter chạy được thì my.connectSocket cũng chạy được đó. Mình có build và public một app demo ở đây:

link app(open via Tiki mobile app) https://tiki.vn/apps/com.chattie.app;
github frontend Tini-app https://github.com/cute-me-on-repos/com.chattie.app;
github backend https://github.com/cute-me-on-repos/tiniapp.socket-io.adapter.server-demo;

Còn vấn đề Error on handshake 502 thì rất có thể bạn đang sử dụng polling transport. Bạn cần support và chỉ sử dụng websocket transport ở cả client và server.

Về polling transport và websocket transport bạn có thể xem thêm ở https://socket.io/docs/v3/how-it-works/#transports