我创建了离子2项目并添加诊断cordova插件,如下所示:
ionic plugin add cordova.plugins.diagnostic
npm install --save @ionic-native/diagnostic
Run Code Online (Sandbox Code Playgroud)
并像这样添加android平台:
ionic platform add android@latest
Run Code Online (Sandbox Code Playgroud)
但是当使用ionic build android控制台构建时给出了这个错误:
Error: Could not find an installed version of Gradle either in Android Studio,
or on your system to install the gradle wrapper. Please include gradle
in your path, or install Android Studio
Run Code Online (Sandbox Code Playgroud)
我尝试下载manualy gradle.3.3-all.zip并在platform/android/cordova/lib/builders/GradleBuilder.js中更改此distributionUrl var
var distributionUrl = process.env['CORDOVA_ANDROID_GRADLE_DISTRIBUTION_URL'] || 'https\\://services.gradle.org/distributions/gradle-3.3-all.zip'
Run Code Online (Sandbox Code Playgroud)
至:
var distributionUrl = process.env['CORDOVA_ANDROID_GRADLE_DISTRIBUTION_URL'] || 'file:///E:/gradles/gradle-3.3-all.zip';
Run Code Online (Sandbox Code Playgroud)
但不工作和控制台给我最后一个错误.
我不知道如何为android @ latest版本添加gradle
我使用angularjs并使用服务工作者接收推送通知.但navigator.serviceWorker.controller在页面刷新之前为空,我不知道如何解决这个问题
一些维修工作者的代码:
self.addEventListener('push', pwServiceWorker.pushReceived);
self.addEventListener('notificationclick', pwServiceWorker.notificationClicked);
// refresh caches
self.addEventListener('activate', function (event)
{
event.waitUntil(
caches.keys().then(function (cacheNames)
{
return Promise.all(
cacheNames.map(function (cacheName)
{
return caches.delete(cacheName);
})
);
})
);
});
Run Code Online (Sandbox Code Playgroud)
并在收到推送时向serviceworker中的客户端发送消息:
self.clients.matchAll().then(function(all) {
console.log(all);
all.forEach(function(client) {
client.postMessage(data);
});
});
Run Code Online (Sandbox Code Playgroud)
在mainController.js中给出如下消息:
if (!navigator.serviceWorker || !navigator.serviceWorker.register) {
console.log("This browser doesn't support service workers");
return;
}
// Listen to messages from service workers.
navigator.serviceWorker.addEventListener('message', function(event) {
console.log("Got reply from service worker: " + event.data);
});
// Are we being controlled?
if (navigator.serviceWorker.controller) {
// …Run Code Online (Sandbox Code Playgroud) 我按照http://ionicframework.com/docs/native/in-app-browser/文档使用inappbrowser并尝试以下步骤:
1-安装
ionic cordova plugin add cordova-plugin-inappbrowser
npm install --save @ionic-native/in-app-browser
Run Code Online (Sandbox Code Playgroud)
2 - 将此插件添加到app.module.ts提供程序
3 - 添加到构造函数:
constructor(private iab: InAppBrowser) { }
Run Code Online (Sandbox Code Playgroud)
4-并在启动方法中使用它,如下所示:
import { InAppBrowser,InAppBrowserEvent} from '@ionic-native/in-app-browser';
launch(urlc){
let url = 'https://example.com/';
let browser = this.iab.create(url, '_blank', 'location=yes');
browser.on('loadstart').subscribe((ev: InAppBrowserEvent) => {
this.close_status=true;
});
}
Run Code Online (Sandbox Code Playgroud)
但是当服务和调用启动方法时,我看到了这个错误:
Runtime Error
browser.on(...).subscribe is not a function
Run Code Online (Sandbox Code Playgroud) 我在我的应用程序中使用谷歌地图 API,如下所示:
在 index.html 中使用 api 键导入 url :
<script src="https://maps.googleapis.com/maps/api/js?key=myKey"></script>
Run Code Online (Sandbox Code Playgroud)
并在组件中像这样声明谷歌:
declare let google: any;
Run Code Online (Sandbox Code Playgroud)
并在这样的组件中使用它:
this.map = new google.maps.Map(document.getElementById('googleMap'), this.mapProp);
Run Code Online (Sandbox Code Playgroud)
如何动态更改 index.html 中存在的 API 密钥?
google-maps google-maps-api-3 angular2-services angular angular7
我使用 pushwoosh 在我的网络应用程序中接收推送通知。一切正常,并在 serviceworker 侦听器中收到推送消息,但我想从 serviceworker 提供推送消息数据并在另一个 js 类中处理它
main.js 像这样:
if ('serviceWorker' in navigator) {
console.log('Service Worker is supported');
navigator.serviceWorker.register('sw.js').then(function() {
return navigator.serviceWorker.ready;
}).then(function(reg) {
console.log('Service Worker is ready :^)', reg);
// TODO
}).catch(function(error) {
console.log('Service Worker error :^(', error);
});
}
// get push message data in main.js and process it
Run Code Online (Sandbox Code Playgroud)
像这样的服务人员:
self.addEventListener('push', function(event) {
console.log('Push message', event);
var title = 'Push message';
event.waitUntil(
self.registration.showNotification(title, {
'body': 'The Message',
'icon': 'images/icon.png'
}));
});
Run Code Online (Sandbox Code Playgroud) 我创建了一个使用 React Native 的简单应用程序AppState:
import React, {Component} from 'react'
import {AppState, Text , View} from 'react-native'
export default class AppStateExample extends React.Component {
constructor(props){
super(props);
this.state = {
name:'not change'
}
}
componentDidMount() {
AppState.addEventListener('change', this._handleAppStateChange);
}
componentWillUnmount() {
AppState.removeEventListener('change', this._handleAppStateChange);
}
_handleAppStateChange = (nextAppState) => {
if(AppState.currentState=='background'){
console.log('background mode');
this.setState({name:'back'});
}
if(AppState.currentState =='active'){
//...
}
};
render() {
return (
<View>
<Text>State Name : {this.state.name}</Text>
</View>
);
}
}
Run Code Online (Sandbox Code Playgroud)
当我尝试将应用程序从前台切换到后台,然后从后台切换到前台时,console.log('background mode');效果很好并且控制台打印'background mode'
但
不起作用 …
cordova ×2
ionic2 ×2
javascript ×2
angular ×1
angular7 ×1
angularjs ×1
google-maps ×1
ionic3 ×1
pushwoosh ×1
react-native ×1