友盟官网注册的包名必须和客户端生成的包名一

其余分享多少个包你说微信语音口令红包的

集团须求做贰个劳务器端的推送作用,客商端首假使以移动端为主,混合式的app前端,在友盟官方网站看了下demo,有后台服务器端,前端首假设原生安卓,IOS还大概有windos.所以遵照自身实际技术,依据demo先弄了个原生安卓的前端和java的后台,调节和测量检验成功。首要测量检验2个职能:单点推送客户端,推送全部顾客端。
此番推行也蒙受了大多坑。大概步骤就是先在友盟官方网址报名账号,然后注册包名,之后会生成八个appkey,message secret,master secret.那3个参数必须和安卓的mainfast当中注册的值是同样的。友盟官方网站注册的包名必得和客商端生成的包名一致。

安装pm2

1.第一步:新建包名

 

必威手机官网 1

image.png

6.出于是付出服务器端调用友盟推送,所以必得设置服务器的ip地址,下图告诉你怎样查看本机的外网ip地址

 

必威手机官网 2

image.png

以上都是些设置,介绍一下音讯推送所选择的有个别场景
后台开启一个定期职责,比方每日晚上10点像全数客户发送推送新闻。单点发送能够依据独一的devicetoken发送新闻给客户,由此能够把这么些token和数据库中客户名张开绑定,根据客户名询问出token给钦定顾客发送就可以。

其余代码能够由此上面包车型大巴友盟推送java服务端代码以至友盟推送安卓顾客端代码查看,这里重要对其实行了打包,各位能够看下有何样越来越好的艺术封装,能够建议。

YoumengAndroidMain是主调用类

package youmeng;


import java.util.HashMap;
import java.util.Map;

import pushandroid.YoumengAndroidPush;

public class YoumengAndroidMain {
    public static void main(String[] args) {
        //1.广播,通过友盟推送给所有人发送信息
//      try {
//          YoumengAndroidMain yoMain = new YoumengAndroidMain();//这个在框架里可以直接用注入
//          Map mapAndroidAll = new HashMap<String, String>();
//          mapAndroidAll.put("appkey", "59e76d978f4a9d6888000113");  
//          mapAndroidAll.put("mastersecret", "6darv0eftbwqgzfprg40muvyzfpjrhpe");   
//          mapAndroidAll.put("ticker", "2017年10月19日ticker");
//          mapAndroidAll.put("title", "2017年10月19日title");
//          mapAndroidAll.put("text", "2017年10月19日text");
//          Map map = new HashMap<String, String>();
//          map.put("extrafieldkey", "key");
//          map.put("extrafieldvalue", "value");
//          mapAndroidAll.put("extrafield", map);
//          yoMain.sendYoumengAndroidAll(mapAndroidAll);
//      } catch (Exception e) {
//          System.out.println("发送失败");
//      }

        //2.通过友盟给指定用户推送
        try {
            YoumengAndroidMain yoMain = new YoumengAndroidMain();//这个在框架里可以直接用注入
            Map mapAndroidAll = new HashMap<String, String>();
            mapAndroidAll.put("appkey", "59e76d978f4a9d6888000113");  
            mapAndroidAll.put("mastersecret", "6darv0eftbwqgzfprg40muvyzfpjrhpe");   
            mapAndroidAll.put("devicetoken", "Am5T2vzQBapWZ1bBfdNKKk6-PTBcV2gZPPX8i5V4r9dO");
            mapAndroidAll.put("ticker", "2017年10月19日ticker");
            mapAndroidAll.put("title", "2017年10月19日title");
            mapAndroidAll.put("text", "2017年10月19日text");
            Map map = new HashMap<String, String>();
            map.put("extrafieldkey", "key");
            map.put("extrafieldvalue", "value");
            mapAndroidAll.put("extrafield", map);
            yoMain.sendYoumengAndroidUnicast(mapAndroidAll);
        } catch (Exception e) {
            System.out.println("发送失败");
        }
    }


    /**
     * 广播,通过友盟给所有人发送信息,在定时任务中定时执行全员发送
     * appkey,mastersecret是必传字段,ticker,title,text,extrafieldkey,extrafieldvalue是选填字段
     */
    public void sendYoumengAndroidAll(Map model) throws Exception{
        YoumengAndroidPush youMain = new YoumengAndroidPush();//到框架里的时候用@Component放到工厂里,用Autoriwed注入
        youMain.sendAndroidBroadcast(model);
    }

    /**
     * 通过友盟发送给指定用户,这个根据devicetoken给指定的app发送消息,这个devicetoken在给用户注册的时候可以记录下来,存到数据库
     * 这个token可以跟用户名进行绑定,根据用户名去查找token,这样就可以给指定用户发送消息了
     */
    public void sendYoumengAndroidUnicast(Map model) throws Exception{
        YoumengAndroidPush youmengPush = new YoumengAndroidPush();
        youmengPush.sendAndroidUnicast(model);
    }

}

YoumengAndroidPush.java主要透过httpclient将参数封装传到友盟进行推送。

package pushandroid;

import java.util.Map;

import pushandroid.android.AndroidBroadcast;
import pushandroid.android.AndroidUnicast;

public class YoumengAndroidPush {
    private String timestamp = null;
    private PushClient client = new PushClient();
    /**
     * 像所有的用户推送消息
     * appkey和mastersecret为必填项,ticker,title,text,extrafield为选填
     * 群发
     */
    public void sendAndroidBroadcast(Map model) throws Exception {
        if(null == model)
            return;
        if(null == model.get("appkey") || null == model.get("mastersecret"))
            return;
        String appkey = (String) model.get("appkey");
        String masterSecret = (String) model.get("mastersecret");
        AndroidBroadcast broadcast = new AndroidBroadcast(appkey,masterSecret);
        String ticker = (String) (model.get("ticker") == null?"测试":model.get("ticker"));
        String title = (String) (model.get("title")==null?"测试":model.get("title"));
        String text = (String) (model.get("text")==null?"测试,您好":model.get("text"));
        broadcast.setTicker(ticker);
        broadcast.setTitle(title);
        broadcast.setText(text);
        broadcast.goAppAfterOpen();
        broadcast.setDisplayType(AndroidNotification.DisplayType.NOTIFICATION);
        broadcast.setProductionMode();
        if(null != model.get("extrafield")){
            Map map = (Map) model.get("extrafield");
            String extrafieldkey = (String) (map.get("extrafieldkey")==null?"":map.get("extrafieldkey"));
            String extrafieldvalue = (String) (map.get("extrafieldvalue")==null?"":map.get("extrafieldvalue"));
            broadcast.setExtraField(extrafieldkey, extrafieldvalue);
        }
        client.send(broadcast);
    }

    /**
     * 单点发送,通过友盟推送给指定用户,这个token可以跟用户名进行绑定,根据用户名去查找token,这样就可以给指定用户发送消息了
     * appkey,mastersecret,devicetoken是必传字段,ticker,title,text,extrafieldkey,extrafieldvalue是选填字段
     */
    public void sendAndroidUnicast(Map model) throws Exception {
        if(null == model)
            return;
        if(null == model.get("appkey") || null == model.get("mastersecret") || null==model.get("devicetoken"))
            return;
        String appkey = (String) model.get("appkey");
        String masterSecret = (String) model.get("mastersecret");
        AndroidUnicast unicast = new AndroidUnicast(appkey,masterSecret);
        String ticker = (String) (model.get("ticker") == null?"测试":model.get("ticker"));
        String title = (String) (model.get("title")==null?"测试":model.get("title"));
        String text = (String) (model.get("text")==null?"测试,您好":model.get("text"));
        String devicetoken = (String) model.get("devicetoken");//上面已经判断过空的情况
        unicast.setDeviceToken( devicetoken);
        unicast.setTicker(ticker);
        unicast.setTitle(title);
        unicast.setText(text);
        unicast.goAppAfterOpen();
        unicast.setDisplayType(AndroidNotification.DisplayType.NOTIFICATION);
        unicast.setProductionMode();
        if(null != model.get("extrafield")){
            Map map = (Map) model.get("extrafield");
            String extrafieldkey = (String) (map.get("extrafieldkey")==null?"test":map.get("extrafieldkey"));
            String extrafieldvalue = (String) (map.get("extrafieldvalue")==null?"helloworld":map.get("extrafieldvalue"));
            unicast.setExtraField(extrafieldkey, extrafieldvalue);
        }
        client.send(unicast);
    }
    public static void main(String[] args) {
    }



}

友盟推送java服务端代码

友盟推送安卓客商端代码

 

初稿链接:

 

体贴入微自己的大伙儿号,都以满满的干货!

 

 

必威手机官网 3

孙坚.gif

必威手机官网 41.png

3.第三步:在安卓的mainfast的配置文件中的key乃至message_secret必需和网页中变化的等同

 

必威手机官网 5

image.png

公布的图书

必威手机官网 6image必威手机官网 7image必威手机官网 8image.png必威手机官网 9image.png

接下来继续找难题,后来意识是master secret和message secret写反了,改过来之后OK了

 

必威手机官网 10

image.png

//连接websocketwx.connectSocket({ url: 'wss://liudongtushuguan.cn/socket?sessionId=' + session.sessionId,});wx.onSocketOpen(function;wx.onSocketClose(function{ console.log('websocket closed');});wx.onSocketMessage(function{ //收到消息的回调 let msg = JSON.parse; let msgs = that.data.borrowMessage; msgs.unshift; that.setData({ borrowMessage: msgs});});

//发送socket消息 let data = JSON.stringify({ targetId: bookData.ownerId, nickName: APP.globalData.userInfo.nickName, bookName: bookData.title, time: new Date().toLocaleString(), bookId: bookId, wxNum: wxNum, phoneNum: phoneNum, msg: msg, }); wx.sendSocketMessage({ data: data, });

小程序预览

4.第四步:步入音信管理后台,加多测量检验设施

 

必威手机官网 11

image.png

 

必威手机官网 12

image.png

 

必威手机官网 13

image.png

  • Express框架实现http服务

【须求的能够留言或私信~】

2.次之步:包名新建完后记录下appkey,message secret,master secret

 

必威手机官网 14

image.png

必威手机官网 15image

下载地址

5.第五步:设置推送音讯

 

必威手机官网 16

image.png

 

必威手机官网 17

image.png

Response Code : 400
{"ret":"FAIL","data":{"error_code":"2027"}}
Failed to send the notification!
2027是签订公约退步,小编觉着要求在安卓app打包的时候须求用
于是自身举行签订公约打包,可是依旧无意义

 

必威手机官网 18

image.png

 

必威手机官网 19

image.png

横流体育场面是三个图书漂流和借阅工具,意在分享闲置图书,并链接野趣相投的小友人。

业余采摘的另外电商号小程序的源码

  • 代码目录
  • 客商登陆
  • 货品列表展示
  • 商品消息展现
  • 购物车
  • 下单
  • 微信支付
  • 小程序推送
  • 订单管理
  • 地点管理
  • 客户举报、商铺介绍等

微信小程序中种种页面会有八个文本 .js .json .wxml .wxssjs文件中是页面的逻辑,json文件是页面的有个别安顿,wxml是小程序的页面结构,wxss为页面包车型客车体裁。

享用叁个学学项目:商店小程序项目源码,包含客商端和劳务器端代码以至数据库。开辟情况顾客端:微信开辟者工具服务器端:Nginx、PHP、Mysql5.5效应介绍

  • mongoose操作数据库
  • websocket模块
  • 代码结构

必威手机官网 20image.png

const https = require;const queryString = require('querystring');const sessions = require('./session');module.exports = (req, res, next) => { let code = req.query.code; let otherRes = res; DATA.js_code = code; OPTION.path = PATH + queryString.stringify; let wxReq = https.request(OPTION,  => { if(res.statusCode == 200){ let json = ''; res.on('data' ,  => { json+=data; }); res.on('end' , () => { json =JSON.parse; let openId = json.openid; sessions[openId] = openId; otherRes.type('application/json'); otherRes.json({ data : {'sessionId' : openId}, }); otherRes.status; } }); wxReq.end();};

原稿地址

const WebSocket = require; //使用ws模块const queryString = require('querystring');const URL = require;const sessions = require('./session');module.exports = (httpServer) => { const wss = new WebSocket.Server({server : httpServer}); wss.on('connection', => { let sessionId = queryString.parse(URL.parse.query).sessionId; ws.id = sessionId; ws.on('message' ,  => { let msgObj = JSON.parse; if(sessions[msgObj.targetId]){ wss.clients.forEach => { if(client.id === msgObj.targetId){ let data = { time : msgObj.time, borrower :msgObj.nickName, book :msgObj.bookName, borrowerId : sessions[sessionId], bookId : msgObj.bookId, wxNum : msgObj.wxNum, phoneNum : msgObj.phoneNum, msg : msgObj.msg }; client.send(JSON.stringify; } }); } }); });};

本文由必威发布于必威-编程,转载请注明出处:友盟官网注册的包名必须和客户端生成的包名一

相关阅读