使用浏览器包装将现有Web应用程序移动到本机电话应用程序中

时间:2013-02-22 17:40:02

标签: android iphone ios ruby-on-rails web-applications

因此,假设有一个功能齐全的响应式ruby rails web应用程序。这个应用程序在手机上工作和看起来很棒。不幸的是,这个网络应用程序无法从手机应用程序商店中看到,因为它不是本机应用程序。从技术上讲,你可以在打开浏览器的智能手机上放置一个图标,但显然这不是最佳选择。

有没有办法创建一个本机应用程序(Android,iPhone),它本质上只是一个浏览器,没有导航栏?这个浏览器的包装器只会加载Web应用程序,其行为就像您打开浏览器一样。

我已经研究过Phonegap和Titanium这样的选项,但似乎会有大量的重写,而且资金很少。

4 个答案:

答案 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)。

  1. http://www.apple.com/support/iphone/enterprise/
  2. 下载iPhone配置实用程序
  3. 启动iPhone配置实用程序,然后从左侧菜单中选择“配置文件”
  4. 在新配置文件的“常规”部分中,填写“名称”(MyWebsite应用)和标识符(com.mycompany.coolapp)。您还可以添加组织名称和说明。
  5. 向下滚动并选择“网络剪辑”部分。
  6. 在标签字段中,您可以输入将在主屏幕上显示的名称。
  7. 网址将是您网站/网络应用的网址。
  8. 选择要用作主屏幕图标的图标。使用至少114x114像素分辨率。
  9. 如果您选择“全屏”,则在您启动网络应用时,将隐藏Safari的导航栏和地址栏,以便您拥有真正的“应用”。
  10. 点击“导出”按钮。您可以决定是否签署您的个人资料(最终用户在安装您的个人资料时可以看到)。
  11. 保存.mobileconfig文件并将其上传到您的网络服务器或通过邮件发送给您的最终用户。
  12. 当最终用户在其设备上打开.mobileconfig文件时,系统会要求他安装配置文件。安装完成后,将创建一个指向您网站的主屏幕图标。
  13. 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会让你卖掉它吗? ....也许吧,但是对于这样的事情,你不会知道直到你尝试......

你需要什么

  1. 使用协议与本机应用程序通信的WebView。这就像用于在浏览器中与iFrame交谈的URL哈希标记hack,或者PhoneGap用于与其WebView进行通信的协议

  2. Ruby解释器的嵌入式版本。人们一直在iOS上使用PythonJavascriptCore解释器执行此操作。有些人会试着告诉你Apple不会让你这样做,但现在已经不再适用了。你需要专门为iOS编译Ruby,这可能很烦人,但我敢打赌,如果你的实现基于Python / Javascript实现,你最终可以使它工作。

  3. 修改
    与此答案相关的另一个SO问题/答案
    Embed a JavaScript engine in an iOS application
    结束编辑

    1. Rails的嵌入版本...祝你好运:)

    2. 在没有Web服务器的情况下触发Rails应用程序的方法(您可能无法在iPhone上本地运行apache(很难并且可能会立即崩溃),而且绝对不会在Android上运行)。您将需要以某种方式手动触发每个视图,将输出传递给字符串或文件,并将该字符串(HTML)或文件加载到WebView

    3. 在Rails应用程序中触发导航的方法。这将需要从WebView捕获链接按下(您可以在iOS上查看URL更改),并触发正确的Rails视图以生成其HTML。

    4. 问题

      1. Ruby和Rails都非常重。我见过的大多数实现都需要至少256mb的RAM,如果在启动时尝试使用这么多内存,iOS会立即杀死你的应用程序。 Android可能会更不优雅地处理它,并且在应用程序运行的某个时刻意外崩溃。

      2. Android不运行本机编译代码。这意味着您将需要运行JRuby,它将为您提供以解释语言运行的解释语言(读作慢速移动设备上的地狱)。 / p>

      3. 这需要编写更多Ruby,一些Javascript,以及更多Java或Objective-C。换句话说,不要。弄清楚你的应用程序做了什么,然后移植它。

      4. 关键学习

        这可能会比任何理智的开发人员想要在“简单的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应用和您的网站之间进行通信,您可以使用此处提到的stringByEvaluatingJavaScriptFromStringPassing Javascript Variable to Objective-C

要使用Android执行此操作,请参阅此问题的其他答案,他们已在答案中列出了代码。