Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在何处放置新Meteor移动平台推送通知的本机代码_Meteor - Fatal编程技术网

在何处放置新Meteor移动平台推送通知的本机代码

在何处放置新Meteor移动平台推送通知的本机代码,meteor,Meteor,在使用最新1.0版本的Meteor查看了新的移动功能之后,我不认为我会在哪里修改Cordova代码以添加自定义功能。例如,我想在iOS和Android上为我的应用程序实现推送通知。在这两种情况下,我都需要编写一些本机代码,以便注册设备并接受推送通知消息 目前,我正在使用它来完成这项工作,效果非常好。我有3个分别针对Meteor、Android和iOS的项目。在后2部分中,我将本机代码放在了实现这一点所必需的位置。有一点是肯定的,您必须更新Cordova中的引导类以允许注册工作 在Meteor 1

在使用最新1.0版本的Meteor查看了新的移动功能之后,我不认为我会在哪里修改Cordova代码以添加自定义功能。例如,我想在iOS和Android上为我的应用程序实现推送通知。在这两种情况下,我都需要编写一些本机代码,以便注册设备并接受推送通知消息

目前,我正在使用它来完成这项工作,效果非常好。我有3个分别针对Meteor、Android和iOS的项目。在后2部分中,我将本机代码放在了实现这一点所必需的位置。有一点是肯定的,您必须更新Cordova中的引导类以允许注册工作

在Meteor 1.0中,我将如何使用开箱即用的移动功能来实现这一点

以下是接受Cordova的AppDelegate中所需的推送通知注册响应的objective-C代码:

- (void) application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{
    NSLog( @"Device token is: %@", deviceToken);

    // Convert to string that can be stored in DB
    NSString *regId = [[deviceToken description] stringByReplacingOccurrencesOfString:@"<" withString:@""];
    regId = [regId stringByReplacingOccurrencesOfString:@">" withString:@""];
    regId = [regId stringByReplacingOccurrencesOfString: @" " withString: @""];

    [[ApplePushNotificationService sharedInstance] application:application uploadDeviceToken:regId];
}

- (void)application:(UIApplication*)application didFailToRegisterForRemoteNotificationsWithError:(NSError*)error
{
    NSLog(@"Failed to get token, error: %@", error);
}
-(void)应用程序:(UIApplication*)应用程序DIDregisterforRemotionTificationswithDeviceToken:(NSData*)deviceToken
{
NSLog(@“设备令牌为:%@”,deviceToken);
//转换为可存储在DB中的字符串
NSString*regId=[[deviceToken description]StringByReplacingOfString:@''和String:@''的发生率;
regId=[regId stringByReplacingOccurrencesOfString:@“with string:@]”;
[[ApplePushNotificationService sharedInstance]应用程序:应用程序上载设备Token:regId];
}
-(无效)应用程序:(UIApplication*)应用程序未能注册远程通知,错误为:(N错误*)错误
{
NSLog(@“无法获取令牌,错误:%@”,错误);
}
TL;DR:cordova项目位于
.meteor/local/cordova build
子文件夹中。

默认的
AppDelegate.m
将在
.meteor/local/cordova build/platforms/ios/***您的应用程序名称***/Classes
子文件夹中创建

如果将名为
cordova build override
的顶级文件夹添加到meteor项目中,它包含的目录树将添加到构建和编译步骤之前的
.meteor/local/cordova build
文件夹中

因此,将您的自定义AppDelegate.m放入名为
cordova build override/platforms/ios/***的新文件夹中,您的APP\u NAME***/Classes

mkdir-p cordova构建覆盖/platforms/ios/foo/Classes
cp.meteor/local/cordova build/platforms/ios/foo/Classes/AppDelegate.m cordova build override/platforms/ios/foo/Classes

是(到目前为止)找到meteor cordova开发细节的最佳地点

将特定于cordova的代码放在纯javascript中。如果可能的话,最好不要修改本机代码;相反,看看你是否可以编写自己的cordova插件并从meteor应用程序中使用它。可能会做你想做的,但如果不是,你可以把它作为参考


下面的示例将从头开始创建一个使用非meteor cordova插件的新iOS应用程序

注意:这是一个简单的示例。请参阅,以获取完整的示例。下面的代码基于该插件

#创建meteor应用程序foo
流星创造福
cd-foo
#添加iOS cordova平台
meteor添加平台ios
#创建一个新的meteor包,foo camera。
#注意:您需要在此处替换您自己的meteor.com开发人员ID
meteor create——打包您的\u meteor\u开发者\u id:foo摄像头
现在,编辑
packages/your\u meteor\u developer\u id:foo-camera/package.js
文件以添加以下内容:

//在0.3.3版本中添加camera cordova插件
科尔多瓦({
'org.apache.cordova.camera':'0.3.3'
});
编辑1:这会将插件下载到cordova插件文件夹中。 您可以引用git tarball而不是版本号,例如:

Cordova.com({
'com.phonegap.plugins.facebookconnect':'https://github.com/Wizcorp/phonegap-facebook-plugin/tarball/0e61babb65bc1716b957b6294c7fdef3ce6ace79'
});

当我们进行此操作时,将代码限制为仅在客户端上运行,并导出FooCamera对象,以便在meteor javascript的其余部分中使用:

Package.onUse(函数(api){
api.versionFrom('1.0');
api.出口(‘FooCamera’);
addFiles('your_meteor_developer_id:foo camera.js','client');
});
编辑2: 如果您的cordova插件需要特殊配置,您可以在meteor应用程序的 . 它将被复制到 您的应用程序的config.xml

例如

/====mobile-config.js======
//设置PhoneGap/Cordova首选项
App.setPreference('SOME_-SPECIFIC_-PLUGIN_-KEY'、'SOME_-SPECIFIC_-PLUGIN_-VAL');
然后,应用程序的config.xml将最终导致以下结果:


接下来,编辑包中的JavaScript文件(
packages/your\u meteor\u developer\u id:foo-camera/your\u meteor\u developer\u id:foo-camera.js
)以类似流星的方式公开cordova功能。使用作为参考

(以下代码不知羞耻地从网络上窃取):

FooCamera={};
FooCamera.getPicture=函数(选项,回调){
//如果选项未通过
如果(!回调){
回调=选项;
选项={};
}
var success=函数(数据){
回调(null,“数据:图像/jpeg;base64,”+数据);
};
var故障=功能(错误){
回调(newmeteor.Error(“cordoverror”,Error));
};
//在这里调用cordova插件,并将结果传递给回调函数。
navigator.camera.getPicture(成功、失败、,
_.扩展(选项){
质量:选项。质量| | 49,
targetWidth:options.width | | 640,
targetLight:options.height | | 480,
destinationType:Camera.destinationType.DATA\u URL
})
);
};
现在,将您的新(本地)软件包添加到meteor应用程序中

流星添加
tail -f .meteor/local/cordova-build/platforms/ios/cordova/console.log
cd packages/your_meteor_developer_id\:foo-camera
meteor publish