通过NodeJs+JPush实现安卓的异地登陆

通过NodeJs+JPush实现安卓的异地登陆

因公司业务需要,需要实现一个异地登陆然后下线的功能,说的可能有点糊涂,可以先看下实现的效果图:
这里写图片描述

前期准备

废话就不多说,直接就上代码吧!

代码编写

利用npm安装JPush

  • 方法一
npm install jpush-sdk
  • 方法二
{
  "dependencies": {
    "jpush-sdk": "*"
  }
}
npm install

注: 如果发现下载慢的情况,可以利用代理

npm install 后加 --registry http://registry.cnpmjs.org info underscore

编写服务器推送代码

var JPush = require("../lib/JPush/JPush.js");
var client = JPush.buildClient(your appkey, your app master secret);
client.push().setPlatform(JPush.ALL)
    .setAudience(JPush.ALL)
    .setNotification('异地登陆', JPush.android('你的账号在异地登陆了,请重新登陆。时间: ' + new Date().toLocaleString(), null, 1, {type: 'kick'}))
    .send(function(err, res) {
        if (err) {
            console.log(err.message);
        } else {
            console.log('Sendno: ' + res.sendno);
            console.log('Msg_id: ' + res.msg_id);
        }
    });

由于我这里只用到了安卓端,所以Notification里我只设置了安卓端的,其它参数就不解释了,具体的参数详情可以查看官方Api文档

编写安卓端的代码

安卓端的代码可以直接在极光官网上下载demo然后继承到项目中去,这里只说几点特别注意的地方。

  • 最好在项目的Application中进行初始化
public class DemoApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        JPushInterface.setDebugMode(true);    // 设置开启日志,发布时请关闭日志
        JPushInterface.init(this);            // 初始化 JPush
    }
}
  • 最好在MainActivity的onResume()中添加如下代码:
   @Override
    protected void onResume() {
        super.onResume();
        isForeground = true;
        JPushInterface.resumePush(getApplicationContext());
    }
  • 在接收到消息要弹框时,最好要先判断一下应用是否在前端运行
 private void processPushMessage(Context context, Bundle bundle) {
        if (!MainActivity.isForeground) {// 不在前台的话,就不弹框
            return;
        }
        String extras = bundle.getString(JPushInterface.EXTRA_EXTRA);
        try {
            JSONObject jsonObject = new JSONObject(extras);
            if ("kick".equals(jsonObject.getString("type"))) {
                Intent pushIntent = new Intent(context, NotifyDialogActivity.class);
                pushIntent.putExtra("bundle", bundle);
                pushIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                context.startActivity(pushIntent);
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }
  • 注意包名在AndroidManifest要保持一致,否则可能会接收不到消息
  • 注意不仅包名和平台的包名一致AndroidManifest中的key也要和自己在平台上声明的key保持一致
    这里写图片描述
    这里写图片描述
  • 还有就是这里的弹框不是Dialog而是DialogActivity,详情可以查看我的项目源码
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值