天道酬勤,学无止境

Pop up state directly from coldstart

I've built a Cordova app using the ionic framework. It is build using Peer JS and i need the app to open a state from cold start quickly whenever my peer receives an incoming call, kind of like the phone app opens the incoming call activity when we receive a call.

Currently I'm using ionic push notifications to open the state on click of the notification but that takes too long and loads from the splash screen onwards.

Is there a way to kind of pop open my state containing the receive call code into the foreground quickly

评论

For Cordova, the hack that i came up with was,

First, separate the incoming call code into a html page with the required javascript code.

Next, send a notification with a specific payload, then in the onRecieve method in the phonegap push plugin, I check the payload, if it matches the specific payload and if the app is killed, i use an intent to open the main activity which contains the cordova webview, I load the html page here based on the intent.

This makes it appear as if the app "pops open".

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • Decrease loading time from coldstart in cordova ionic
    I have created a cordova app using ionic, When i open my app from coldstart, It first loads the splash screen, then there are a few seconds when the screen is white as my index.html file loads and then the app UI is loaded and displayed. This takes approximately 10 seconds on a Moto X which is too long since my app contains features in which speed is of the essence. There is no network request that takes place during the loading from coldstart. Is there any optimization techniques that can decrease the loading time to make the app load as fast as other hybrid apps like gmail.
  • 应用程序恢复时如何处理推送通知?(How to handle Push notification when application is resumed?)
    问题 尝试使用 PushPlugin 处理推送通知。 以下是我的代码。 onNotificationGCM: function(e) { switch( e.event ) { case 'registered': if ( e.regid.length > 0 ) { console.log("Regid " + e.regid); //alert('registration id = '+e.regid); sDeviceId = e.regid; //alert(sDeviceId); } break; case 'message': // this is the actual push notification. its format depends on the data model from the push server alert('message = '+e.message); alert('message = '+e.message+' msgcnt = '+e.msgcnt); if ( e.foreground ) { alert("Notification Received"); } else { // otherwise we were launched because the user touched a notification in the
  • 在cordova ionic中减少从冷启动开始的加载时间(Decrease loading time from coldstart in cordova ionic)
    问题 我使用ionic创建了一个cordova应用程序,当我从冷启动打开我的应用程序时, 它首先加载启动画面,然后当我的 index.html 文件加载时屏幕变白几秒钟,然后加载并显示应用程序 UI。 这在 Moto X 上大约需要 10 秒,这太长了,因为我的应用程序包含速度至关重要的功能。 从冷启动加载期间没有发生网络请求。 是否有任何优化技术可以减少加载时间,使应用加载速度与 gmail 等其他混合应用一样快。 回答1 关于这个主题有很多信息,我将尝试列出一些可能感兴趣的信息。 关于 Cordova 启动时间: PhoneGap for Enterprise 的作者 Kerri Shotts 在这里对类似问题给出了很好的答案。 虽然它已经有大约 2 年的历史了,但提到的要点仍然适用。 Kerri 在这里触及了一个重要问题:您无法 100% 控制加载时间,请记住这一点! Christophe Coenraets 有一些关于这个主题的幻灯片,其中包含一些一般提示和具体示例。 (微软关于 Cordova 性能的提示可以在这里找到。遗憾的是没有关于启动时间的信息,所以我会把它放在大括号中。) Ionic 建立在 Angular 之上,所以让我们也来看看它。 关于 Angular 启动时间: 我在这里有两个链接: 最后
  • Ionic/Cordova 应用程序不会在后台收到推送通知(Ionic/Cordova app doesn't receives push notification in the background)
    问题 我的 Android 应用程序不会在后台收到推送通知,它应该根据文档。 Android 设备上的 Android 应用程序无需运行即可接收消息。 只要应用程序设置了适当的广播接收器和权限,系统就会在消息到达时通过 Intent 广播唤醒 Android 应用程序。 尝试不同的通知发现,当且仅当通知包含属性"message" 时,它确实会在关闭时收到推送通知,否则,它只会丢弃它。 (推送通知只是 JSON 对象)。 我的通知包含所有类型的属性,包括“警报”、“id”和“标题”,但只有“消息”才能让 Android 唤醒应用程序。 不起作用的示例通知: { event: 'message', from: '947957531940', collapse_key: 'do_not_collapse', foreground: true, payload: { alert: 'Mensaje de Prueba', title: 'Titulo Mensaje de Prueba' } } 例如通知工作: { event: 'message', from: '947957531940', message: 'Contenido del mensaje de prueba.', collapse_key: 'do_not_collapse', foreground: true
  • Ionic Framework PushPlugin: onNotificationGMC is not fired and cannot obtain regID
    I believe that this problem looks like this question: Cordova Push Plugin: onNotificationGMC is not fired and cannot obtain regID But I'm using Ionic Framework. I follow this tutorial in making PushProcessingService: http://intown.biz/2014/04/11/android-notifications/ //factory for processing push notifications. angular.module('starter.pusher', []) .factory('PushProcessingService', function(MyService) { function onDeviceReady() { console.info('NOTIFY Device is ready. Registering with GCM server'); alert('NOTIFY Device is ready. Registering with GCM server'); //register with google GCM server
  • How to handle Push notification when application is resumed?
    Trying to handled push Notification using PushPlugin. Following is my code. onNotificationGCM: function(e) { switch( e.event ) { case 'registered': if ( e.regid.length > 0 ) { console.log("Regid " + e.regid); //alert('registration id = '+e.regid); sDeviceId = e.regid; //alert(sDeviceId); } break; case 'message': // this is the actual push notification. its format depends on the data model from the push server alert('message = '+e.message); alert('message = '+e.message+' msgcnt = '+e.msgcnt); if ( e.foreground ) { alert("Notification Received"); } else { // otherwise we were launched because
  • 离子框架 PushPlugin:onNotificationGMC 未触发且无法获取 regID(Ionic Framework PushPlugin: onNotificationGMC is not fired and cannot obtain regID)
    问题 我相信这个问题看起来像这个问题: Cordova 推送插件:onNotificationGMC 未触发且无法获取 regID 但我使用的是离子框架。 我按照本教程制作 PushProcessingService: http://intown.biz/2014/04/11/android-notifications/ //factory for processing push notifications. angular.module('starter.pusher', []) .factory('PushProcessingService', function(MyService) { function onDeviceReady() { console.info('NOTIFY Device is ready. Registering with GCM server'); alert('NOTIFY Device is ready. Registering with GCM server'); //register with google GCM server var pushNotification = window.plugins.pushNotification; pushNotification.register(gcmSuccessHandler
  • AWS Lambda:识别冷启动(AWS Lambda: Identifying cold starts)
    问题 是否有明确的方法来识别“冷启动”? 是在 Lambda 本身的运行时,还是通过日志? 我知道冷启动的特点是运行时间更长,我实际上可以看到,但我正在寻找一种明确的方法。 如果这很重要,我正在使用 Node.js。 更新:下面有两个很好的答案,适用于两个用例: - 在 lambda 运行时识别冷启动。 - 从 CloudWatch 日志中识别冷启动。 回答1 如果您在 NodeJS 脚本的顶部添加一些初始化代码,您将能够在代码中指出这是一个冷启动,然后如果您想在日志中看到它,您将能够记录它。 例如: var coldStart = true; console.log("This line of code exists outside the handler, and only executes on a cold start"); exports.myHandler = function(event, context, callback) { if (coldStart) { console.log("First time the handler was called since this function was deployed in this container"); } coldStart = false; ... callback(...); } 更新:
  • .Net 3.5 Windows 窗体应用程序:64 位 Vista 上的 x86 与 x64 加载时间(.Net 3.5 Windows Forms Application: x86 vs x64 load times on 64 bit Vista)
    问题 我们正在开发 Winforms 应用程序并正在优化启动时间。 该应用程序在 64 位 Vista 机器上运行。 在我们的测试中,我们发现了一个看似反直觉的结果。 其他一切都相同,目标是 32 位与 64 位负载的一半时间。 任何人都可以解释为什么? 谢谢。 [编辑] 我们通过 ClickOnce 部署应用程序,根据我们的研究,它在一个独特的沙箱中启动应用程序。 因此它总是冷启动,所以在这里寻求提高性能是徒劳的。 我们的主要问题是项目中存在 32 位 dll。 一旦我们将项目定位在 x86 上(即使它在 x64 上运行),加载时间就会减少一半。 [/编辑] 回答1 .NET 3.5 SP1 通过不再验证来自受信任位置的程序集的强名称来获得改进的启动性能。 在我的书中有点争议,但有点站得住脚。 我确实检查了 64 位版本的 CLR 是否也绕过了这个耗时的步骤。 签署一个 DLL,将其放入 GAC,然后修补一个字节。 加载程序集时没有抱怨。 所以不是 SP1 启动偏好的改进解释了这种差异。 启动时间的其他因素是: - 从磁盘加载 CLR(仅限冷启动) - 依赖程序集的 Groveling - JIT 编译启动代码 Coldstart 很可能是一个因素,您可能没有运行其他加载了 64 位版本的 CLR 的进程。 通过在测试时运行一个虚拟的 .NET 应用程序可以轻松消除。
  • “ecb”不适用于 Cordova 和 PushPlugin(“ecb” doesn't work whit Cordova and PushPlugin)
    问题 我尝试使用演示通过 pushNotification 注册我的设备。 它不起作用。 打印“Cordova PushNotification Plugin Demo”和“registering android”并查看警报“OK”(successHandler 函数有效)。 问题是“ecb”不起作用。 为什么? 你能帮助我吗? 我与 Cordova 一起安装的插件是:PushPlugin、Device、Notification、InAppBrowser 和 Network Information。 我已经在我的 LG L9 和模拟器上试用了该应用程序。 同样的问题。 这是代码: <script type="text/javascript" charset="utf-8" src="cordova.js"></script> <script type="text/javascript" charset="utf-8" src="jquery_1.5.2.min.js"></script> <script type="text/javascript" src="PushNotification.js"></script> <script type="text/javascript"> var pushNotification; document.addEventListener(
  • vue项目从后台获取地址用a标签/location.hraf跳转到项目中的指定页面
    vue项目新坑记录 ##vue项目从后台获取地址用a标签/location.hraf跳转到项目中的指定页面,项目中有个弹窗,用户登录后通过点击弹窗进入到项目的对应活动页,弹窗是后台动态配置的图片和地址所以一开始登录后进入首页,首页mounted时请求接口获取弹窗图片和路径。但是后台配置时直接把全路径配置上去了,导致跳转出现了问题。 坑:刚开始的时候是用a标签包裹着图片,点击图片之后跳转到对应路径 <!-- 图片模式 --> <div class="container-pic" v-else-if="popType == 'pic'" style="padding: 2rem;"> <a :href="$store.state.picLink" target="_blank"> <img :src="$store.state.picUrl" style="width: 70vw" alt srcset /> </a> </div> 后来发现在vue项目中直接用原生的方式跳转自己的页面会出现奇怪的问题,点击图片之后页面跳转不了,然后我把链接复制出来,发现链接地址变了,但是页面没有变化,后来我就将a标签注释,直接给img加一个点击事件,后台配置跳转路径的时候改为vue中name的名字。 <div class="container-pic" v-else-if="popType ==
  • Flutter 底部向上动画弹出的菜单选项
    题记 —— 优美的应用体验 来自于细节的处理,更源自于码农的自我要求与努力,当然也需要码农年轻灵活的思维。 Flutter是谷歌推出的最新的移动开发框架。 【x1】微信公众号的每日提醒 随时随记 每日积累 随心而过 文章底部扫码关注 【x2】各种系列的视频教程 免费开源 关注 你不会迷路 【x3】系列文章 百万 Demo 随时 复制粘贴 使用 【x4】一目了然的源码 【x5】简短的视频不一样的体验 本文章实现Demo运行效果 如下: 小编以将这个效果写成了一个依赖库,大家可以直接调用使用pub: dependencies: shake_animation_widget: ^2.1.2 然后如上图的Demo实现,首先是构建一个页面,代码如下: class HomePage extends StatefulWidget { @override _TestPageState createState() => _TestPageState(); } class _TestPageState extends State<HomePage> { @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text("测试"), ), body: Container( //填充
  • 2021-05-18
    <hmtt> 1.首页文章列表项_样式调整# 要调整哪些内容 1. 文章标题 - 字号 颜色 多行文字省略 2.单图封面 - 封面容器( 去除 flex: 1 固定高度 左内边距) 封面图 (宽高 填充模式: cover) 3.底部文本信息 - 字号 颜色 间距 让标题和底部文本上下两端对齐 4.多图封面 - 外层容器 (flex容器 上下外距) 图片容器 (平均分配容器空间: flex: 1 ; 固定高度 容器项间距) 2.为什么好多图片资源返回403? 第三方平台一般是怎么处理图片资源保护的? 可以尝试怎么解决? 1.因为我们后端数据数用过爬虫抓取的第三方平台内容,而某些第三方平台对图片资源做了防盗链保护处理 2.第三方平台的服务一般会使用Referer请求识别访回来源,然后处理响应 在元素上设置属性 referrerPolicy = "no-referrer" 直接在页面中通过 <meta name="referrer" content="no-referrer" /> 3.使用dayjs步骤 1.装包 2.在utils下封装一个模块,引入dayjs 3.导入中文语言包,并设置 4.在项目中如何使用dayjs的相对时间 1.引入相对时间的插件,并注册上去 2.定义一个全局过滤器 3.到页面中使用(过滤器语法: {{ 数据 | 过滤器名称 }) 5.说出频道编辑的交互逻辑 1
  • 安信可ESP-07S_12F_12S 腾讯云固件使用文档
    此教程针对腾讯云的AT固件进行使用(以下指令所使用的的固件 AT 版本为 2.0.0.0,SDK 版本为3.2.0 进行测试, 如有新版本的改动请及时更新新版本的固件,所使用的硬件为nodemcu-12S) TIP:为了方便调试,我们烧写默认串口(TXD,RXD)的腾讯云固件进行测试 接线方式: (接线图中所使用的电阻阻值为10K,3.3V供电需要使用3.3V 500mA以上的稳定电源) 串口通讯配置:波特率115200,8位数据位,1位停止位,无奇偶校验.为了方便调试,我们更换腾讯云平台提供的串口调试工具,如下图。 程序主要分为3个区域:串口列表区域(数字[1、2、3])、指令编辑和历史记录区域(主体区域,数字[4、5、6、7])、扩展区域(将配网、腾讯云等相关功能封装成GUI的区域,数字[9、10、11])。另外,鼠标移动到数字[8]所在位置可以弹出一个按钮,点击该按钮可以展开或者关闭扩展区域。在Windows环境下载并解开压缩包,打开IoTDevTool.exe,PC连接ESP8266串口模组,就可按照下面 步骤快速体验访问腾讯云物联网服务。 1.扫描并连接串口 2.配置腾讯云物联网创建的设备信息 3.将设备信息设置到模组上 4.直接连接WiFi(如果是物联网开发平台创建的设备,也可以通过配网方式进行连接) 5.连接腾讯云MQTT服务 6.订阅相关MQTT主题
  • 隐含图中的 Python 搜索算法(Python Search Algorithm from Implied Graphs)
    问题 不久前我问了一个问题(python中的深度优先搜索算法),@6502很好地回答了这个问题。 这让我可以更准确地思考这个问题并引出这个后续问题。 在上一个问题中,您有一个来自如下函数的隐含有向树: def neighbors1(node): "Returns neighboring nodes in directed tree" #some code yield node_1 #some more code yield node_2 #... yield node_n 和成功标准的功能是这样的: def goal(node): "Returns true if node is the end goal and false otherwise" if node #meets some goal#: return True else: return False 第一个函数意味着某种图形,根据细节,它可能是一棵树或一个带环的图,它可能是有向的或无向的。 但是假设上面暗示了一个有向树(如图所示)。 这意味着对于任何节点,您都可以找到子节点,并递归地继续向下搜索这棵树。 现在,如果你想从节点 A 到节点 H(比如说),你可以使用上一个问题中的代码,将 neighbor1 函数传递给搜索函数(转载如下): def search(start_state, neighbors, goal)
  • 弹出时强制Flutter导航器重新加载状态(Force Flutter navigator to reload state when popping)
    问题 我有一个StatefulWidget在颤振按钮,导航我到另一个StatefulWidget使用Navigator.push() 在第二个小部件上,我正在更改全局状态(一些用户首选项)。 当我从第二个小部件回到第一个小部件时,使用Navigator.pop() ,第一个小部件处于旧状态,但我想强制重新加载它。 任何想法如何做到这一点? 我有一个主意,但看起来很丑: 弹出以删除第二个小部件(当前一个) 再次弹出以删除第一个小部件(上一个) 推送第一个小部件(应强制重绘) 回答1 您可以在这里做几件事。 @Mahi的正确答案可能会更简洁一些,实际上是在OP询问时使用push而不是showDialog。 这是一个使用Navigator.push的示例: import 'package:flutter/material.dart'; class SecondPage extends StatelessWidget { @override Widget build(BuildContext context) { return Container( color: Colors.green, child: Column( children: <Widget>[ RaisedButton( onPressed: () => Navigator.pop(context), child: Text
  • 小程序用户登录架构设计
    首发于公众号@程序员思语 作者:程序员思语 1. 背景 首先谈谈在小程序的开发中,如何借助微信的能力标识一个用户? 微信官方提供了两种标识: OpenId 是一个用户对于一个小程序/公众号的标识,开发者可以通过这个标识识别出用户。 UnionId 是一个用户对于同主体微信小程序/公众号/APP 的标识,开发者需要在微信开放平台下绑定相同账号的主体。开发者可通过UnionId,实现多个小程序、公众号、甚至 APP 之间的数据互通。 同一个用户的这两个 ID 对于同一个小程序来说是永久不变的,就算用户删了小程序,下次用户进入小程序,开发者依旧可以通过后台的记录标识出来。那么如何获取 OpenId 和 UnionId 呢? 早期(2018 年 4 月之前)的小程序设计使用 wx.getUserInfo 接口 (现改用 wx.getUserProfileget),来获取用户信息。设计这个接口的初衷是希望开发者在真正需要用户信息(如头像、昵称)的情况下才去调取这个接口。但很多开发者为了拿到 UnionId,会在小程序启动时直接调用这个接口,导致用户在使用小程序的时候产生困扰,归结起来有几点: 开发者在小程序首页直接调用 wx.getUserInfo 进行授权,弹框获取用户信息,会使得一部分用户点击“拒绝”按钮。在开发者没有处理用户拒绝弹框的情况下,用户必须授权头像昵称等信息才能继续使用小程序
  • [面试算法]中缀表达式转后缀表达式Python
    中缀表达式与后缀表达式 我们平时写的表达式就是中缀表达式,这里面的“中”或“后”指的是操作符相对操作数的位置。例如,a+b*c-d是一个中缀表达式,a+(b+c)*d-e是一个中缀表达式。 后缀表达式,也叫逆波兰表达式,是先写操作数,再写操作符,例如中缀表达式a+b改写为后缀表达式就是ab+。 中缀表达式a+(b+c)*d-e改写为后缀表达式先计算括号里面的,(b+c)转化为后缀表达式为bc+,还需要括号吗?不需要了,后面再看为什么不需要括号。因此(b+c)*d转化过程为:bc+已经可以进行计算了,因此可以当做一个操作数了,所以(b+c)*d转化为后缀的结果是:bc+d*,看到了吗? 那我们能从bc+d*还原成(b+c)*d吗? 可以。从左到右,肯定是两个操作数对应一个操作符,依次读取。先读到了b,再读到了c,然后读到了+,那么先计算b+c,因为是后缀还原中缀,所以这里的b+c用一个括号包围起来,用于表示一个数,即(b+c)。现在有了一个数(b+c)了,还差一个操作数,继续读取,读到了d,还差一个操作符,继续读取,读到了*,那么将(b+c)和d相乘得到(b+c)*d。所以,没有括号的后缀表达式,可以准确唯一对应还原到中缀表达式。上述过程,也说明了计算机会如何计算后缀表达式。后缀表达式,在计算机当中很重要,也是栈的重要应用之一。 下面我们继续将中缀表达式a+(b+c)*d
  • Vue2.0 性能优化方案总结
    随着互联网的发展,越来越多的公司都在使用Vue但是随着项目的越来越大,难免的会带来一系列的性能问题,笔者也为了这些问题而感到头疼,也同样的针对Vue的性能优化进行学习,已便在项目之出把性能问题规避掉,避免没有必要的返工。为了方便以后能够快速的找到相关学习内容,在这里做一下记录,方便以后查看,同时也想把这些内容总结一下希望能够帮助更多的小伙伴一起学习,一起成长。Fighting~这个时候可能会有很多小伙伴说,现在Vue3.0都快发布了为什么还要优化2.0的项目?因为公司80%的项目全是Vue2.0的项目,迁移的话成本太高,所以只能进行性能的优化调整。废话就不多赘述了,直接开始吧。活用异步组件Vue-cli打包的时候会把所有依赖的文件打包成一个很大的一个js文件中,当用户浏览网页的时候需要把整个js文件拉取过来,这样会导致页面在初始化的时候,页面会出现长时间的白屏情况,这个问题确实是蛮棘手的。设想一下如果在页面中有很多的功能点,每个功能点又对应着不同的功能弹窗或者表单,首先第一点页面中的功能很多,我们不知道用户想要使用哪个功能,需要弹出哪个弹窗或表单,如果异步组件的情况,Vue-cli在打包的时候会把异步组件单独打包成一个文件,当用户使用的才会去加载这个js文件内容,这样无论是首屏的渲染起到了一定的优化的作用。看下官网对于异步组件的说明:在大型应用中
  • 3D游戏编程作业——空间与运动
    3D游戏编程作业——空间与运动 C#自学 搜素 “C# 集合类型”, 了解List,HashTable的使用 List List实现了很多接口 public class List<T> : IList<T>, ICollection<T>, IEnumerable<T>, IList, ICollection, IEnumerable List的创建List<T> list = new List<T>(); List的元素添加list.Add(T()); List返回其长度list.Count List根据下标序号去除元素list.RemoveAt(x); 直接遍历Listforeach (T item in list)或者直接对其中各个元素进行某个函数操作list.ForEach(xxx;) List批量添加元素list.AddRange(new T[] {t1, t2, t3}); HashTable HashTable类是一系列基于键的哈希代码组织起来的键值对,它根据键来访问集合中的元素。 Count属性用来获取HashTable中的键值对个数。IsFixedSize用来表示哈希表是否是固定大小的。IsReadOnly反映哈希表的读写权限。Keys和Values成双成对。public virtual void Add( object key, object value )