- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个内置在 Unity 中的应用程序,并设置要在 Mac App Store 上发布,它的网络任务在 OS X 构建中工作得很好,这不适用于应用程序商店,但一旦构建需要 App Store 验证/协同设计联网失败。该应用程序和构建过程不久前还有效,但现在失败了。
我在权利中包含了网络权限,并且在系统控制台中没有看到任何沙盒错误的痕迹。应用内购买网络调用成功,但如果我检查终端中其他任何内容的流量,则没有数据移入或移出。
因此,我想知道是否有人对可能导致此问题的原因有任何想法,或者我可以使用进一步的测试来找出问题所在。
最佳答案
我从来没有弄清楚 Unity 的 WWW 类出了什么问题,但我能够使用 System.Net.WebClient 类解决这个问题。我实现了一个简单的包装器,它具有与 Unity 的 WWW 类类似的接口(interface)。这是我使用的代码:
using System;
using System.Net;
using System.Net.Security;
using System.Text;
/// <summary>
/// Web request using the WebClient class.
/// </summary>
/// <seealso cref="Assets.Scripts.WebRequest" />
internal class WebRequest
{
/// <summary>
/// The web client.
/// </summary>
private WebClient _client;
/// <summary>
/// The error message.
/// </summary>
private string _error;
/// <summary>
/// The is done flag.
/// </summary>
private bool _isDone;
/// <summary>
/// The progress.
/// </summary>
private float _progress;
/// <summary>
/// The text.
/// </summary>
private string _text;
/// <summary>
/// Initializes a new instance of the <see cref="WebRequest"/> class.
/// </summary>
/// <param name="url">The URL.</param>
public WebRequest(string url)
{
this._client = new System.Net.WebClient();
this._client.DownloadProgressChanged += this.WebClientProgressChanged;
this._client.DownloadStringCompleted += this.WebClientDownloadCompleted;
this._client.DownloadStringAsync(new Uri(url));
}
/// <summary>
/// Initializes a new instance of the <see cref="WebRequestDotNet"/> class.
/// </summary>
/// <param name="url">The URL.</param>
/// <param name="form">The form.</param>
public WebRequest(string url, UnityEngine.WWWForm form)
{
this._client = new System.Net.WebClient();
this._client.UploadProgressChanged += this.WebClientUploadProgressChanged;
this._client.UploadDataCompleted += this.WebClientUploadCompleted;
this._client.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded";
// Try to get the header from the Unity form
foreach (var header in form.headers)
{
const string ContentType = "Content-Type";
if (header.Key == ContentType)
{
string contentType = header.Value;
this._client.Headers.Remove(ContentType);
this._client.Headers[ContentType] = contentType;
}
}
this._client.UploadDataAsync(new Uri(url), form.data);
}
/// <summary>
/// Gets the error message. Returns null if there is no error.
/// </summary>
/// <value>
/// The error message.
/// </value>
public string Error
{
get
{
return this._error;
}
}
/// <summary>
/// Gets a value indicating whether this request is done.
/// </summary>
/// <value>
/// <c>true</c> if this instance is done; otherwise, <c>false</c>.
/// </value>
public bool IsDone
{
get
{
return this._isDone;
}
}
/// <summary>
/// Gets the progress, 0 to 1.
/// </summary>
/// <value>
/// The progress.
/// </value>
public float Progress
{
get
{
return this._progress / 100.0f;
}
}
/// <summary>
/// Gets the resulting text.
/// </summary>
/// <value>
/// The text.
/// </value>
public string Text
{
get
{
return this._text;
}
}
/// <summary>
/// Called when the download is complete.
/// </summary>
/// <param name="sender">The sender.</param>
/// <param name="e">The <see cref="DownloadStringCompletedEventArgs"/> instance containing the event data.</param>
private void WebClientDownloadCompleted(object sender, DownloadStringCompletedEventArgs e)
{
if (e.Error != null)
{
this._error = e.Error.ToString();
}
else
{
this._text = e.Result;
}
this._isDone = true;
}
/// <summary>
/// Called when the progress changes.
/// </summary>
/// <param name="sender">The sender.</param>
/// <param name="e">The <see cref="DownloadProgressChangedEventArgs"/> instance containing the event data.</param>
private void WebClientProgressChanged(object sender, DownloadProgressChangedEventArgs e)
{
this._progress += e.ProgressPercentage;
}
/// <summary>
/// Called when the upload is complete.
/// </summary>
/// <param name="sender">The sender.</param>
/// <param name="e">The <see cref="UploadValuesCompletedEventArgs"/> instance containing the event data.</param>
private void WebClientUploadCompleted(object sender, UploadDataCompletedEventArgs e)
{
if (e.Error != null)
{
this._error = e.Error.ToString();
}
else
{
this._text = Encoding.UTF8.GetString(e.Result);
}
this._isDone = true;
}
/// <summary>
/// Called when the upload progress changes.
/// </summary>
/// <param name="sender">The sender.</param>
/// <param name="e">The <see cref="UploadProgressChangedEventArgs"/> instance containing the event data.</param>
private void WebClientUploadProgressChanged(object sender, UploadProgressChangedEventArgs e)
{
this._progress += e.ProgressPercentage;
}
}
关于macos - 协同设计/打包后 OSX Mac 商店应用程序联网失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36062526/
我正在寻找一种快速开始使用可以访问相机、快速拍摄快照并将其上传到互联网站点的应用程序的方法。 由于我正在寻找 RIA 开发,我想我需要一个框架(理想情况下尽可能轻量级)。 对我和大多数读者来说,最好的
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
我一直在尝试理解 rxSwift。我面临请求问题并希望以良好的方式实现这一点。目前,我正在使用此代码: enum RequestState { case loading case lo
我正在使用 Linux epoll 工具开发一个用 C 语言编写的网络应用程序。 我确实在实现我自己的事件循环,是的,我知道有一些库可以为我做这件事。然而,这只是一个练习,我_想_自己实现事件循环。
我正在为 WatchOS 构建一个应用程序扩展,我想在 Watch 应用程序中执行一些 URL 请求。我在网络部分使用 Alamofire。 每当我做一个简单的请求时,我在模拟器和真实设备上都会收到这
我使用这个官方指南在 Windows 7 机器上设置 Docker: https://docs.docker.com/windows/started/ 我成功地从 docker hub 拉取了一个镜像
我使用的示例代码来自这个 Stack Overflow 问题 (http://stackoverflow.com/questions/3240617/cfnetwork-and-bonjour-int
在 Windows 平台上使用套接字的最佳方式是什么? 我猜是基本套接字,TCP/IP。也许是为了聊天客户端,或者只是为了学习。 谁能给我一个 WININET 用法的例子? 也许是 ftpgetfil
这是我的问题: 我写了一个可以运行的 python 脚本,但只能在我的机器上运行(当我在我的解释器中运行它时)。 我还编写了 .bat 和 .ini 文件(就像我已经为其他有效的脚本所做的那样),当我
我是一名优秀的程序员,十分优秀!