tvOS 中的网络应用

IT技术 javascript html web-applications apple-tv tvos
2021-03-04 01:08:28

苹果昨天发布了它的苹果电视 SDK

大多数电视应用程序都是基于网络的(html、javascript 和 css),我想将现有的电视网络应用程序移植到 tvOS。

Xcode 中的 SDK 没有像 iOS 中那样显示用于创建基于 html、javascript 和 css 的应用程序的 Webview 实现,但是,根据文档,可以使用tvjs 框架使用 javascript ,但苹果拥有自己的标记语言而不是 html用于称为TVML 的电视

我的问题是:是否可以将现有的 Web 应用程序移植到 tvOS(如何?),还是需要从头开始重新实现?

谢谢你的帮助。

6个回答

编辑:在人们继续投票之前,我将明确说明 UIWebView 存在于 Apple TV 上,但禁止使用它,因此,在 Apple TV 上加载 Web 应用程序的唯一真正方法是使用 TVML 创建它们和TVJS

如果你想使用 UIWebView(作为概念证明),你可以这样做:

目标-c

Class webviewClass = NSClassFromString(@"UIWebView");
id webview = [[webviewClass alloc] initWithFrame:self.view.frame];
NSURL * url = [NSURL URLWithString:@"https://www.google.com"];
NSURLRequest * request = [NSURLRequest requestWithURL:url];
[webview loadRequest:request];
[self.view addSubview:webview];

迅速

let webViewClass : AnyObject.Type = NSClassFromString("UIWebView")!
let webViewObject : NSObject.Type = webViewClass as! NSObject.Type
let webview: AnyObject = webViewObject.init()
let url = NSURL(string: "https://www.google.com")
let request = NSURLRequest(URL: url!)
webview.loadRequest(request)
let uiview = webview as! UIView
uiview.frame = CGRectMake(0, 0, view.frame.width, view.frame.height)
view.addSubview(uiview)

魔法!!!UIWebView那里!但是你不能用它进行迭代,只能显示网页或网页内容。

更新!我发现 github 上有很多基于https://github.com/steventroughtonsmith/tvOSBrowser的 tvOS 浏览器,但其中大部分都需要在 Xcode 应用程序上调整 Availability.h。我找到了一个使用我的方法的叉子,所以它不需要调整 Availability.h https://github.com/FabioSpacagna/tvOSBrowser 他们添加了对导航的基本支持,比如滚动和光标

我不认为苹果会批准应用程序,UIWebView因为它被标记为禁止使用,你必须学习TVMLTVJS而不是。

像这样的代码很可能会让你的应用程序被拒绝。
2021-04-21 01:08:28
是的,它需要大量的工作才能使它可用,手势识别器,委托,如果苹果可能会拒绝使用 UIWebView 的应用程序,不确定是否值得付出努力
2021-04-23 01:08:28
是的,我已经说过了,webview 在那里,但只是为了呈现 TVML,html 网站不可用,将被拒绝
2021-04-23 01:08:28
只是遥控器没有准备好,无法通过在遥控器上滑动来浏览内容,但我想这将是添加手势识别器并在 javascript 上强制事件的问题,谢谢:)
2021-05-04 01:08:28
在 Swift 中,我不能 initWithFrame webviewClass。请帮我一个主意
2021-05-08 01:08:28

根据API 差异,UIWebView 等不是 tvOS 的一部分。因此,您必须使用 Apple 的模板,使用 TVML(电视标记语言)重新实现该应用程序。或者您可以使用 UIKit 重新实现。

这是 jcesarmobile 解决方案的 Swift 版本。

    let webViewClass : AnyObject.Type = NSClassFromString("UIWebView")!
    let webViewObject : NSObject.Type = webViewClass as! NSObject.Type
    let webview: AnyObject = webViewObject.init()
    let url = NSURL(string: "https://www.google.com")
    let request = NSURLRequest(URL: url!)
    webview.loadRequest(request)
    let uiview = webview as! UIView
    uiview.frame = CGRectMake(0, 0, webDashboardView.frame.width, webDashboardView.frame.height)
    webDashboardView.addSubview(uiview)

我正在构建一个不需要通过 App Store 的企业应用程序,所以这个解决方案对我有用。

您知道使用 WKWebView 是否也可以这样做吗?一些播放器在 UIWebView 中运行不佳
2021-04-21 01:08:28
上面的代码运行良好。我需要将: webview.mediaPlaybackRequiresUserInteraction 设置为 false (默认情况下为 true)。我将 let webview 更改为 var webview .. 它说“无法分配给属性。webview 是不可变的”有什么建议吗?
2021-04-22 01:08:28
网站交互没有进展。由于我只是在我的应用程序中显示静态数据,因此这对我的需求并不重要。但是,如果有人让它工作会很好奇!
2021-04-25 01:08:28
你在网站迭代上有什么进展吗?使用此代码,您只需加载一个网站,但您根本无法导航或执行任何操作
2021-05-08 01:08:28
我知道这是一个非常古老的问题。但是我在企业应用程序中使用了这个实现.. webvivew 工作正常没有问题,直到几天后它只显示一个白色的空白屏幕。此问题无法在模拟器上重现。它在模拟器上没有问题,并且在 webivew 开始显示空白屏幕之前在部署的苹果电视上工作了几天......好像它没有加载
2021-05-08 01:08:28

UIWebView是 tvOS 的一部分,尽管目前文档看起来有点有限(请参阅此处)您还可以在此处找到 .h 文件:/Applications/Xcode-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/UIKit.framework/Headers/UIWebView.h

似乎没有包含 WebKit 框架。

更新:

在 UIWebView.h 中找到: NS_CLASS_AVAILABLE_IOS(2_0) __TVOS_PROHIBITED @interface UIWebView : UIView <NSCoding, UIScrollViewDelegate>

考虑到这一点,它可能在 tvOS 中不可用:(

不幸的是,UIWebView 不是 tvOS 支持的类。Niether 是 WKWebView。您可以在此处查看iOS 9 和 tvOS 中支持和删除的 API 的完整列表如果您向下滚动到第一部分的底部,您会看到 WebKit 说已删除。