目录
【目标和效果】
hbuilderx+h5+unipush+.net framework+C#,实现H5封装成安卓app,给在线用户(cid)推送通知消息
【准备】
1、HBuilderX
2、UniPush
申请推送需要的appid等信息,DCloud与个推联合打造
AppSecret、MasterSecret、Legancy server key由个推保存,DCloud并不保存
所以,通过接口发起的通知推送和透传,实质上还是个推的接口地址
【HBuilderX】
无需安装,这点倒是不错,直接点击exe即可
2、创建项目
文件>新建项目>项目>5+app(这个根据自己选一个)
3、获取app客户端唯一标识
通过app客户端唯一标识-clientid-来推送信息和通知对应的客户端
- app客户端唯一标识值
- index.html代码如下
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<title>标题测试</title>
<script type="text/javascript">
document.addEventListener( "plusready", function(){
var pinf = plus.push.getClientInfo();
var cid = pinf.clientid;//客户端标识
var cid_div=document.getElementById('cid');
cid_div.innerHTML=cid;
</script>
</head>
<body>
<div>测试cid值</div>
<div id="cid"></div>
</body>
</html>
4、H5页面打包APP
发行>原生App-云打包
1)App id
- 方法一:直接进入dcloud开发者中心创建
方法二:HBuilderX开发工具基础配置里-重新获取,自动创建一个App id,开发者后台也会自动有一条记录
2)Android包名
自定义名称或域名+点(.)+刚刚申请的App id,比如:xxx.appid
5、SDK配置
推送 – 勾选 – uniPush(集成各家手机厂商系统推送及个推,是个推的升级版)
6、打包
直接赋值下载地址即可安装,安卓安装相对简单
【UniPush开通】
1、在开发者中心,我创建的应用列表
在列表选择对应的应用名称,如果没有开通,那么会跳转到下图提示开通,开通是免费的,根据信息进行填写
2、Android应用签名
Android包名在上面步骤已经知道如何取得,现在就是签名的获取
1)安装java的sdk
版本可能会随着时间不断更新,我这里最新的是14
2)管理员方式运行安装
3)cmd命令定位到安装所在目录
记得cmd要以管理员身份运行
cd C:\Program Files\Java\jdk-14.0.1\bin
4)口令密码,初始为123456
keytool -genkey -v -keystore debug.keystore -alias androiddebugkey -keyalg RSA -validity 10000
然后填写一些信息即可,最后就会在文件夹下生成一个文件估计就是保存一些填写的信息等
5)激动时刻来了,签名到手 – 获取SHA256
keytool -list -v -keystore debug.keystore
【C# 发起接口通知推送】
1、查看应用配置信息 – appid和key等api接口值
2、推送通知信息代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Google.ProtocolBuffers;
using com.gexin.rp.sdk.dto;
using com.igetui.api.openservice;
using com.igetui.api.openservice.igetui;
using com.igetui.api.openservice.igetui.template;
using System.Net;
namespace GetuiServerApiSDKDemo
{
public class demo
{
//采用"C# SDK 快速入门", "第二步 获取访问凭证 "中获得的应用配置,用户可自行替换
private static String APPID = "你的配置信息appid";
private static String APPKEY = "你的配置信息appkey";
private static String MASTERSECRET = "你的配置信息mastersecret";
//您获取的clientID
private static String CLIENTID = "app客户端的clientid";
//别名推送方式
//private static String ALIAS = "";
//HOST:OpenService接口地址
private static String HOST = "http://sdk.open.api.igexin.com/apiex.htm";
//static void Main(string[] args)
//{
// //toList接口每个用户状态返回是否开启,可选
// Console.OutputEncoding = Encoding.GetEncoding(936);
// Environment.SetEnvironmentVariable("needDetails", "true");
// PushMessageToSingle();
//}
public static void PushMessageToSingle(string title, string content)
{
IGtPush push = new IGtPush(HOST, APPKEY, MASTERSECRET);
//消息模版:TransmissionTemplate:透传模板
NotificationTemplate template = NotificationTemplateDemo(title,content); // TransmissionTemplateDemo();
// 单推消息模型
SingleMessage message = new SingleMessage();
message.IsOffline = true; // 用户当前不在线时,是否离线存储,可选
message.OfflineExpireTime = 1000 * 3600 * 12; // 离线有效时间,单位为毫秒,可选
message.Data = template;
//判断是否客户端是否wifi环境下推送,2为4G/3G/2G,1为在WIFI环境下,0为不限制环境
message.PushNetWorkType = 0;
com.igetui.api.openservice.igetui.Target target = new com.igetui.api.openservice.igetui.Target();
target.appId = APPID;
target.clientId = CLIENTID;
//target.alias = ALIAS;
try
{
String pushResult = push.pushMessageToSingle(message, target);
System.Console.WriteLine("-----------------------------------------------");
System.Console.WriteLine("-----------------------------------------------");
System.Console.WriteLine("----------------服务端返回结果:" + pushResult);
}
catch (RequestException e)
{
String requestId = e.RequestId;
//发送失败后的重发
String pushResult = push.pushMessageToSingle(message, target, requestId);
System.Console.WriteLine("-----------------------------------------------");
System.Console.WriteLine("-----------------------------------------------");
System.Console.WriteLine("----------------服务端返回结果:" + pushResult);
}
}
public static NotificationTemplate NotificationTemplateDemo(string title, string content)
{
NotificationTemplate template = new NotificationTemplate();
template.AppId = APPID;
template.AppKey = APPKEY;
//通知栏标题
template.Title = title;
//通知栏内容
template.Text = content;
//通知栏显示本地图片
template.Logo = "";
//通知栏显示网络图标
template.LogoURL = "";
//应用启动类型,1:强制应用启动 2:等待应用启动
template.TransmissionType = "1";
//透传内容
template.TransmissionContent = content;
//接收到消息是否响铃,true:响铃 false:不响铃
template.IsRing = true;
//接收到消息是否震动,true:震动 false:不震动
template.IsVibrate = true;
//接收到消息是否可清除,true:可清除 false:不可清除
template.IsClearable = true;
//设置客户端展示时间
//String begin = DateTime.Now.AddMinutes(-6).ToString("yyyy-MM-dd HH:mm:ss");
//String end = DateTime.Now.AddSeconds(10).ToString("yyyy-MM-dd HH:mm:ss");
//template.setDuration(begin, end);
return template;
}
}
}
【温馨提示】
1、设置应用的通知,默认可能是关闭装填
2、亮屏显示,需要手机设置开启
【总结】
这里的通知信息推送,存在的发送成功率的问题,如果想要达到通知的即时提示,那么这个是不能满足的,适合APP在运行状态接收通知信息,否则可能不会即时提示在锁屏和app不存进程情况下。离线通知推送这个又是另一个阶层了,适合充值玩家,这里适合了解和熟悉整个推送的过程。
【互动一刻】
相互学习,共同进步