我要使用“写一次,到处运行”
所以我用create-react-app在reactjs中创建了一个PWA。
我的应用程序运行良好,可以从网站将其放在手机的主屏幕上。 但是,我也希望在移动商店中也能看到(从Google Play开始)。
我尝试过:
今天有没有办法在商店上部署reactjs PWA应用程序? 那将实现我关于渐进式Web应用程序的伟大梦想:)
答案 0 :(得分:1)
几个月前,我已经使用Cordova / Phonegap开发了一个小型的ReactJS应用程序,该应用程序实际上可以正常工作,所以我认为您会错过一些细节以便使您的应用程序正常工作。
首先,您是否在启动ReactJS之前等待了deviceready事件? 您的入口点应该是这样的(代码已经很老了,我在一个旧的AngularJS应用程序中使用了它,并对其进行了修改,以引导ReactJS)
var appName = 'myApp';
var PhoneGapInit = function (appName) {
this.boot = function (appName) {
ReactDOM.render(
<Router>
<Route exact path="*" component={ApplicationAsync} />
</Router>,
document.getElementById('root')
);
};
if (window.cordova !== undefined) {
// "Found Cordova";
var self = this;
document.addEventListener('deviceready', function() {
self.boot(appName);
}, false);
return;
}
// 'PhoneGap not found, booting manually';
this.boot(appName);
};
window.addEventListener('load', () => {
new PhoneGapInit(appName);
});
第二,使用Webpack,我发现有必要使用此Webpack插件来提供可用的cordova对象,https://github.com/markmarijnissen/webpack-cordova-plugin(在此处进行了所有说明)
此外,您的index.html应该包含这样的body标签
<body>
<noscript>
You need to enable JavaScript to run this app.
</noscript>
<div id="root"></div>
<script type="text/javascript" src="cordova.js"></script>
</body>
第一步应该足以运行您的应用程序。
另外,重要的是要知道,使用Chrome可以访问控制台以查看应用程序中正在发生的事情,只需按照以下步骤操作即可
希望有帮助
答案 1 :(得分:0)
一个简单的答案是,目前尚无办法直接将您的PWA添加到Google Play商店,Apple的iTunes或Microsoft的App Store中。但是,您可以将PWA直接添加到Amazon的App Store中。对于它们的其余部分,您必须首先为其创建包装器,然后将包装器包部署到商店。由于您是专门询问Google Play商店的,因此您基本上需要两个文件(见下文)以及一些支持文件,当您在Android Studio(或类似环境)中创建新的Android项目时,这些文件会自动为您创建。您需要一个主要活动来启动PWA起始URL,例如:
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
WebView webView = (WebView) findViewById(R.id.webview);
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setDomStorageEnabled(true);
webSettings.setDatabaseEnabled(true);
webView.setWebViewClient(new WebViewClient() {
@Override
public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
view.loadUrl("about:blank");
Toast.makeText(MainActivity.this,
"Failed loading initial resources. Online access is needed when starting the app up for the first time. Close and try again with network connectivity", Toast.LENGTH_LONG).show();
super.onReceivedError(view, request, error);
}
});
webView.loadUrl(APPLICATION_URL);
}
}
您不需要XML布局文件(只需在代码中创建WebView),但是如果您希望在xml中配置选项,则将是这样的:
<?xml version="1.0" encoding="utf-8"?>
<WebView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/webview"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.mypackage.myapp.MainActivity"/>
最后,您需要AndroidManifest.xml:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.mypackage.myapp">
<uses-permission android:name="android.permission.INTERNET"/>
<application
android:allowBackup="true"
android:icon="@mipmap/my_logo"
android:label="@string/app_name"
android:roundIcon="@mipmap/my_logo"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity"
android:configChanges="keyboardHidden|orientation|screenSize">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>
</manifest>
然后,您需要Android构建工具来创建您的程序包。如果您已经下载了Android Studio,那么一切就绪。好处是,发布包装器应用程序后,您无需对其进行太多更改,而只需专注于更新PWA。
对于Microsoft App Store,此过程类似。您不一定需要Visual Studio。您可以只使用PWABuilder的软件包作为基础,删除不需要的内容,然后create an "app package upload file" with (Windows) command-line tools。
对于iTunes,您需要另一个包装器和AFAIK,创建一个包装器的唯一方法是使用(Apple的)Xcode IDE。
答案 2 :(得分:0)
问题与未填写的create-react-app PUBLIC_URL环境变量有关。
使用cordova run browser
,一切似乎都可以,因为浏览器在路径分辨率上似乎更为宽松。
我有一个/favicon.ico
但是当我做cordova run android
时,在运行时找不到路径。
通过创建一个新文件.env
并将其放入:
PUBLIC_URL=.
解决了路径错误,该应用程序现在可以正常运行了!
Sergio在镀铬chrome://inspect
的设备上运行的建议对我有很大帮助
答案 3 :(得分:0)