Android- 環信IM即時通訊_RESTAPI(2)
A)REST client:HTTPCLIENT>JSON
REST client就是呼叫REST API的程式端,這裡我們用的是Android客戶端;呼叫REST API, 本質就是傳送HTTP請求, 只不過大家常用的可能是 HTTP GET 和 HTTP POST_請求,
但是在REST 裡面還經常用到 _HTTP PUT 和 HTTP DELETE, 在REST中, 把這四種操作稱之為動詞, 可以(不是特別準確)的想象成增刪改查.
而動詞所操作的物件, 在REST中, 被稱之為_資源, 也就是_URL;
環信的REST API都是基於json的, 所以在構造_HTTP_ 請求的時候, 需要在_HTTP HEADER_中指明:
header_name | header_value | description |
Accept | application/json | 伺服器端返回給客戶端的資料型別 |
Content-Type | application/json | 客戶端發到伺服器端的是資料型別 |
在Java中, REST Client實現方式有多種,比如JBOss RestEasy、 Sun Jersey、Dropwizard、Apache HTTPClient.我們這裡直接使用Apache Http Client.
一個DEMO
假設一個企業id為 easemob-demo, 然後這個企業下面有個app名字叫做 chatdemoui, 那麼環信的REST API就是下面的樣子:
Path : URI HTTP Method : GET/POST/PUT/DELETE Request Headers : { Content-Type : application/json, Accept: application/json, Authorization : Bearer ${token} } Request Body : JSON
名詞 | 解釋 |
org_name | 企業的唯一標識,開發者在環信開發者管理後臺註冊賬號時填寫的企業ID |
app_name | 同一”企業”下”app”唯一標識,開發者在環信開發者管理後臺建立應用時填寫的”應用名稱” |
org_admin | 開發者在環信開發者管理後臺註冊時填寫的”使用者名稱”.企業管理員擁有對該企業賬號下所有資源的操作許可權 |
app_admin | 應用管理員,具有admin許可權的一個特殊IM使用者,擁有對該應用下所有資源的操作許可權 |
appkey | 一個app的唯一標識,規則是 ${org_name}#${app_name} |
*******************************************************使用者體系整合*********************************************************
1.環信ID規則
>本文件中可能會交錯使用”環信ID”和”環信使用者名稱”兩個術語, 但是請注意, 這裡兩個的意思是一樣的
>推薦使用 md5 函式, 對使用者名稱進行加密
2.獲取APP管理員Token
使用app的client_id和client_secret獲取授權管理員token,可以在環信管理後臺的app詳情頁面看到
傳送
Path : /{org_name}/{app_name}/token
HTTP Method : POST
URL Params : 無
Request Headers : {“Content-Type”:”application/json”}
Request Body : {“grant_type”: “client_credentials”,”client_id”: “{app的client_id}”,”client_secret”: “{app的client_secret}”}
key | value |
access_token | token值 |
expires_in | 有效時間,秒為單位, 預設是七天,在有效期內是不需要重複獲取的 |
application | 當前app的UUID值 |
可能的錯誤碼:
400 (client_id或client_secret錯誤)
5xx
詳見:[REST介面錯誤碼] (http://www.easemob.com/docs/helps/errorcodes/)
3.註冊IM使用者[單個]
在url指定的org和app中建立一個新的使用者,分兩種模式:開放註冊 和 授權註冊
>開放註冊
Path : /{org_name}/{app_name}/users
HTTP Method : POST
URL Params : 無
Request Headers : {“Content-Type”:”application/json”}
Request Body : {“username”:”${使用者名稱}”,”password”:”${密碼}”, “nickname”:”${暱稱值}”}
>授權註冊
Path : /{org_name}/{app_name}/users
HTTP Method : POST
URL Params : 無
Request Headers :
{
“Content-Type”:”application/json”,
”Authorization”:”Bearer ${token}”
}
Request Body : {“username”:”${使用者名稱}”,”password”:”${密碼}”}
4.註冊IM使用者[批量]
Path : /{org_name}/{app_name}/users
HTTP Method : POST
URL Params : 無
Request Headers : {“Content-Type”:”application/json”,”Authorization”:”Bearer ${token}”}
Request Body : [{“username”:”${使用者名稱1}”,”password”:”${密碼}”},…,{“username”:”${使用者名稱2}”,”password”:”${密碼}”}]
Response 示例:
{
"action" : "post",
"application" : "4d7e4ba0-dc4a-11e3-90d5-e1ffbaacdaf5",
"params" : { },
"path" : "/users",
"uri" : "https://a1.easemob.com/easemob-demo/chatdemoui/users",
"entities" : [ entitie,entitie,entitie,entitie ],
"timestamp" : 1409570811312,
"duration" : 802,
"organization" : "easemob-demo",
"applicationName" : "chatdemoui"
}
{
"uuid" : "de86365a-31ca-11e4-aecf-9509b836c0d6",
"type" : "user",
"created" : 1409570811445,
"modified" : 1409570811445,
"username" : "u2",
"activated" : true
}entitie
獲取IM使用者[單個]
Path : /{org_name}/{app_name}/users/{username}
HTTP Method : GET
Request Headers : {“Authorization”:”Bearer ${token}”}
5.獲取IM使用者[批量]
該介面預設返回最近建立的10個使用者,如果需要指定獲取數量,需加上引數limit=N,N為數量值. 關於分頁:如果DB中的數量大於N,
返回json會攜帶一個欄位“cursor”,我們把它叫做”遊標”,該遊標可理解為結果集的指標,值是變化的。往下取資料的時候帶著遊標,
就可以獲取到下一頁的值。如果還有下一頁,返回值裡依然還有這個欄位,直到沒有這個欄位,說明已經到最後一頁。
cursor的意義在於資料(真)分頁。
Path : /{org_name}/{app_name}/users
HTTP Method : GET
//指定條數
URL Params : limit=20
//cursor:使用者開始索引
URL Params : limit=20&cursor=LTU2ODc0MzQzOnNmdTlxdF9LRWVPaVFvMWlBZmc4S3c
Request Headers : {“Authorization”:”Bearer ${token}”}
Response 示例:
{
"action" : "get",
"application" : "4d7e4ba0-dc4a-11e3-90d5-e1ffbaacdaf5",
"params" : {
"limit" : [ "20" ]
},
"path" : "/users",
"uri" : "https://a1.easemob.com/easemob-demo/chatdemoui/users?ql=select+*+from+null&limit=20",
"entities" : [ entitie,entitie,entitie,entitie ]
}
{
"uuid" : "fff15c10-df37-11e3-843f-e5b88d483c56",
"type" : "user",
"created" : 1400491736144,
"modified" : 1409055655016,
"username" : "wjglpgecxu",
"activated" : true,
"nickname" : "wjglpgecxu",
"notifier_name" : "chatdemoui_dev"
}entitie
6.刪除IM使用者[單個]
Path : /{org_name}/{app_name}/users/{username}
HTTP Method : DELETE
URL 引數 : 無
Request Headers : {“Authorization”:”Bearer ${token}”}
Request Body :無
Response 示例:
{
"action" : "delete",
"application" : "4d7e4ba0-dc4a-11e3-90d5-e1ffbaacdaf5",
"params" : { },
"path" : "/users",
"uri" : "https://a1.easemob.com/easemob-demo/chatdemoui/users",
"entities" : [ entitie,entitie,entitie,entitie ],
"timestamp" : 1409576121910,
"duration" : 3330,
"organization" : "easemob-demo",
"applicationName" : "chatdemoui"
}
{
"uuid" : "628a88ba-dfce-11e3-8cac-51d3cb69b303",
"type" : "user",
"created" : 1400556326075,
"modified" : 1400556326075,
"username" : "ywuxvxuir6",
"activated" : true
}entitie
7.刪除IM使用者[批量]
按時間段來刪除: 使用ql=created> {起始時間戳} and created < {結束時間戳} 的查詢語句, 時間戳是timestamp型別的, 並且需要對ql進行http url encode
DELETE /{org_name}/{app_name}/users?ql=created > 1409506121910 and created < 1409576121910
Path : /{org_name}/{app_name}/users
HTTP Method : DELETE
URL Params : limit=30
Request Headers : {“Authorization”:”Bearer ${token}”}
Response 示例:
{
"action" : "delete",
"application" : "4d7e4ba0-dc4a-11e3-90d5-e1ffbaacdaf5",
"params" : {
"limit" : [ "5" ]
},
"path" : "/users",
"uri" : "https://a1.easemob.com/easemob-demo/chatdemoui/users",
"entities" : []
}
8.重置IM使用者密碼
Path : /{org_name}/{app_name}/users/{username}/password
HTTP Method : PUT
URL Params : 無
Request Headers : {“Authorization”:”Bearer ${token}”}
Request Body : {“newpassword” : “${新密碼指定的字串}”}
Response 示例:
{
"action" : "set user password",
"timestamp" : 1409575962124,
"duration" : 326
}
9.修改使用者暱稱
Path : /{org_name}/{app_name}/users/{username}
HTTP Method : PUT
URL Params : 無
Request Headers : {“Authorization”:”Bearer ${token}”}
Request Body : {“nickname” : “${暱稱值}”}
Response 示例:
{
"action" : "put",
"application" : "4d7e4ba0-dc4a-11e3-90d5-e1ffbaacdaf5",
"path" : "/users",
"uri" : "https://a1.easemob.com/easemob-demo/chatdemoui/users",
"entities" : [ {
"uuid" : "c3b56d5a-7135-11e4-92d2-edab82ae2302",
"type" : "user",
"created" : 1416543645861,
"modified" : 1416550240537,
"username" : "jianguo",
"activated" : true,
"device_token" : "61491f49f3e69cd1d62c5b390e42f4b1cd15bf1a876a487268cfaef9960188ee",
"nickname" : "張建國"
} ],
"timestamp" : 1416550240285,
"duration" : 278,
"organization" : "easemob-demo",
"applicationName" : "chatdemoui"
}
*******************************************************好友管理*********************************************************
1.給IM使用者的新增好友
Path : /{org_name}/{app_name}/users/{owner_username}/contacts/users/{friend_username}
HTTP Method : POST
Request Headers : {“Authorization”:”Bearer ${token}”}
{
"action":"post","application":"4d7e4ba0-dc4a-11e3-90d5-e1ffbaacdaf5","params":{},
"path":"/users/aa6160da-eb01-11e3-ab09-15edd986e7b7/contacts",
"uri":"http://a1.easemob.com/easemob-demo/chatdemoui/users/jliu/contacts/yantao",
"entities":[ entitie ],
"timestamp":1406086326974,"duration":242,
"organization":"easemob-demo",
"applicationName":"chatdemoui"
}
2.檢視好友
Path : /{org_name}/{app_name}/users/{owner_username}/contacts/users
HTTP Method : GET
Request Headers : {“Authorization”:”Bearer ${token}”}
{
"action" : "get",
"application" : "4d7e4ba0-dc4a-11e3-90d5-e1ffbaacdaf5",
"params" : { },
"uri" : "https://a1.easemob.com/easemob-demo/chatdemoui/users/v3y0kf9arx/contacts/users",
"entities" : [ ],
"data" : [ "88888" ],
"timestamp" : 1409737366071,
"duration" : 45,
"organization" : "easemob-demo",
"applicationName" : "chatdemoui"
}
3.解除IM使用者的好友關係
Path : /{org_name}/{app_name}/users/{owner_username}/contacts/users/{friend_username}
HTTP Method : DELETE
URL Params : 無
Request Headers : {“Authorization”:”Bearer ${token}”}
Request Body : 無
{
"action" : "delete",
"application" : "4d7e4ba0-dc4a-11e3-90d5-e1ffbaacdaf5",
"params" : { },
"path" : "/users/stliu/contacts",
"uri" : "https://a1.easemob.com/easemob-demo/chatdemo/users/stliu/contacts/users/yantao",
"entities" : [ entitie ],
"timestamp" : 1409739808288,
"duration" : 1575,
"organization" : "easemob-demo",
"applicationName" : "chatdemoui"
}
***************************************************群組管理*********************************************************
1.獲取app中所有的群組ID
<pre name="code" class="java">Path : /{org_name}/{app_name}/chatgroups
HTTP Method : GET
Request Headers : {“Authorization”:”Bearer ${token}”}
2.獲取一個使用者參與的所有群組
Path : /{org_name}/{app_name}/users/{username}/joined_chatgroups
HTTP Method : GET
Request Headers : {“Authorization”:”Bearer ${token}”}
Response 示例:
{
...
"entities" : [ ],
"data" : [ {
"groupid" : "1413193977786197",
"groupname" : "kenshingrou"
}, {
"groupid" : "1413194058403881",
"groupname" : "kenshinngr1"
} ],
"timestamp" : 1413428676499,
"duration" : 80
}
3.獲取一個或者多個群組的詳情
Path : /{org_name}/{app_name}/chatgroups/{group_id1},{group_id2}
HTTP Method : GET
Request Headers : {“Authorization”:”Bearer ${token}”}
Response 示例:
{
...
"entities" : [ ],
"data" : [ {
"id" : "1408518613503",
"name" : "Jay13800138000",
"description" : "",
"public" : false,
"membersonly" : true,
"allowinvites" : false,
"maxusers" : 200,
"affiliations_count" : 3,
"affiliations" : [ {
"owner" : "13800138001"
}, {
"member" : "v3y0kf9arx"
}, {
"member" : "xc6xrnbzci"
} ]
} ],
...
}
4.獲取群組中的所有成員
Path : /{org_name}/{app_name}/chatgroups/{group_id}/users
HTTP Method : GET
Request Headers : {“Authorization”:”Bearer ${token}”}
Response 示例:
{
...
"entities" : [ ],
"data" : [ {
"member" : "lidis"
}, {
"member" : "asdfgh"
}, {
"owner" : "ruson"
} ],
"timestamp" : 1413012431449,
"duration" : 24
}
5.建立/刪除群
>>>建立
Path : /{org_name}/{app_name}/chatgroups
HTTP Method : POST
URL Params : 無
Request Headers : {“Authorization”:”Bearer ${token}”}
Request Body :
{
"groupname":"testrestgrp12", //群組名稱, 此屬性為必須的
"desc":"server create group", //群組描述, 此屬性為必須的
"public":true, //是否是公開群, 此屬性為必須的
"maxusers":300, //群組成員最大數(包括群主), 值為數值型別,預設值200,此屬性為可選的
"approval":true, //加入公開群是否需要批准, 沒有這個屬性的話預設是true, 此屬性為可選的
"owner":"jma1", //群組的管理員, 此屬性為必須的
"members":["jma2","jma3"] //群組成員,此屬性為可選的,但是如果加了此項,陣列元素至少一個
}
Response 示例:{
"action" : "post",
"application" : "4d7e4ba0-dc4a-11e3-90d5-e1ffbaacdaf5",
"params" : { },
"uri" : "https://a1.easemob.com/easemob-demo/chatdemoui",
"entities" : [ ],
"data" : {
"groupid" : "1411527886490154"
},
"timestamp" : 1411527886457,
"duration" : 125,
"organization" : "easemob-demo",
"applicationName" : "chatdemoui"
}
>>>刪除Path : /{org_name}/{app_name}/chatgroups/{group_id}
HTTP Method : DELETE
URL Params : 無
Request Headers : {“Authorization”:”Bearer ${token}”}
Request Body :無
Response 示例:
{
"action" : "delete",
"application" : "4d7e4ba0-dc4a-11e3-90d5-e1ffbaacdaf5",
"params" : { },
"uri" : "https://a1.easemob.com/easemob-demo/chatdemoui",
"entities" : [ ],
"data" : {
"success" : true,
"groupid" : "1411527886490154"
},
"timestamp" : 1411528112078,
"duration" : 15,
"organization" : "easemob-demo",
"applicationName" : "chatdemoui"
}
6.群組加/減人
>>新增單人
Path : /{org_name}/{app_name}/chatgroups/{group_id}/users/{user_primary_key}
HTTP Method : POST
URL Params : 無
Request Headers : {“Authorization”:”Bearer ${token}”}
Request Body :無
Response 示例:
{
...
"entities" : [ ],
"data" : {
"action" : "add_member",
"result" : true,
"groupid" : "1411816013089",
"user" : "q4xpsfjfvf"
},
...
}
>>群組批量新增成員
Path : /{org_name}/{app_name}/chatgroups/{chatgroupid}/users
HTTP Method : POST
URL Params : 無
Request Headers : {“Authorization”:”Bearer ${token}”}
Request Body :{“usernames”:[“username1”,”username2”]}’ — usernames固定屬性,
作為json的KEY;username1/username2 要新增到群中的成員使用者名稱,可變
>>刪除單人
Path : /{org_name}/{app_name}/chatgroups/{group_id}/users/{user_primary_key}
HTTP Method : DELETE
URL Params : 無
Request Headers : {“Authorization”:”Bearer ${token}”}
Request Body :無
Response 示例:
{
...
"entities" : [ ],
"data" : {
"action" : "remove_member",
"result" : true,
"groupid" : "1411816013089",
"user" : "q4xpsfjfvf"
},
...
"organization" : "easemob-demo",
"applicationName" : "chatdemoui"
}
***************************************************訊息管理*********************************************************
>>檢視使用者狀態
檢視一個使用者的線上狀態
Path : /{org_name}/{app_name}/users/{username}/status
HTTP Method : GET
URL Params : 無
Request Headers : {“Content-Type”:”application/json”,”Authorization”:”Bearer ${token}”}
Request Body : 無
{
...
"data": {
"stliu": "online" //注意, 這裡返回的是使用者名稱和線上狀態的鍵值對, 值為 online 或者 offline
},
...
}
>>傳送訊息
Path : /{org_name}/{app_name}/messages
Request Method : POST
Request Headers : {“Content-Type”:”application/json”,”Authorization”:”Bearer ${token}”}
Request Body :
{
"target_type" : "users", // users 給使用者發訊息, chatgroups 給群發訊息
"target" : ["u1", "u2", "u3"], // 注意這裡需要用陣列,陣列長度建議不大於20, 即使只有一個使用者,
// 也要用陣列 ['u1'], 給使用者傳送時陣列元素是使用者名稱,給群組傳送時
// 陣列元素是groupid
>>傳送文字
"msg" : {
"type" : "txt",
"msg" : "hello from rest" //訊息內容,(http://developer.easemob.com/docs/emchat/rest/chatmessage.html)裡的bodies內容
},
>>傳送圖片
"msg" : {
"type" : "img", // 訊息型別
"url": "https://a1.easemob.com/easemob-demo/chatdemoui/chatfiles/55f12940-64af-11e4-8a5b-ff2336f03252", //成功上傳檔案返回的uuid
"filename": "24849.jpg", // 指定一個檔名
"secret": "VfEpSmSvEeS7yU8dwa9rAQc-DIL2HhmpujTNfSTsrDt6eNb_" // 成功上傳檔案後返回的secret
},
>>傳送語音
"msg" : {
"type": "audio", // 訊息型別
"url": "https://a1.easemob.com/easemob-demo/chatdemoui/chatfiles/1dfc7f50-55c6-11e4-8a07-7d75b8fb3d42", //成功上傳檔案返回的uuid
"filename": "messages.amr", // 指定一個檔名
"length": 10,
"secret": "Hfx_WlXGEeSdDW-SuX2EaZcXDC7ZEig3OgKZye9IzKOwoCjM" // 成功上傳檔案後返回的secret
},
>>傳送視訊
"msg": { //訊息內容
"type": "video",// 訊息型別
"filename": "1418105136313.mp4",// 視訊檔名稱
"thumb": "http://a1.easemob.com/easemob-demo/chatdemoui/chatfiles/67279b20-7f69-11e4-8eee-21d3334b3a97",//成功上傳視訊縮圖返回的uuid
"length": 10,//視訊播放長度
"secret": "VfEpSmSvEeS7yU8dwa9rAQc-DIL2HhmpujTNfSTsrDt6eNb_",// 成功上傳視訊檔案後返回的secret
"file_length": 58103,//視訊檔案大小
"thumb_secret": "ZyebKn9pEeSSfY03ROk7ND24zUf74s7HpPN1oMV-1JxN2O2I",// 成功上傳視訊縮圖後返回的secret
"url": "http://a1.easemob.com/easemob-demo/chatdemoui/chatfiles/671dfe30-7f69-11e4-ba67-8fef0d502f46"//成功上傳視訊檔案返回的uuid
},
>>傳送透傳
"msg":{ //訊息內容
"type":"cmd", // 訊息型別
"action":"action1"
},
"from" : "jma2", //表示這個訊息是誰發出來的, 可以沒有這個屬性, 那麼就會顯示是admin, 如果有的話, 則會顯示是這個使用者發出的
"ext" : { //擴充套件屬性, 由app自己定義.可以沒有這個欄位,但是如果有,值不能是“ext:null“這種形式,否則出錯
"attr1" : "v1",
"attr2" : "v2"
}
}
Response 示例:
{
...
"data": {
"stliu1": "success",
"jma3": "success",
"stliu": "success",
"jma4": "success"
},
...
}
****************************************************T I P******************************************************
REST介面呼叫成功時返回HTTP狀態碼為200,返回資料結果為標準Json格式。
如呼叫錯誤會返回除200之外的其他HTTP狀態碼,返回資料結果也為標準Json格式,可根據返回資料中的error欄位判斷具體錯誤。
http狀態返回程式碼 4xx(請求錯誤)這些狀態程式碼表示請求可能出錯,妨礙了伺服器的處理。
http狀態返回程式碼 5xx(伺服器錯誤)這些狀態程式碼表示伺服器在嘗試處理請求時發生內部錯誤。
HTTP 返回碼(statuscode)說明(description)
400(錯誤請求) 伺服器不理解請求的語法。
401(未授權) 請求要求身份驗證。 對於需要token的介面,伺服器可能返回此響應。
403(禁止) 伺服器拒絕請求。
404(未找到) 伺服器找不到請求的介面。
408(請求超時) 伺服器等候請求時發生超時。
500(伺服器內部錯誤) 伺服器遇到錯誤,無法完成請求。
501(尚未實施) 伺服器不具備完成請求的功能。 例如,伺服器無法識別請求方法時可能會返回此程式碼。
502(錯誤閘道器) 伺服器作為閘道器或代理,從上游伺服器收到無效響應。
503(服務不可用) 伺服器目前無法使用(由於超載或停機維護)。 通常,這只是暫時狀態。
504(閘道器超時) 伺服器作為閘道器或代理,但是沒有及時從上游伺服器收到請求。
HTTP statuscodeerrorerror_description
400invalid_grantinvalid username or password
使用者名稱或者密碼輸入錯誤
400organization_application_not_found“Could not find application for easemob-demo/aachatdemoui from URI: easemob-demo/aachatdemoui/users”
找不到aachatdemoui對應的app, 可能是URL寫錯了
400illegal_argument“Entity user requires a property named username”
建立使用者請求體未提供”username”
400illegal_argument“password or pin must provided”
建立使用者請求體未提供”password”
400json_parse“Unexpected character (‘=’ (code 61)): was expecting a colon to separate field name and value\n at [Source: [email protected]; line: 1, column: 23]”
傳送請求時請求體不符合標準的JSON格式,伺服器無法正確解析
400illegal_argument“password or pin must provided”
註冊使用者時json中提供了password但是值未空字元
400duplicate_unique_property_exists“Application 4d7e4ba0-dc4a-11e3-90d5-e1ffbaacdaf5Entity user requires that property named username be unique, value of dddd exists”
使用者名稱已存在, dddd這個使用者名稱在該app下已經存在
400illegal_argument“newpassword is required”
修改使用者密碼的請求體沒提供newpassword屬性
400illegal_argument“group member username1 doesn’t exist”
批量新增群組時預加入群組的新成員username不存在
401unauthorized“registration is not open, please contact the app admin”
app的使用者註冊模式為授權註冊,但是註冊使用者時請求頭沒帶token
401auth_bad_access_token“Unable to authenticate due to corrupt access token”
傳送請求時使用的token錯誤, 注意:不是token過期
401auth_bad_access_token“Unable to authenticate”
無效token, 符合token的格式,但是該token不是接受請求的系統生成的,系統無法識別該token
401“Unable to authenticate due to expired access token”
token過期
404service_resource_not_found“Service resource not found”
URL指定的資源不存在
500no_full_text_index“Entity ‘user’ with property named ‘username’ is not full text indexed. You cannot use the ‘contains’ operand on this field”
username不支援全文索引,不可以對該欄位進行contains操作
500unsupported_service_operation“Service operation not supported”
請求方式不被髮送請求的URL支援
500web_application“javax.ws.rs.WebApplicationException”錯誤的請求,
給一個未提供的API傳送了
相關推薦
Android- 環信IM即時通訊_RESTAPI(2)
*****************************************************REST_API 簡介******************************************************* A)REST client:HTT
Android- 環信IM即時通訊(1)
********************************環境配置************************ 1.拷貝Demo包下的libs包下的baidumapapi_v2_1_1.jareasemobchat_2.1.3.jarlocSDK_3.3.jararmeabi資料夾 2.配置許可權
接入網易雲信IM即時通訊的微信小程式聊天室
出售微信小程式聊天室完整原始碼,也可定製開發微信小程式。掃碼加微信詳聊 微信小程式開發交流qq群 173683895 、 526474645 ; 接入流程: 初次接觸網易雲通訊IM服務,您可以通過以下產品介紹文件瞭解我們的產品
Netty 入門與實戰:仿寫微信 IM 即時通訊系統
作為一個學 Java 的,如果沒有研究過 Netty,那麼你對 Java 語言的使用和理解僅僅停
VUE專案整合環信WebIM即時通訊以及所遇到的問題
功能背景: 之前和朋友一起做了一個wbe專案整合環信的即時通訊的功能,做的時候感嘆web端文件太少,而且npm包有一些坑,記錄下來寫了這篇部落格,之後不斷有人加我微信問我,怎麼整合.現在我再來重寫一下這篇部落格. 環信web整合功能介紹: 首先:在web端環信是不提供介
Android-IM即時通訊:環信
參考: IM : 即時通訊系統(IM,Instant Messenger)。 Android第三方即時聊天SDK的有:網易雲信、環信和融雲等。 這裡以環信來做即時通訊demo達到兩個效果: 1、使用者登入, 2、使用者間即時通訊 環
IM即時通訊專案講解(一)--實現類似qq微信表情面板無縫切換
該系列技術課程來源慕課IM實戰 通過該課程可以學習到以下知識點 1、瞭解和開發後臺專案(這個是需要長期積累的,有了這個可以說入門沒問題) 2、學習到IM相關知識點,建立群、新增群、單聊、群聊 3、可以學習到資料庫的相關操作(建表、表之間的關聯等知識
IM即時通訊實現原理
客戶端使用 在線狀態 ddos 開發 mapping 在線網友 傳真 ddl 說明 即時通訊(Instant Messenger,簡稱IM)軟件多是基於TCP/IP和UDP進行通訊的,TCP/IP和UDP都是建立在更低層的IP協議上的兩種通訊傳輸協議。前 者是以數據流的形式
數字資產交易管理即時通訊平臺,區塊鏈IM即時通訊系統開發數字資產交易
區塊鏈 watermark 客戶 架構設計方法 這一 jpg src 比特 得到 從幣圈玩家的角度來看數字資產交易所的即時通訊問題,一直都存在著巨大的鴻溝。溝通難的問題一直沒有得到解決,之前對於客戶關系管理或者用戶與用戶之間都只是建立以論壇或者交易所聊天框的形式進行溝通。為
區塊鏈IM即時通訊系統APP開發多幣種錢包開發
一鍵分享 集合 培訓 動向 hang 數字 聊天 全球 不出 區塊鏈發展到現在,已經進入白熱化階段,許多地方都開設了區塊鏈相關課程與培訓機構,形成了業態中的社區化發展,從而也誕生了區塊鏈IM即時通訊系統【開發+微信號yzrhuhang】在圈子中盛行起來。為幣圈鏈圈社區的用戶
區塊鏈資產交易所搭建IM即時通訊系統開發
競爭 全球 演進 模式 結合 數字資產 傳統 搜索 早期 區塊鏈資產交易所搭建IM即時通訊系統開發 [本文由源中瑞塗先生編輯/交易所開發VX搜索:ruiec999]隨著數字資產交易市場的演進和機構投資者的參與,交易所領域創業面臨的合規、安全、專業、透明等問題也逐漸成為其新的
區塊鏈IM即時通訊系統app開發,直播軟件開發
即時通訊 金融 結合 研發 cto 交流 text blog 系統 區塊鏈IM即時通訊系統app開發,直播軟件開發 區塊鏈IM即時通訊系統是通過即時通訊技術來實現在線聊天、交流的系統軟件。而區塊鏈IM及時通訊系統則是一款集合了社交與錢包儲存等多功能的一套系統。 區塊鏈IM即
深圳區塊鏈交易系統開發,IM即時通訊app開發
屬性 所有 提高 區塊 一個 公有 即時通訊 控制 信任 深圳區塊鏈交易系統開發,IM即時通訊app開發 什麽是區塊鏈? 從技術上講,區塊鏈是區塊的鏈接,一個區塊是一組有序的交易。如果你不理解最後一句話,你可以把區塊鏈看作是一個擁有一些附加屬性的數據庫的一個子集。 我們要了
Openfire XMPP Smack RTC IM 即時通訊 聊天
ray 控制臺 cati 探測 ica strong ttext 包括 login Openfire XMPP Smack RTC IM 即時通訊 聊天 目錄 目錄簡介Openfire 簡介相關的幾個名詞SmackSparkJIDXMPPOpenfire 安裝配置測
基於Netty實現的Android 訊息推送(即時通訊)的解決方案
根據Netty框架實現訊息推送(即時聊天)功能. Netty框架,TCP長連線,心跳,阻塞訊息佇列,執行緒池處理訊息傳送, 基於Google ProtoBuf自定義的訊息協議, TCP粘包/拆包.... 客戶端通過TCP連線到伺服器,並建立TCP長連線;當伺服器端收到新訊息後通過TCP連線推送給
IM即時通訊社交軟體app開發,區塊鏈社交直播軟體開發
IM即時通訊社交軟體app開發,區塊鏈社交直播軟體開發 IM即時通訊設有數字資產錢包可進行實時發紅包、轉賬、直播、聊天、發圖、朋友圈、錄影、建群、點對點聊天、加好友、相簿、掃二維碼等等一些有趣的功能實時上線。社交直播軟體開發 Tel:前面 138中間2315後面3201 開發即時通訊APP能夠帶來什麼
IM即時通訊社交軟件app開發,區塊鏈社交直播軟件開發
消息 排行榜 發展 送禮 系統 文件 什麽 證券 接口 IM即時通訊社交軟件app開發,區塊鏈社交直播軟件開發 IM即時通訊設有數字資產錢包可進行實時發紅包、轉賬、直播、聊天、發圖、朋友圈、錄像、建群、點對點聊天、加好友、相冊、掃二維碼等等一些有趣的功能實時上線。社交直播軟
區塊鏈IM即時通訊社交軟體行業解決方案服務商
區塊鏈IM即時通訊社交軟體行業解決方案提供商在通過區塊鏈技術基礎上,打造幣圈的即時通訊系統,為幣圈的使用者玩家提供一個全球使用者聚集地,通過幣圈的隱祕即時通訊系統,可以暢聊幣圈資訊,分享全球幣圈的最新動態,一鍵分享世界各地幣圈使用者玩家,打造幣圈交易、分享、資訊、娛樂一體化區塊鏈社交即時通訊系統。高效能區塊鏈
IM即時通訊的一些理論知識準備
一、IM技術概念 IM技術全稱Instant Messaging,中文翻譯“即時通訊”,它是一種使人們能在網上識別線上使用者並與他們實時交換訊息的技術,是電子郵件發明以來迅速崛起的線上通訊方 式。 IM的出現和網際網路有著密不可分的關係,IM完全基於 TCP/IP網路協議族實現,而TCP/I
帶後臺的IM即時通訊App 全程MVP手把手打造
第1章 課程專案整體概述簡單介紹課程適應人群以及主要的實現方案和課程的分節說明;除此之外展示APP使用效果同時瞭解IM相關協議並對比現有的IM實現方案。當然現如今IM已經不是一個APP而是一個SDK,趨近於嵌入到任何APP中使用;這也是IM推送聊天技術的主要使用場景。...1-1 課程概述1-2 入門須知1-