辅助功能

SDK提供了一些额外的辅助功能

用户意见反馈

注意:如意见反馈中包含图片则需导入jar包android-async-http-1.4.9qiniu-android-sdk-7.0.9happy-dns-0.2.7httpclient-4.4.1.1到libs目录下

AbleCloud提供APP端的用户意见反馈接口。开发者可以开发用户提交意见的页面。用户意见反馈可以反馈的项由开发者自己定义。 使用意见反馈前,需要先在控制台设置反馈项参数 cloud_syn_1

代码示例:

//picture1、picture2为图片的二进制流
byte[] picture1;
byte[] picture2;

ACFeedback feedback = new ACFeedback();
feedback.addFeedback("description", "App体验良好,继续加油哦");                  
feedback.addFeedback("telephoneNumber", "13333333333");                             
feedback.addFeedbackPicture("pictures", picture1);    
feedback.addFeedbackPicture("pictures", picture2);          
AC.feedbackMgr().submitFeedback(feedback, new VoidCallback(){
    @Override
    public void success(){                                 
        //成功提交用户反馈信息
    }

    @Override
    public void error(ACException e) {
        //网络错误或其他,根据e.getErrorCode()做不同的提示或处理,此处一般为参数错误,请对照AbleCloud控制台填写的key与value类型
    }
});

获取室外天气

SDK可以获取到室外的pm2.5, AQI(空气质量)以及天气状况.

如获取最新pm25,代码如下:

AC.weatherMgr().getLatestPM25("北京", new PayloadCallback<ACPM25>() {
    @Override
    public void success(ACPM25 pm25) {
        //成功获取最新pm25信息
        LogUtil.d(TAG, pm25.toString());
    }

    @Override
    public void error(ACException e) {
        //通过e.toString()查看错误信息
    }
 });

排行榜

AbleCloud除了提供丰富的存储管理外,还提供了排行榜的功能需求,能够支持按照不同排行周期进行排行操作。

如下我们以记步排行为例,需求如下:

每天进行实时的记步排名,显示当前所有人的步数及排行(页面显示包含昵称与头像);除此之外,我们还要求进行周统计,以周为单位显示每天的运动步数及排行。

||SKIP||

新建排行榜

登录AbleCloud管理平台,选择存储管理–>排行榜–>新建排行榜,如下图所示:

sport_ranking

记步的统计周期一般都为每天,所以我们新建以天为统计周期的排行榜。时区我们以北京时间为例,选择东八区。

新建用户附加属性

登录AbleCloud管理平台,选择用户管理–>附加属性–>新建,如下图所示:

sport_ranking

由于我们需要显示所有用户的昵称、头像及排名名次,所以我们要新建用户附加属性,同时设置头像的访问权限为Public。(昵称为用户的基本属性,可以不用新建)

设置步行步数

当打开我们的app之后,我们从设备(手环)/手机获取到今天的步行步数,这时我们需要调用以下接口

//如我们获取到的当前步行步数为10000
double score = 10000;
//timestamp为0代表当前时间
AC.rankingMgr().set("Sports_step", 0, score, new VoidCallback(){
    public void success(){
        //步数设置成功
    }

    @Override
    public void error(ACException e) {
        //步数设置失败,通过e.toString()查看错误信息,并根据e.getErrorCode()错误码做不同处理。      
    }
});

获取所有用户的步数及排名

//timestamp为0代表当前时间,即今天实时的步数排名;startRank与endRank为1和-1,代表从第一名到最后一名;步数是越多排名越靠前,所以我们使用正序排名
AC.rankingMgr().scan("Sports_step", "day", 0, 1, -1, "ASC", new PayloadCallback<List<ACRankingValue>>() {
    public void success(List<ACRankingValue> values) {
        //values在云端已经进行排序处理,也就是说values.get(0).getPlace()为1
        for (ACRankingValue value : values) {
            //获取排名
            long place = value.getPlace();
            //获取当前步数
            double score = value.getScore();
            //获取该排名用户的附加属性
            ACObject profile = value.getProfile();
            //获取该排名用户的uid
            long uid = profile.get("uid");
            //获取该排名用户的昵称
            String nickName = profile.getString("nick_name");
            //检测该排名用户是否设置了头像,如设置了则获取头像url
            if (profile.contains("head_url")) {
                String headUrl = profile.getString("head_url");
            }
        }
    }

    @Override
    public void error(ACException e) {
        //获取所有人排名失败,通过e.toString()查看错误信息,并根据e.getErrorCode()错误码做不同处理。      
    }
});

获取当前用户最近一周每天的步数及排名

我们需要进行周统计(每周从周一开始),并画柱状图显示每天的步数及排名。如下为获取当周每天的步数及排名

//获取当前今天为星期几
int dayOfWeek = Calendar.getInstance().get(Calendar.DAY_OF_WEEK);
//dayOfWeek为1表示星期天,所以取最近7天的数据;dayOfWeek为2-7,即星期一到星期六,则取(dayOfWeek - 1)天的数据
int count = dayOfWeek == 1 ? 7 : dayOfWeek - 1;
//timestamp为0代表当前时间,向前取count天
AC.rankingMgr().ranks("Sports_step", "day", 0, count, "ASC", new PayloadCallback<List<ACRankingValue>>() {
    public void success(List<ACRankingValue> values) {
        for (ACRankingValue value : values) {
            //获取排名
            long place = value.getPlace();
            //获取当前步数
            double score = value.getScore();
            //时间,通过该字段转化为需要显示的时间,如下所示
            long timestamp = value.getTimestamp();
            String timeDisplay = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(timestamp);
        }
    }

    @Override
    public void error(ACException e) {
        //获取失败,通过e.toString()查看错误信息,并根据e.getErrorCode()错误码做不同处理。   
    }
});

据此,获取上周每天的步数及排名

int dayOfWeek = Calendar.getInstance().get(Calendar.DAY_OF_WEEK);
int count = dayOfWeek == 1 ? 7 : dayOfWeek - 1;
long timestamp = System.currentTimeMills()/1000 - count * 24 * 60 * 60;
AC.rankingMgr().ranks("Sports_step", "day", timestamp, 7, "ASC", new PayloadCallback<List<ACRankingValue>>() {
    public void success(List<ACRankingValue> values) {
        ...
    }

    @Override
    public void error(ACException e) {
        //获取失败,通过e.toString()查看错误信息,并根据e.getErrorCode()错误码做不同处理。    
    }
}