一、DCLOUD开发者平台uni app开通uni push厂商推送配置

DCLOUD开发者平台开发者中心网址:DCLOUD开发者平台开发者中心

1、Uni Push1.0(老版本)

(1)Uni Push控制台菜单列表

Uni Push控制台需要对应用信息、厂商推送(离线推送)设置进行配置。如只需app在使用的过程中进行推送的话只需将应用信息进行配置即可,如果需要离线推送的正常使用,那我们需要将厂商推送进行配置。消息推送,可对app应用进行消息推送测试。

(2)应用信息配置:

如下图所示将应用信息进行配置,如果应用只支持Android平台无需选择ios进行配置。

(3)消息推送

官方对Uni Push的解释就是,Uni App集成了个推平台,项目开发文档就是服务端开发文档也就是个推官方开发文档:RestAPI V2
注意:
1. uniPush推送功能需提交云端打包后才能生效,如需真机调试请使用 自定义基座。 详情参考:UniPush使用指南
2. 如果下方页面内容不显示或提示登录超时,请刷新页面重试。
3. 在使用推送过程中如果遇到任何问题,可以通过“配置管理”-“故障排查”中的联系方式获取帮助。
4. 每个账号有开通 uniPush 应用个数的限制,请合理安排使用。如需提升限额,需先完成企业认证(仅支持面向企业用户提升额度),然后发邮件到 service@dcloud.io 申请。发送提额邮件时,需说明dev.dcloud.net.cn的登录账号,同时需解释公司主营业务,以及为何需要更多的uniPush额度。正常情况下,3个工作日内审核完毕。
5. 常见问题:UniPush常见问题
控制台界面如下图,用于测试、推送数据查看或是在控制台进行消息推送:

(4)厂商推送设置

厂商应用开通指南:

华为

1. 创建华为应用

  • 参见华为官方文档 配置AppGallery Connect ,完成文档中的内容配置。登录 AppGallery Connect 网站,选择我的项目。打开刚才创建的项目,查看应用信息中相应的华为 AppID、华为 SecretKey。该信息在之后步骤中将会使用,如下图:

  • 在 “项目设置 > 增长” 中选择“推送服务”,点击“立即开通”,以此来开启华为侧推送服务状态。

image.png

  • 在 “项目设置 > 常规” 中填写“ SHA256证书指纹 ”,点击右侧对勾进行保存;若不知道具体值,请参考 SHA256指纹证书获取 。

  • 在 “项目设置 > 推送服务> 配置”中开通项目回执状态,配置个推侧的回调地址以及HTTPS证书。如下

  • 回执名称可自定义

https://thirdrcp-hz.getui.com/hw
-----BEGIN CERTIFICATE-----
MIIGqTCCBZGgAwIBAgIQAVdiWJ3ORoF7fDA5qyolZTANBgkqhkiG9w0BAQsFADBf
MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
d3cuZGlnaWNlcnQuY29tMR4wHAYDVQQDExVHZW9UcnVzdCBDTiBSU0EgQ0EgRzEw
HhcNMjIwNTE2MDAwMDAwWhcNMjMwNjE2MjM1OTU5WjB0MQswCQYDVQQGEwJDTjES
MBAGA1UECAwJ5rWZ5rGf55yBMRIwEAYDVQQHDAnmna3lt57luIIxJzAlBgNVBAoM
Huavj+aXpeS6kuWKqOiCoeS7veaciemZkOWFrOWPuDEUMBIGA1UEAwwLKi5nZXR1
aS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDAOvUwMLw5roP+
vQzEqdVfFQDg5viSUnevk31GhS7UkwNVKPJkdwBvuetOuki5NfJR9GxQAq0fk0Qq
15VHHnLYdgY/VSBSuFJZ8DbKD+/3LqVp6WW7HEEgPWbto04bgB2KOqkt/ws3bmso
NZsdHHAYb2pbOTO7ZW4VpZaiIppGeLvcFNcP1QwqpARiOGOUxz3q4OFSh8QWapV9
Y15LBrTdMid4Dzd+UNRqZJYWX0KdmD5VNK3obo+Wq2Rj0ktV1skPWWINo+ecvJDq
O82+6m8zF+G1nmz7ofVCGm261wXdAaFWS7gdh8MRuSFSVW0O+edXTx4Ez2mNMzQp
65PjJAxfAgMBAAGjggNKMIIDRjAfBgNVHSMEGDAWgBSRn14xFa4Qn61gwffBzKpI
NC8MJjAdBgNVHQ4EFgQUpYw0JXac0ld0vX8gP1le02rlQUAwIQYDVR0RBBowGIIL
Ki5nZXR1aS5jb22CCWdldHVpLmNvbTAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYw
FAYIKwYBBQUHAwEGCCsGAQUFBwMCMHUGA1UdHwRuMGwwNKAyoDCGLmh0dHA6Ly9j
cmwzLmRpZ2ljZXJ0LmNvbS9HZW9UcnVzdENOUlNBQ0FHMS5jcmwwNKAyoDCGLmh0
dHA6Ly9jcmw0LmRpZ2ljZXJ0LmNvbS9HZW9UcnVzdENOUlNBQ0FHMS5jcmwwPgYD
VR0gBDcwNTAzBgZngQwBAgIwKTAnBggrBgEFBQcCARYbaHR0cDovL3d3dy5kaWdp
Y2VydC5jb20vQ1BTMG8GCCsGAQUFBwEBBGMwYTAhBggrBgEFBQcwAYYVaHR0cDov
L29jc3AuZGNvY3NwLmNuMDwGCCsGAQUFBzAChjBodHRwOi8vY3JsLmRpZ2ljZXJ0
LWNuLmNvbS9HZW9UcnVzdENOUlNBQ0FHMS5jcnQwCQYDVR0TBAIwADCCAX0GCisG
AQQB1nkCBAIEggFtBIIBaQFnAHUA6D7Q2j71BjUy51covIlryQPTy9ERa+zraeF3
fW0GvW4AAAGAyt5DUAAABAMARjBEAiAsp7cSQHGTO8EF09x7mKga8eWF0UYq0JZ2
xQR4ubI87AIgK+zsAzAF7tFQ29fQGm/87wYEE8y1g5lhWqO+5vLUpg8AdwA1zxkb
v7FsV78PrUxtQsu7ticgJlHqP+Eq76gDwzvWTAAAAYDK3kOMAAAEAwBIMEYCIQDe
fomYJt4a0uSt2CE6pA1LePKCCobkCWbBriHSFgNPEwIhAPlyCWEPFkZ0sIV7rAEg
oZHuV77Xe58cSUIGm80UxS5sAHUAtz77JN+cTbp18jnFulj0bF38Qs96nzXEnh0J
gSXttJkAAAGAyt5DhwAABAMARjBEAiA+FlDj9Gmb8zbK+wHFlqkzjKLFqeSOH80F
Ndv/tgemaAIgFiGUdq3HTxNsdstCfBpK8UCN8ChNeI2O2msCHK8lU70wDQYJKoZI
hvcNAQELBQADggEBAHtbJKGJOfgJzvSfyvzPKcbYymhjIerPVX+HBAEqb2SX9f9M
qhvo89xsZTiT2dMSDLCvdEO2E5QWJZoTKmL3uY9BO6/4reoYvd8sGTjNU/spjZUR
hv1+79Xz9DTFtCYziBnPOv72t4iklZjpato1vJLHQ62f9BgQlYplMiZ1KZkmP5XA
my34lax7fg0SSz2GCmjKoNGkoCpvAl+TmJ+8IS0z6N/szZrmioDZT5Jp/lJ2U1fk
so3vAz19idF8P95yy2jRGg2IA8WdMnfxp8rv6HszdBoaKiMlSAYXU3mktRhedEz4
MUvq13jQmXo+vsN0eggEeUiFFHBHjlXs1g+b8bQ=
-----END CERTIFICATE-----
  • 点击“提交”,提示“成功”则表示配置成功

2. 应用配置

  • 在个推开发者中心中填写相关厂商信息:

小米

1. 创建小米应用

  • 登录 小米开放平台 申请开发者帐号:

  • 进入管理控制台->消息推送:

  • 选择创建手机/平板应用:

  • 填写应用名称和应用包名创建应用

  • 勾选我同意接受小米推送的接入合作协议复选框,点击启用按钮:

  • 查看应用信息,获取小米 AppID、小米 AppKey、小米 AppSecret:

2. 应用配置

  • 在个推开发者中心中填写相关厂商信息:

OPPO

1. 创建 OPPO 应用

  • 登录 OPPO 推送平台 登录/注册帐号:

  • 选择创建应用:

  • 填写应用名称和应用包名以及上传应用图标创建应用

  • 查看应用信息,获取 OPPO App ID、OPPO App Key、OPPO App Secret、OPPO Master Secret

2. 应用配置

  • 在个推开发者中心中填写相关厂商信息:

VIVO

1. 创建 VIVO 应用

  1. 首先,先创建 VIVO 应用,见 Vivo 推送平台开启指南。
  2. 查看应用信息,获取 VIVO APP ID、VIVO APP keyy、VIVO APP secret

2. 应用配置

  • 在个推开发者中心中填写相关厂商信息:

魅族

1. 创建魅族应用

  • 登录 魅族开放平台 申请开发者帐号:

  • 登录 魅族推送平台 ,选择新建应用:

  • 填写应用名称和应用包名,上传应用图标后创建应用:

  • 打开新创建的应用:

  • 在配置管理中查看相应的魅族 AppID、魅族 AppKey、魅族 AppSecret:

2. 应用配置

  • 在个推开发者中心中填写相关厂商信息:

UPS

UPS即统一推送服务。个推与手机厂商合作,帮助建设系统消息推送通道。目前支持的厂商有坚果、海信和索尼。

1. 创建 UPS 应用

应用创建后,在推送页面-配置管理-应用配置-Android多厂商配置-UPS,选择需要开通的UPS厂商,如下:

2. 应用配置

  • UPS开通后无需再手动配置参数,效果如下:

FCM

1.简介

消息推送支持集成 Firebase 云信息传递(Firebase Cloud Messaging,简称 FCM)通道,以满足 App 在海外安卓设备上的使用推送的需求,该服务由 Google 拥有的 Firebase 公司提供。若app需要上架海外应用市场,建议您使用 Google Play专版 客户端 SDK 。

2.创建FCM应用

进入 Firebase官网 创建项目,获取 google-services.json 文件及 Server key 。
1,登录 google 账号,如果没有账号请先注册

2,登录后点击右上角的“Go to console”

3,打开项目列表页面,点击 “Add project” 创建项目

4,输入项目名称(根据自己应用取名),点击 “Continue”

5,确认是否需要使用 Google Analytics 服务(根据自己需要开启或关闭),点击 “Continue”

6,确认后创建项目,点击 “Continue”

进入项目详情页面,点击 “Android” 图标添加 Android 应用

7,输入 Android 应用信息(包名、昵称、证书SHA-1),点击 “Register App”

8,注册 Android 应用后下载配置文件 “google-services.json”,保存 google-services.json 文件后面需要使用
点击 “Next” 继续

9,此步骤中的操作云端打包机已经处理,忽略提示信息,继续点击“Next”,进入下一步
完成注册 Android 应用,点击 “Continue to console” 回到项目详情页面

10,点击 “Project settings” ,进入项目设置页面

11,切换到 “Cloud Messaging” 项,获取 “Server key”

3.应用配置

  • 在个推开发者中心中填写相关厂商信息:

二、Java项目服务端集成Uni Push

1、服务端 SDK

SDK介绍

个推SDK的主要目标是提升开发者在服务端集成个推推送服务的开发效率。 开发者不需要进行复杂编程即可使用个推推送服务的各项常用功能,SDK可以自动帮您满足调用过程中所需的鉴权、组装参数、发送HTTP请求等非功能性要求。

获取SDK

开发语言 资源下载 其他
Java Maven 项目依赖

GitHub 项目主页 | 适用于 JDK 1.6 及其以上版本 |
| PHP | Composer 项目依赖

GitHub 项目主页 | 适用于 PHP 5.5 及其以上版本 |

2.Pom文件引入依赖

<dependency><groupId>com.getui.push</groupId><artifactId>restful-sdk</artifactId><version>1.0.0.4</version>
</dependency>

3.集成Uni Push Java代码实现

/**** @author zhoukeu* @since 2021-12-20*/
@RestController
@RequestMapping("/sys-message")
public class SysMessageController {@Autowiredprivate SysMessageService sysMessageService;/*** 消息推送服务端接口,测试用*/@NoAuthentication@RequestMapping(value = "/pushMess", method = RequestMethod.GET)public void forwardNews(){sysMessageService.forwardNews();}
}
/**** @author zhoukeu* @since 2021-12-20*/
public interface SysMessageService extends IService<SysMessage> {void forwardNews();
}
/**** @author zhoukeu* @since 2021-12-20*/
@Slf4j
@Service
public class SysMessageServiceImpl extends ServiceBaseImpl<SysMessageMapper, SysMessage> implements SysMessageService {@Resourceprivate GeTuiUtils geTuiUtils;@Autowiredprivate SysMessageMapper sysMessageMapper;/*** 集成个推推送消息*/@Override@Scheduled(cron = "0 0/2 * * * ?")public void forwardNews(){List<Map<String, Object>> maps = sysMessageMapper.selectMessages();if (maps.size() > 0) {maps.forEach(map -> {log.info("正在推送:{}", map);// System.out.println(map);// 获取推送信息String cid = (String) map.get("F_ClientID");String title = (String) map.get("F_Title");String content = (String) map.get("F_Summary");String linkUrl = (String) map.get("F_LinkUrl");// type = 1 消息推送String type = GeTuiUtils.MESSAGE_PUSH;ApiResult<Map<String, Map<String, String>>> mapApiResult = geTuiUtils.pushToSingleByCid(cid, title, content, linkUrl, type);// 修改推送消息表map.put("F_IsPush", 1);SysMessage sysMessage = null;try {sysMessage = this.mapToEntity(map, SysMessage.class, Other);} catch (IllegalAccessException | InstantiationException e) {e.printStackTrace();}// 判断消息是否推送成功打印日志更新数据库状态if (mapApiResult.isSuccess()) {sysMessageMapper.updateById(sysMessage);log.info("成功推送至:{}", map.get("F_FullName"));} else {log.error("无法推送消息至:{},请检查后重试", map.get("F_FullName"));}});} else {log.info("没有消息需要推送");}}
}
/**** @author zhoukeu* @since 2021-12-20*/
@Mapper
public interface SysMessageMapper extends MapperBase<SysMessage> {@Select("SELECT\n" +"\tm.F_MessageID,\n" +"\tm.F_Title,\n" +"\tm.F_Summary,\n" +"\tm.F_LinkUrl,\n" +"\tm.F_IsPush,\n" +"\tm.F_Status,\n" +"\tu.F_ClientID,\n" +"\tu.F_FullName \n" +"FROM\n" +"\tT_Sys_Message m\n" +"\tLEFT JOIN T_Sys_User u ON m.F_RecieverUserID= u.F_UserID \n" +"WHERE\n" +"\tm.F_IsPush= 0 \n" +"\tAND m.F_Status = 0\n" +"\tAND m.F_IsDeleted= 0 \n" +"\tAND u.F_ClientID IS NOT NULL\n" +"\tAND u.F_IsDeleted = 0\n" +"\tAND u.F_AccountState = 1\n" +"\tAND u.F_LockState != 3\n" +"\tAND u.F_UserState = 1")List<Map<String, Object>> selectMessages();
}
@Slf4j
@Component
public class GeTuiUtils {// 消息推送public static final String MESSAGE_PUSH = "1";// 离线推送public static final String OFFLINE_PUSH = "2";@Resource(name = "myApiHelper")private ApiHelper myApiHelper;/*** 消息推送(离线推送)单cid推送**/public ApiResult<Map<String, Map<String, String>>> pushToSingleByCid(String cid, String title, String content, String linkUrl, String type) {PushDTO<Audience> pushDTO = this.buildPushDTO(title, content, linkUrl, type);// 设置接收人信息Audience audience = new Audience();pushDTO.setAudience(audience);audience.addCid(cid); // cid// 进行cid单推PushApi pushApi = myApiHelper.creatApi(PushApi.class);ApiResult<Map<String, Map<String, String>>> apiResult = pushApi.pushToSingleByCid(pushDTO);if (apiResult.isSuccess()) {// successlog.info("推送成功");System.out.println(apiResult.getData());} else {// failedlog.error("推送失败");System.out.println("code:" + apiResult.getCode() + ", msg: " + apiResult.getMsg());}return apiResult;}/*** 消息参数模板*/private PushDTO<Audience> buildPushDTO(String title, String content, String linkUrl, String type) {PushDTO<Audience> pushDTO = new PushDTO<>();// 设置推送参数//requestid需要每次变化唯一pushDTO.setRequestId(System.currentTimeMillis() + "");pushDTO.setGroupName("wxb-group");// 消息通知//GTNotification notification = new GTNotification();//pushMessage.setNotification(notification);//notification.setTitle(title);//notification.setBody(content);//android8.0以上//0:无声音,无振动,不显示;//1:无声音,无振动,锁屏不显示,通知栏中被折叠显示,导航栏无logo;//2:无声音,无振动,锁屏和通知栏中都显示,通知不唤醒屏幕;//3:有声音,无振动,锁屏和通知栏中都显示,通知唤醒屏幕;//4:有声音,有振动,亮屏下通知悬浮展示,锁屏通知以默认形式展示且唤醒屏幕;// notification.setChannelLevel("3");//notification.setClickType("payload");//notification.setPayload(payload);//notification.setBadgeAddNum("1");/* 设置个推通道参数,更多参数请查看文档或对象源码 *///配置推送条件// 1: 表示该消息在用户在线时推送个推通道,用户离线时推送厂商通道;// 2: 表示该消息只通过厂商通道策略下发,不考虑用户是否在线;// 3: 表示该消息只通过个推通道下发,不考虑用户是否在线;// 4: 表示该消息优先从厂商通道下发,若消息内容在厂商通道代发失败后会从个推通道下发。Strategy strategy = new Strategy();strategy.setDef(1);strategy.setSt(1);Settings settings = new Settings();settings.setStrategy(strategy);pushDTO.setSettings(settings);//消息有效期,走厂商消息需要设置该值settings.setTtl(3600000);PushChannel pushChannel = new PushChannel();Map<String, String> map = new HashMap<>();map.put("title", title);map.put("content", content);map.put("linkUrl", linkUrl);map.put("type", type);// 转json对象String payload = JSONUtils.toJSONString(map);// ========================= ios离线配置 ==============================//推送苹果离线通知标题内容Alert alert = new Alert();//苹果离线通知栏标题alert.setTitle(title);//苹果离线通知栏内容alert.setBody(content);Aps aps = new Aps();//1表示静默推送(无通知栏消息),静默推送时不需要填写其他参数。// 苹果建议1小时最多推送3条静默消息aps.setContentAvailable(0);aps.setSound("default");aps.setAlert(alert);IosDTO iosDTO = new IosDTO();iosDTO.setPayload(payload);iosDTO.setAps(aps);iosDTO.setType("notify");pushChannel.setIos(iosDTO);// =================== 安卓离线厂商通道推送消息体 ===========================AndroidDTO androidDTO = new AndroidDTO();pushDTO.setPushChannel(pushChannel);pushChannel.setAndroid(androidDTO);Ups ups = new Ups();androidDTO.setUps(ups);ThirdNotification notification1 = new ThirdNotification();ups.setNotification(notification1);//安卓离线展示的标题notification1.setTitle(title);//安卓离线展示的内容notification1.setBody(content);notification1.setClickType("intent");notification1.setIntent("intent:#Intent;action=android.intent.action.oppopush;" +"launchFlags=0x14000000;" +"component=包名/io.dcloud.PandoraEntry;S.UP-OL-SU=true;" +"S.title=" + title + ";" +"S.content="+  content + ";" +"S.payload=" + payload + ";end");// notification1.setPayload(payload);//各厂商自有功能单项设置
//        ups.addOption("HW", "/message/android/notification/badge/class", "io.dcloud.PandoraEntry ");
//        ups.addOption("HW", "/message/android/notification/badge/add_num", 1);
//        ups.addOption("HW", "/message/android/notification/importance", "HIGH");
//        ups.addOption("VV","classification",1);//设置options 方式一
//        ups.addOption("HW","badgeAddNum",3);
//        ups.addOption("HW","badgeClass","com.getui.demo.GetuiSdkDemoActivity");
//        ups.addOption("OP","app_message_id",11);
//        ups.addOption("VV","message_sort",1);
//        ups.addOptionAll("channel","default");// PushMessage在线走个推通道才会起作用的消息体PushMessage pushMessage = new PushMessage();pushDTO.setPushMessage(pushMessage);Map<String, Object> mapTC = new HashMap<>();mapTC.put("title", title);mapTC.put("content", content);mapTC.put("payload", map);String jsonTC = JSONUtils.toJSONString(mapTC);pushMessage.setTransmission(jsonTC);log.info("pushDTO:{}", pushDTO);return pushDTO;}/*** 离线通知消息参数模板**/private PushDTO<Audience> offlinePushDTO(String title, String content, String linkUrl, String type) {PushDTO<Audience> pushDTO = new PushDTO<>();// 设置推送参数//requestid需要每次变化唯一pushDTO.setRequestId(System.currentTimeMillis() + "");pushDTO.setGroupName("wxb-group");// PushMessage在线走个推通道才会起作用的消息体Map<String, String> map = new HashMap<>();map.put("title", title);map.put("content", content);map.put("linkUrl", linkUrl);map.put("type", type);PushMessage pushMessage = new PushMessage();pushDTO.setPushMessage(pushMessage);Map<String, Object> mapTC = new HashMap<>();mapTC.put("title", title);mapTC.put("content", content);mapTC.put("payload", map);String jsonTC = JSONUtils.toJSONString(mapTC);System.err.println(jsonTC);pushMessage.setTransmission(jsonTC);log.info("pushDTO:{}", pushDTO);return pushDTO;}
}
/*** 个推推送类*/
@Configuration
public class GTPushConfig {@Value("${push.app_id}")private String appId;@Value("${push.app_key}")private String appKey;@Value("${push.master_secret}")private String masterSecret;@Bean(name = "myApiHelper")public ApiHelper apiHelper() {// 设置httpClient最大连接数,当并发较大时建议调大此参数。或者启动参数加上 -Dhttp.maxConnections=200System.setProperty("http.maxConnections", "200");GtApiConfiguration apiConfiguration = new GtApiConfiguration();// 填写应用配置apiConfiguration.setAppId(appId);apiConfiguration.setAppKey(appKey);apiConfiguration.setMasterSecret(masterSecret);// 接口调用前缀,请查看文档: 接口调用规范 -> 接口前缀, 可不填写appId// 默认为https://restapi.getui.com/v2apiConfiguration.setDomain("https://restapi.getui.com/v2/");// 实例化ApiHelper对象,用于创建接口对象ApiHelper apiHelper = ApiHelper.build(apiConfiguration);return apiHelper;}
}
push:
# 登录测试app_id: l4jOPmTtJx9MpeY4SGgCh4app_key: FEeRTZeCPx98QDwYBtZTG3master_secret: RyU5cFvTy09YANmfJgWLC
# 本配置信息仅用于开发测试,请自行前往Uni Push信息配置获取

SpringBoot项目集成UniPush推送服务相关推荐

  1. Maven打包SpringBoot项目镜像并推送至私有Harbor仓库

    1 准备工作: 1.1 搭建harbor 因为harbor是基于docker的,并且依赖于docker-compose,所以先要准备好dockers环境再安装好compose工具 1.1.1 dock ...

  2. android华为推送不显示角标,V6项目集成华为推送流程和角标显示处理

    (一) 集成资料 3.华为官方QQ群:662059980 (二) V6项目集成步骤和代码说明 1.华为官网申请PUSH服务: 1.1申请 点击申请按钮进行申请 1.2提交应用信息 填写应用信息后提交 ...

  3. uniapp使用unipush推送及java后台推送代码(含本地打包apk使用unipush推送)

    你懂的,又是项目用到了,作为程序猿义无反顾需要定时 "进化" ,硬头皮去写,虽然曾经作为android开发者写了很多的推送,但是uniapp的推送也是有所差异的,记录一下,以后留用 ...

  4. Uni-push 推送实现全过程 (2022 最新 最全 最细)

    Uni-push 推送实现全过程 序言: 公司使用的uniapp开发的项目需要推送功能,看了下官方文档,经过几天努力,打通了推送功能.下图是ios和安卓(oppo和荣耀手机),在线或离线获取的推送通知 ...

  5. uni-app开发之unipush推送踩坑填坑之旅

    最近需要开发app,经过多方对比,最终选择了使用dcloud的uni-app,一套代码可以编译七个平台,最主要就是相比于apicloud来说支持本地打包,减少了很多可能会带来的限制. 也就想着,它最大 ...

  6. uni-app实现uniPush推送功能(Android)

    一.开通UniPush推送服务 在manifest.json中勾选push(消息推送) 点此查看如何开通UniPush推送服务 二.在线推送(总结) 1.需要确保输入的 Android包名必须与打包时 ...

  7. 集成第三方推送最佳实践

    集成第三方推送最佳实践 字数6571  阅读7983  评论46  喜欢57 本文会不定期更新,推荐watch下项目.如果喜欢请star,如果觉得有纰漏请提交issue,如果你有更好的点子可以提交pu ...

  8. 【开发者必看】【push kit】推送服务服务典型问题合集2

     1.添加华为sdk com.huawei.hms:push:5.3.0.301之后编译报错? 答:应用如果已经包含com.tencent.tpns:huawei对华为push进行封装,同时集成编译会 ...

  9. java服务端集成信鸽推送

    java服务端集成信鸽推送 最近项目需要集成推送功能,突发奇想的选了信鸽推送(可能是最近一直在用阿里的东西),没想到这坑不是一般的多,而且关于详细的集成案例,度娘上真是没一个能入眼的.算了,别的不多说 ...

最新文章

  1. Spring boot拦截器登录检查
  2. [一道搜狗输入法的面试题]C++转换构造函数和类型转换函数
  3. ReactiveNative学习之Diff算法
  4. Match Points
  5. php购物网站类的继承和多态,类的继承与多态
  6. UI设计素材模板|wireframe线框图设计要点
  7. linux tee 日志输出_25 个 Linux 下最炫酷又强大的命令行神器,你用过其中哪几个呢?...
  8. java 集合 总结 表_java-集合总结
  9. 编译器优化对齐(字节对齐)
  10. 7-1 xbmc学习笔记
  11. 一文62页PPT读懂中国供应链金融
  12. [转]KSN报告:2014 - 2016年的PC勒索软件
  13. JTT 808-2019 道路运输车辆卫星定位系统 终端通讯协议及数据格式.PDF
  14. 拉肚子差评回复模板_遇到差评,餐厅这样对症回复就对了!
  15. 自然语言处理入门理论知识
  16. 四川大学网络教育计算机应用基础,四川大学网络教育学院《计算机应用基础》第一次作业...
  17. 弹性裸金属服务器EBM
  18. verilog验证平台技巧(避免竞争的办法)
  19. 类的设计---麻球与油果
  20. linux中清除git记住密码的方法

热门文章

  1. carla中车辆的朝向(yaw 偏航角)
  2. php 抽象工厂模式,PHP设计模式(三)抽象工厂模式(Abstract Factory)
  3. PyTorch模型保存与加载
  4. 创建一个包含1-10的立方的列表
  5. Python爬虫入门-小试ImagesPipeline爬取pixabay和煎蛋之为什么是‘404’
  6. 计算机网络课程设计-Socket网络通信(C++, MacOS)
  7. hey i wanna join urs
  8. 常见的分布式数据库有哪些
  9. 牛客小白月赛19A:「水」滔天巨浪
  10. 2018年已过半,Kubernetes和云原生的巨浪要把云计算带向何处