I got a problematic assignment from my employers.
I was given the task of developing simple software that will run strictly on Google Chrome,
without attempting to connect to the web (Security reasons).
I know flutter development and I feel comfortable with the sdk.
How should I develop a web app that can be deployed using a usb stick?
Looks like PWA can be an option, but the documentation is lacking in detail.
The system does not have the ability to run a local web server.
The Flutter app must be able to work with JS libraries, I intend to use jsQR.
service workers and indexedDB could help you for develop offline route app and offline api.
mdn docs for service workers
I'm not sure that this will fit your particular case: you say that the system can't run a local webserver, but what if you provide the webserver along with your software?
I just discovered get_server: you can find it here. It aims to allow developers to host their own HTTP server by using only flutter, without resorting to external tools or other coding/scripting languages. It allows also (and that's the relevant part) to wrap your flutter web app and make it run on local network.
For now I only tried with a very simple example, but it seems to be working. These are the steps I took:
create a new flutter project: since I needed the webserver to run on Windows, I had to get flutter ready for that (see here for help)
add get_server to the new pubspec.yaml
run flutter build web on your flutter web project, and copy the build/web output
folder in the root folder of the new project (I renamed the folder while copying since flutter might change the content of the web folder)
delete all the content of lib/main.dart
paste this (this the actual content of main.dart)
import 'package:get_server/get_server.dart' as gs;
void main() {
gs.runApp(
gs.GetServerApp(home: gs.FolderWidget('folderName')),
);
}
folderName is the name of the renamed folder containing the flutter web app build.
I ran this on Windows 'device' from AndroidStudio, and my original flutter web app was reachable at localhost:8080 (for now I just used the default options of get_server). I also got the webserver (empty) GUI as a white window: I guess that can be useful for some information regarding the server itself, although, if that windows closes, localhost:8080 becomes unavailable.
But, once released, you should be able to just run the executable from the USB stick, and then connect to it with Chrome.
PS: after some time using GetServer, I had to switch to other packages because of not-so-good docs and support. Now I'm using shelf, but also Alfred is a notable mention.
Related
I have written the mobile app in cordova + angularjs + sqlite. I need to distribute it directly from my server to devices not through the google play.
Now I need to update javascript files stored in www directory on android device. I tried file transfer from app directory (/data/data/my.application.directory/) to some public device directory or server and vice versa - no problem. But problem is the www directory is part of file:///android_asset/ that is read only so I am not able to store any data in there.
Any idea? Thanks.
This is the way I'm using for updating my app and I'm not using Google Play or other stores:
I'm using this cordova plugin : https://github.com/whiteoctober/cordova-plugin-app-version to check my actual app version
cordova.getAppVersion.getVersionNumber().then(function (version)
{
if(version)
// Check the server reference version
});
After, I'm sending the app version number to the server
The server checks the difference between the version sent and the reference version
If the device app version is older, I'm returning the new version to my app client
You provide little information about your application, your code and what you are trying to do, but let me try to help you either way.
If what you want to do is modifying files in the www directory in android clients already shipped/downloaded, forget about it, you would need direct access to the device, and this code is bundled when you ship it.
If you are looking for a hot code push solution, there might be a way of doing so installing additional cordova plugins
When you publish your application on the store - you pack in it all your web content: html files, JavaScript code, images and so on. There are two ways how you can update it:
Publish new version of the app on the store. But it takes time,
especially with the App Store.
Sacrifice the offline feature and load all the pages online. But as
soon as Internet connection goes down - application won't work.
Solution: install cordova-hot-code-push
I have a Java app engine backend with a web client and an Android client. The Android client uses the generated client library and the website the JavaScript client library for the endpoints.
We have 3 environments on app engine: Dev, Staging and Production.
I already pushed the update to dev and it is working on the app and the website.
Now I have updated the backend on the Staging environment and I get a lot of authentification problems. There is nothing changed in the authentification or the signing of the app so I don't understand what it can be.
Website client
The website uses G+ login and after calling a method of the custom app engine API it gives the following error:
"Access Not Configured. has not been used in project 986034197583 before or it is disabled. Enable it by visiting [url] then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry."
The discovery#restDescription is succesful and it shows the methods.
Android client
The Android app also uses G+ login and gives the following errors (in the log of the Google Cloud Console):
com.google.api.server.spi.auth.GoogleJwtAuthenticator authenticate: ClientId is not allowed: 986034197583-51qasim2gmqql5vc652vk3u3lpapegb6.apps.googleusercontent.com
The app is not signed with another keystore and the SHA-1 hash is the same (I checked it).
API Manager Credentials
The credentials in the API manager stayed the same and should not have to change. I checked them all and they look correct. This makes no sense to me unless Google has some stupid failure or something today.
APIs Explorer
When I test the API with the APIs Explorer it is working. (apis-explorer.appspot.com)
It looks like the API credentials are not linked to my API any more. I find it strange that you nowhere can enable or disable your own APIs (only the Google ones). The link in the error to activate the API does not work because it is a link as if it is a Google API.
Turns out there was something wrong with the backend configuration. I only replaces the appengine-web.xml with the staging configuration. But I did not change the clientID and the weblientId of the backend because they are in a file named Constants.java where I have to manually set if it is a DEV, STAGING or PRODUCTION backend (aarggh). This was still marked as DEV.
We really need a buildscript for this backend to prevent situations like this. Because I'm an Android developer I only know gradle. This project was developed by a Java developer who leaved the company and now I have to maintain this. It uses Maven so I don't know how I can make different build targets like in Android Studio where different Constants are used.
Maybe somebody here knows how I can make a simular solution like flavours in gradle with and generated BuildConfig.java Constants. That would be great.
Edit
I'm now creating maven profiles now in combination with the maven-war-plugin I can make different profiles for the different build types. This is usable for the different appengine-web.xml
See: web.xml configuration based on Maven profile
I'm now still trying too find something to include the Constants for ANDROID_CLIENT_ID and WEB_CLIENT_ID in the build script. I can't load them from a file because they have to be constants because they are used in attributes for the API's.
I generate the Contstants.java with http://www.mojohaus.org/templating-maven-plugin/. Only thing I can't get to work is that it does not generate it automaticcaly when swithing profile. I still have to manually start templating:filter-sources.
I'm currently packaging a website as a "Hosted Web App" for the Windows Store.
Is it possible to check if JavaScript, CSS and image files are already on the users devices inside the app package? This way a lot of traffic could be saved for files that don't change much after all.
Of course there would need to be a fallback to the hosted files in case the site is being called in a normal browser.
This is something that we're currently investigating and will be enabling more of in the future. Today you are able to access resources from the app package using the ms-appx-web:/// app protocol to load the resource. You can build this into your website code. We do have a security violation issue when your site is using https (as it definitely should) that we're working on resolving.
I'm developing a web app using HTML5,CSS3 and JavaScript.
Then I want to use the Apache ordova platform to generate a native android app from my web app but I still don't understand what do I need for this,specially do I need a server-side development with php for example??
First off i suggest you read this
Pretty much your app will be able to accomplish a little bit more than what you would be able to do in a browser if all you had available was the ability to write html/js*.
*by this i mean that you have access to device-specific hardware which is not available in a browser and a few more things but pretty much that's it.
You will need to install node.js (or io.js), then install cordova through npm, and make sure you have the Android SDK installed. Once you create your project, your html/css/js will be wrapped into a native webview component, you do not need any server to render it, effectively your app is a native app that can be installed from google play.
You will need a server, typically a RESTful API, if your app needs to query data remotely or persist to some third party. If you are thinking through a classic MVC mindset (render a page through some php code) then you probably need to read about cordova and how it works. A cordova app is a client-side only app, no server-side processing is possible unless through a network communication to a server you have access to on the internet. You can do persistence locally (to the android device) and even use a local database, but remember that this db exists on the device, so you won't be able to share information between users unless you somehow coordinate that through your app (and most likely a server-side app / rest api).
It is unlikely that your existing web app can be wrapped into a cordova app straight away, cordova apps are single page apps mostly.
Does anyone know if it is possible (and if so, how) to distribute a cocoa application with meteor.js and rendering it through a webview?
What I mean is that I want to launch a meteor server (or node.js) insied of my cocoa application and then with a cocoa webView show the content of what the meteor server is generating.
So the question is how to get meteor/node to be distributed together with the cocoa application so that the user doesn't have to manually install it.
You could embed a compressed archive of the server inside the application package (using copy files build phase of Xcode), and during app startup, unarchive/install/start it possibly using a combination of NSBundle/NSFileManager/NSTask apis. Your app can then view the served pages in a web view using something like http:127.0.0.1:YOUR_PORT/YOUR_APP_DIR.
I am assuming you are not providing your users with a installer (.pkg) since in that case, your installer script would be the take care of the installation part.
It's pretty ambitious, but you could try
https://github.com/rogerwang/node-webkit
http://jsapp.us/
http://browserver.org/
https://github.com/rogerwang/node-webkit
http://iceddev.github.com/blog/2012/11/05/node-js-in-chrome/
Check out Could Node.js run client side in Chrome with its native client (to be released soon) for some of the commentary. Meteor is built on top of node. Mongo I think would be the sticking point.