云端代码的实践

优采云 发布时间: 2020-08-20 02:40

  云端代码的实践

  Bmob的云端代码 可以由手机发起恳求调用在云端你写好的方式(需要js来写),比如可以在手机端 用户注册成功的时侯,调用云端代码,把帐号密码作为参数调用,云端代码中可以得到参数,做希望做的操作,再把结果返回。

  官方的简单事例如下

  先看云端代码 在事例中云端领到手机端传入的参数 然后按照参数 返回结果 很简单

  1 function onRequest(request, response, modules) {

2 //获取SDK客户端上传的name参数

3 var name = request.body.name;

4 if(name == 'bmob')

5 response.end('欢迎使用Bmob');

6 else

7 response.end('输入错误,请重新输入');

8 }

  再瞧瞧android是如何调用的 要注意的是逻辑名 和 传入的参数 回调和bmob数据服务一样,都很简单

  //test对应你刚刚创建的云端逻辑名称

String cloudCodeName = "test";

JSONObject params = new JSONObject();

//name是上传到云端的参数名称,值是bmob,云端逻辑可以通过调用request.body.name获取这个值

params.put("name", "bmob");

//创建云端逻辑对象

AsyncCustomEndpoints cloudCode = new AsyncCustomEndpoints();

//异步调用云端逻辑

cloudCode.callEndpoint(MainActivity.this, cloudCodeName, params, new CloudCodeListener() {

//执行成功时调用,返回result对象

@Override

public void onSuccess(Object result) {

Log.i("bmob", "result = "+result.toString());

}

//执行失败时调用

@Override

public void onFailure(String err) {

Log.i("bmob", "BmobException = "+err);

}

});

  当然事例上面的这些功能可以说没有任何作用

  这里我刚好遇见一个不错的实践案例

  环信IM sdk 用户体系集成, 这块须要用到RESTAPI,我的思路是 在手机端 注册帐号 成功的同时,我发起云端代码恳求,让云端通过REST API去注册环信IM的帐号

  这里要讲一下环信帐号体系:它的用户名能是 我的用户表中primarykey 密码可以是一样的密码,当然可以做一下hash加密

  bmob用户注册成功时能得到用户对象,在成功的时侯把 需要的参数 带进 云端方式,如 用户名和密码 ,或者primarykey 和密码

  android端 代码就不写了

  通过环信的,了解到即使开发注册可以不需要token,但是更新用户信息还是要token

  所以我就先用云端方式恳求token 方式名就叫 getToken

   1 function onRequest(request, response, modules) {

2

3 var options = {

4 url:"https://a1.easemob.com/xxxxx/yyyyy/token",

5 headers:{

6 'Content-Type':'application/json'

7 },

8

9 body:JSON.stringify({"grant_type":"client_credentials","client_id":"YXA6GxnwsG5REeaEG_efUTmSlQ","client_secret":"YXA62p6WEWM8TRbmLQkCMxuzmQrLj3A"})

10 };

11

12 modules.oHttp.post(options,function(err,resp,body){

13 response.end(body);

14 });

15

16 }

  首先第4行 url的格式 其中的xxxxx 和yyyyy 在控制台的 应用标示(A*敏*感*词*ey) 里面能看到 A*敏*感*词*ey的格式是xxxxx#yyyyy

  第5行的Request Headers 就一个 没啥好说的

  第9行的 Request Body 一共3个网路恳求参数第一个grant_type :client_credentials 应该是固定的,后面的client_id,client_secret同样可以在控制台找到

  第12行就是发送post恳求了 最后response.end 返回结果 有效期近60天

   Response Body

{

"code": 200,

"msg":

{"access_token":"YWMtIwcQoHgfEeaBFQdWz-nlJwAAAVhOT3hk1ujuKlQwidZ7zUbRcMwrDSXdYK0","expires_in":5183999,"application":"1b19f0b0-6e51-11e6-841b-f79f51399295"}

}

  这些参数都是 我在云端写死了,当然可以用android端通过JSONObject带过来 云端再从request上面获取参数

  不过相比android端更改参数太麻烦(要重新打包安装),而云端代码直接编辑完才能生效,所以我认为没有特殊要求,在后台写死反倒好些

  拿到token以后,再来瞧瞧注册,分开放注册和授权注册,前者不需要token,后者须要

  这里演示授权注册

   1 function onRequest(request, response, modules) {

2

3 var username = request.body.username;

4 var password = request.body.password;

5 var token=request.body.token;

6

7 var options = {

8 url:"https://a1.easemob.com/xxxx/yyy/user",

9 headers:{

10 'Content-Type':'application/json',

11 'Authorization':'Bearer '+token

12 },

13

14 body:JSON.stringify({"username":username,"password":password})

15 };

16

17 modules.oHttp.post(options,function(err,resp,body){

18 response.end(body);

19 });

20

21 }

  3 4 5行都是 带入的参数,用户名密码还有token这种东西不可能写死

  第8行 url 后缀弄成了user

  第11行 由于是授权注册 要传入token,所以Request Headers多了一个 ,bearer其实是指 token类型

  第14行 注册必备 , 17 18返回结果

  贴个注册成功的返回

   Response Body

{

"code": 200,

"msg":

{

"action" : "post",

"application" : "1b19f0b0-6e51-11e6-841b-f79f51399295",

"path" : "/users",

"uri" : "https://a1.easemob.com/feizaojilao/demonim/users",

"entities" : [ {

"uuid" : "2cdf2680-781f-11e6-88b9-3576146210eb",

"type" : "user",

"created" : 1473598597352,

"modified" : 1473598597352,

"username" : "22222w22222232",

"activated" : true

} ],

"timestamp" : 1473598597360,

"duration" : 0,

"organization" : "xxxx",

"applicationName" : "yyyy"

}

}

  已经被注册过了的返回

   Response Body

{

"code": 200,

"msg":

{"error":"duplicate_unique_property_exists","timestamp":1473599067876,"duration":0,"exception":"org.apache.usergrid.persistence.exceptions.DuplicateUniquePropertyExistsException","error_description":"Application null Entity user requires that property named username be unique, value of 22222w22222232 exists"}

}

  我觉得这个云端代码十分强悍,手机端只要上传参数,让云端来操作,就能得到结果,极大的减少了手机的任务

  目前也没更多的场景能使用,以后遇到了,会更新

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线