因此,假设有一个功能齐全的响应式ruby rails web应用程序。这个应用程序在手机上工作和看起来很棒。不幸的是,这个网络应用程序无法从手机应用程序商店中看到,因为它不是本机应用程序。从技术上讲,你可以在打开浏览器的智能手机上放置一个图标,但显然这不是最佳选择。
有没有办法创建一个本机应用程序(Android,iPhone),它本质上只是一个浏览器,没有导航栏?这个浏览器的包装器只会加载Web应用程序,其行为就像您打开浏览器一样。
我已经研究过Phonegap和Titanium这样的选项,但似乎会有大量的重写,而且资金很少。
答案 0 :(得分:14)
我真的不懂iOS,但在Android上这样做真的很容易。
首先,这是你的活动:
package com.example.my_browser;
import android.app.Activity;
import android.os.Bundle;
import android.webkit.WebView;
public class MyActivity extends Activity {
/**
* Called when the activity is first created.
*/
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
WebView browser = (WebView)findViewById(R.id.browser);
browser.loadUrl("http://google.com"); //Replace google.com with you webapp's URL
}
}
这是你的main.xml布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<WebView
android:id="@+id/browser"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
</LinearLayout>
您需要在AndroidManifest.xml中请求互联网权限:
<uses-permission android:name="android.permission.INTERNET" />
我刚刚在模拟器中对此进行了测试,但它确实有效。
答案 1 :(得分:10)
这个答案适用于iOS。
您可以在设备的主屏幕上显示您网站的图标,而无需编写一行代码(无UIWebView,无本机编码,无XCode)。
2017年更新 iPhone配置实用程序已被Apple Configurator取代,您可以从App Store免费下载。您可以按照Apple Configurator所述的相同方式创建新的配置文件,选择文件 - &gt;应用程序中的新配置文件。
答案 2 :(得分:4)
编辑2
正如@MrTJ在评论中所说。显然Apple不会让你有一个简单的“网站包装”应用程序。因此,您唯一的选择就是移植Ruby,就像我的答案描述的其余部分一样,本机移植应用程序,或者像@MrTJ这样的Web应用程序在他的回答中描述。在RESTlike Web服务的支持下本地移植它可能是最佳解决方案。 Web应用程序很好,但本机应用程序通常更好。这取决于您想要提供的用户体验类型
结束编辑2
编辑1
我需要仔细阅读。我回答了你的问题,假设你想嵌入应用程序,而无需访问互联网。如果那是不你想要做什么,那么它绝对是可能的。
只需创建一个具有webview的应用程序并加载该站点的基本URL即可。你可能想要做一个特殊版本的网站,它总是有后退按钮等,所以用户永远不会卡在你网站的一角(因为你想隐藏导航栏)。
另外,我个人不会这样做,你可以,但你可能不应该这样做。当用户没有互联网连接时,您需要处理该怎么做。当他们(可能)为他们无法在任何地方使用的应用程序付款时,你可能会让他们感到不快乐。原生应用程序倾向于销售/表现更好。
结束编辑1
很酷的问题。就我个人而言,我不是粉丝或Ruby或Rails(我更多的是Python人,但Python实际上是我对这种情况了解的原因),但无论如何这都是一个非常酷的问题。
这可能吗? 可能
这是一个好主意吗? 可能不是
是否值得付出努力? 可能不
最重要的是,Apple会让你卖掉它吗? ....也许吧,但是对于这样的事情,你不会知道直到你尝试......
使用协议与本机应用程序通信的WebView。这就像用于在浏览器中与iFrame交谈的URL哈希标记hack,或者PhoneGap用于与其WebView进行通信的协议
Ruby解释器的嵌入式版本。人们一直在iOS上使用Python和JavascriptCore解释器执行此操作。有些人会试着告诉你Apple不会让你这样做,但现在已经不再适用了。你需要专门为iOS编译Ruby,这可能很烦人,但我敢打赌,如果你的实现基于Python / Javascript实现,你最终可以使它工作。
修改强>
与此答案相关的另一个SO问题/答案
Embed a JavaScript engine in an iOS application
结束编辑
Rails的嵌入版本...祝你好运:)
在没有Web服务器的情况下触发Rails应用程序的方法(您可能无法在iPhone上本地运行apache(很难并且可能会立即崩溃),而且绝对不会在Android上运行)。您将需要以某种方式手动触发每个视图,将输出传递给字符串或文件,并将该字符串(HTML)或文件加载到WebView
在Rails应用程序中触发导航的方法。这将需要从WebView捕获链接按下(您可以在iOS上查看URL更改),并触发正确的Rails视图以生成其HTML。
Ruby和Rails都非常重。我见过的大多数实现都需要至少256mb的RAM,如果在启动时尝试使用这么多内存,iOS会立即杀死你的应用程序。 Android可能会更不优雅地处理它,并且在应用程序运行的某个时刻意外崩溃。
Android不运行本机编译代码。这意味着您将需要运行JRuby,它将为您提供以解释语言运行的解释语言(读作,慢速移动设备上的地狱)。 / p>
这需要编写更多Ruby,一些Javascript,以及更多Java或Objective-C。换句话说,不要。弄清楚你的应用程序做了什么,然后移植它。
这可能会比任何理智的开发人员想要在“简单的Web应用程序”上花费更多的努力。你学习Native开发会好得多,因为无论如何都需要完成这项工作。
答案 3 :(得分:0)
是的,对于iOS,只需加载UIWebView全屏,并将UIWebView的当前URL更改为您的网络应用的任何位置。 launching UIWebview with specific url
我对android没有任何了解,但显然它是同一个过程...在这里你去:How to set url on WebView from a xml layout file on Android?
要在iOS应用和您的网站之间进行通信,您可以使用此处提到的stringByEvaluatingJavaScriptFromString
:Passing Javascript Variable to Objective-C
要使用Android执行此操作,请参阅此问题的其他答案,他们已在答案中列出了代码。