NativeScript 中 Android 的 OneSignal。不会加载库
OneSignal for Android in NativeScript. Wont load library
我正在尝试在我的 NativeScript 应用程序中为 Android 和 iOS 实施 OneSignal 推送通知。 iOS 我让它在 CocoaPods 上工作得很好。但是,当我尝试为 Android 编译 OneSignal 包时,我无法访问 com.onesignal。
首先,我已将此添加到我的 App_Resources/Android/App。gradle:
dependencies {
compile 'com.onesignal:OneSignal:3.+@aar'
compile 'com.google.android.gms:play-services-gcm:+'
compile "com.google.android.gms:play-services-location:+"
}
android {
defaultConfig {
generatedDensities = []
applicationId = "<HIDDEN>"
multiDexEnabled true
manifestPlaceholders = [manifestApplicationId: "<HIDDEN>", onesignal_app_id: "<HIDDEN>", onesignal_google_project_number: "<HIDDEN>"]
}
aaptOptions {
additionalParameters "--no-version-vectors"
}
}
我有 运行 命令 tns build android
这给了我这一行::prepareComOnesignalOneSignal311Library UP-TO-DATE
我的 app.js 看起来像这样:
var application = require("application");
application.on(application.launchEvent, function (args) {
if (args.android) {
console.dump(com.onesignal.OneSignal);
}
});
// iOS specific configuration
if (application.ios) {
var __extends = this.__extends || function (d, b) {
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
function __() { this.constructor = d; }
__.prototype = b.prototype;
d.prototype = new __();
};
var appDelegate = (function (_super) {
__extends(appDelegate, _super);
function appDelegate() {
_super.apply(this, arguments);
}
appDelegate.prototype.applicationDidFinishLaunchingWithOptions = function (application, launchOptions) {
OneSignal.initWithLaunchOptionsAppId(launchOptions, '<HIDDEN>');
//console.dump(OneSignal);
OneSignal.sendTagValue('route', 599);
};
appDelegate.ObjCProtocols = [UIApplicationDelegate];
return appDelegate;
})(UIResponder);
application.ios.delegate = appDelegate;
}
application.start({ moduleName: "main-page" });
当 运行 启动应用程序时,模拟器只给我一个白屏,显示以下内容,告诉我 com.onesignal 为空:
Unhandled Exception
java.lang.RuntimeException: Unable to start activity ComponentInfo{no.trv.tommeplan/com.tns.NativeScriptActivity}: com.tns.NativeScriptException:
Calling js method onCreate failed
TypeError: Cannot read property ‘OneSignal’ of undefined
File: «/data/data/no.trv.tommeplan/files/app/app.js, line: 5, column:31...
所以基本上,当转储 com
时,对象只包含 com.android、com.app 和 com.tns。所以似乎没有导入一个信号。现在,我卡住了。有人有什么想法吗?
看起来你做对了所有事情。但是,我的猜测是您忘记了很多人忽略的东西 :) 如果您在 app.gradle
中添加库之前在 device/emulator 上构建了 & 运行 这个 .apk,则有一个您实际上并没有在 device/emulator 上获得更新的 .apk。我不知道为什么会在 Android 上发生这种情况,我想这是某种缓存,从来没有仔细研究过。
因此,您需要做的事情已在此处概述:https://bradmartin.net/2016/07/20/ahhh-this-nativescript-plugin-doesnt-work/,我还将在此处列出步骤。
- 从 device/emulator
中卸载 .apk
- 执行
tns build android
以获得新的 .apk(只是为了确定)
- 执行
tns run android
或 tns livesync android
,这将在 device/emulator. 上安装更新的 .apk
- 来杯啤酒(希望如此)。
说真的,如果库确实安装正确,那应该可以解决问题。
我正在尝试在我的 NativeScript 应用程序中为 Android 和 iOS 实施 OneSignal 推送通知。 iOS 我让它在 CocoaPods 上工作得很好。但是,当我尝试为 Android 编译 OneSignal 包时,我无法访问 com.onesignal。
首先,我已将此添加到我的 App_Resources/Android/App。gradle:
dependencies {
compile 'com.onesignal:OneSignal:3.+@aar'
compile 'com.google.android.gms:play-services-gcm:+'
compile "com.google.android.gms:play-services-location:+"
}
android {
defaultConfig {
generatedDensities = []
applicationId = "<HIDDEN>"
multiDexEnabled true
manifestPlaceholders = [manifestApplicationId: "<HIDDEN>", onesignal_app_id: "<HIDDEN>", onesignal_google_project_number: "<HIDDEN>"]
}
aaptOptions {
additionalParameters "--no-version-vectors"
}
}
我有 运行 命令 tns build android
这给了我这一行::prepareComOnesignalOneSignal311Library UP-TO-DATE
我的 app.js 看起来像这样:
var application = require("application");
application.on(application.launchEvent, function (args) {
if (args.android) {
console.dump(com.onesignal.OneSignal);
}
});
// iOS specific configuration
if (application.ios) {
var __extends = this.__extends || function (d, b) {
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
function __() { this.constructor = d; }
__.prototype = b.prototype;
d.prototype = new __();
};
var appDelegate = (function (_super) {
__extends(appDelegate, _super);
function appDelegate() {
_super.apply(this, arguments);
}
appDelegate.prototype.applicationDidFinishLaunchingWithOptions = function (application, launchOptions) {
OneSignal.initWithLaunchOptionsAppId(launchOptions, '<HIDDEN>');
//console.dump(OneSignal);
OneSignal.sendTagValue('route', 599);
};
appDelegate.ObjCProtocols = [UIApplicationDelegate];
return appDelegate;
})(UIResponder);
application.ios.delegate = appDelegate;
}
application.start({ moduleName: "main-page" });
当 运行 启动应用程序时,模拟器只给我一个白屏,显示以下内容,告诉我 com.onesignal 为空:
Unhandled Exception
java.lang.RuntimeException: Unable to start activity ComponentInfo{no.trv.tommeplan/com.tns.NativeScriptActivity}: com.tns.NativeScriptException:
Calling js method onCreate failed
TypeError: Cannot read property ‘OneSignal’ of undefined
File: «/data/data/no.trv.tommeplan/files/app/app.js, line: 5, column:31...
所以基本上,当转储 com
时,对象只包含 com.android、com.app 和 com.tns。所以似乎没有导入一个信号。现在,我卡住了。有人有什么想法吗?
看起来你做对了所有事情。但是,我的猜测是您忘记了很多人忽略的东西 :) 如果您在 app.gradle
中添加库之前在 device/emulator 上构建了 & 运行 这个 .apk,则有一个您实际上并没有在 device/emulator 上获得更新的 .apk。我不知道为什么会在 Android 上发生这种情况,我想这是某种缓存,从来没有仔细研究过。
因此,您需要做的事情已在此处概述:https://bradmartin.net/2016/07/20/ahhh-this-nativescript-plugin-doesnt-work/,我还将在此处列出步骤。
- 从 device/emulator 中卸载 .apk
- 执行
tns build android
以获得新的 .apk(只是为了确定) - 执行
tns run android
或tns livesync android
,这将在 device/emulator. 上安装更新的 .apk
- 来杯啤酒(希望如此)。
说真的,如果库确实安装正确,那应该可以解决问题。