云端代码的实践

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 用户体系集成, 这块需要用到REST API ,我的思路是  在手机端 注册账号 成功的同时,我发起云端代码请求,让云端通过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的格式   https://a1.easemob.com/xxxxx/yyyyy/token        其中的xxxxx 和yyyyy       在控制台的 应用标识(AppKey) 里面能看到   AppKey的格式是 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"}
  }

 

我认为这个云端代码非常强大,手机端只要上传参数,让云端来操作,就能得到结果,极大的减轻了手机的任务

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

 

转载于:https://www.cnblogs.com/demon9/p/5862768.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值