Meteor Mobile App无法连接到服务器

时间:2016-08-09 13:03:18

标签: android ios cordova meteor mobile

我在使用android,ios和iOS模拟器连接到我的服务器时遇到了一系列问题。经过几天的关闭再次开始寻找解决方法。我每次都靠近但仍然无法完全连接。我有Iron:Router,可以访问任何不需要登录的页面,但是一旦我尝试注册或登录它'冻结',并且在调试过程中它说它无法连接。

尝试

1。具体DDP_DEFAULT_CONNECTION

在/server/lib/config.js

Meteor.startup(function() {

    var theURL = "http://myUrl.com:3000";

    if (process.env.NODE_ENV === "development") {
        theURL = "http://101.ipaddress.0.0:3000";
    }

    Meteor.absoluteUrl.defaultOptions.rootUrl = theURL;
    process.env.ROOT_URL = theURL;
    process.env.MOBILE_ROOT_URL = theURL;
    process.env.MOBILE_DDP_URL = theURL;
    process.env.DDP_DEFAULT_CONNECTION_URL = theURL;

});

经过一些修补,之后我转发了CORS问题。我通过这样做解决了

2。 CORS和App.access

在mobile-config.js

App.accessRule('http://*');
App.accessRule('https://*');

然后这又带给我另一个与iOS安全传输相关的错误,这个错误来自xcode 8我相信吗?我通过

解决了这个问题

3。更改应用传输安全设置

在xCode中的信息选项卡:在App Transport Security下添加“允许任意加载”:“true”

enter image description here

建议的步骤

我还找到了一个很好的小块来控制日志连接状态。

if(Meteor.isClient){
  Meteor.autorun(function () {
    var stat;
    if (Meteor.status().status === "connected") {
        stat = 'lime'
    }else if (Meteor.status().status === "connecting") {
        stat = 'yellow'
    }else {
        stat = 'red';
    }
    Session.set('status',stat);
  });
}

console.log(Session.get('status'));

这与注册按钮相关联,每次点击它都会触发状态。它总是'红色'。

Safari调试器说我无法连接。

连接步骤

meteor run ios-device --mobile-server 101.ipaddress:3000

然后我点击运行按钮。我已经阅读了热代码推送问题,并且通常会删除'.meteor / local / bundler-cache'&& '科尔多瓦建造'

我遇到了障碍,并希望得到一些关于下一个解决方案的帮助/建议(或者我可能从根本上跳过一些非常烦人但同时又快乐的东西)。

额外信息

Meteor版本尝试了1.2.1& 1.3 mup.json

{
  // Server authentication info
  "servers": [
    {
      "host": "101.ipaddress.0.1",
      "username": "username",
      //"password": "password",
      // or pem file (ssh based authentication)
      // WARNING: Keys protected by a passphrase are not supported
      "pem": "ssh/directory",
      "pem": "ssh/directory",
      "env": {}
    }
  ],

  // Install MongoDB on the server. Does not destroy the local MongoDB on future setups
  "setupMongo": true,

  // Application name (no spaces).
  "appName": "AppName",

  // Location of app (local directory). This can reference '~' as the users home directory.
  // i.e., "app": "~/Meteor/my-app",
  // This is the same as the line below.
  "app": "/directory/to/app",

  // Configure environment
  // ROOT_URL must be set to your correct domain (https or http)
  "env": {
    "PORT": 80,
    "ROOT_URL": "http://domainNameURL.com",
    "MOBILE_ROOT_URL": "http://domainNameURL.com"
  },

  // Meteor Up checks if the app comes online just after the deployment.
  // Before mup checks that, it will wait for the number of seconds configured below.
  "deployCheckWaitTime": 60,

  // show a progress bar while uploading. 
  // Make it false when you deploy using a CI box.
  "enableUploadProgressBar": true
}

2 个答案:

答案 0 :(得分:1)

虽然我的回答可能无法解决问题的根源,但它有望帮助您完成调试过程。

显示当前连接状态的postet代码段不是被动的。 console.log(Session.get('status'));不在被动上下文中,这意味着它不会更新Session变量的更改。这就是为什么它只记录初始值red。 将代码更改为以下内容以使其成为被动的:

if(Meteor.isClient){
  Meteor.autorun(function () {
    var stat;
    if (Meteor.status().status === "connected") {
        stat = 'lime'
    }else if (Meteor.status().status === "connecting") {
        stat = 'yellow'
    }else {
        stat = 'red';
    }
    console.log('status', stat);
  });
}

答案 1 :(得分:0)

我无法使用1.2.1版复制新版本的错误。

然而,可能会导致一些问题:

[ip]:[port] 不是我实际测试连接的方式。对我来说,构建应用程序并让它在设备和模拟器上运行的最成功的方法是

meteor build <directory> ios --mobile-server <ipaddress>

注意没有[port]。

当我为苹果构建时,我使用

meteor run ios-device --mobile-server 101.ipaddress.1

然后点击产品&gt;存档

部署我正在使用mupx     mupx deploy

Meteor的部署/编译过程可能是一团糟,因为我第一次尝试上传apk时它给了我在mobile-config.js中设置的实际数字,即版本0.0.7,但之后每次尝试连接8在末尾。即如果我有0.0.1它是18,而0.0.2它是28.这甚至是

App.setPreference('android-versionCode', '7');
App.setPreference('android-targetSdkVersion', '23')

设置。这是令人失望的,因为它看起来像是一个快速构建的Web应用程序。我很高兴能在手机上测试它,以便遇到很多问题。

总结一下。建立了一个新的流星1.2应用程序。然后手动添加我的所有包。之后,我复制并粘贴了我的客户端,lib和服务器文件夹。我现在可以注册并登录,并使用上面的编码片段显示活动连接。