【问题标题】:OneSignal for Android in NativeScript. Wont load libraryNativeScript 中用于 Android 的 OneSignal。不会加载库
【发布时间】:2016-09-05 12:13:15
【问题描述】:

我正在尝试在 Android 和 iOS 的 NativeScript 应用程序中实现 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。所以 onesignal 似乎没有被导入。现在,我卡住了。有人有什么想法吗?

【问题讨论】:

    标签: android nativescript onesignal


    【解决方案1】:

    看起来你做的一切都是正确的。但是,我的猜测是您忘记了很多人忽略的东西 :) 如果您在将 lib 添加到 app.gradle 之前已经在设备/模拟器上构建并运行了这个 .apk,那么您可能实际上并没有得到更新了设备/模拟器上的 .apk。我不知道为什么会在 Android 上发生这种情况,我想这是某种缓存,从来没有仔细研究过。

    所以你需要做的在这里概述:https://bradmartin.net/2016/07/20/ahhh-this-nativescript-plugin-doesnt-work/,我也会在这里列出步骤。

    1. 从设备/模拟器中卸载 .apk
    2. 执行tns build android 以获取新的.apk(只是为了确定)
    3. 执行tns run androidtns livesync android,将在设备/模拟器上安装更新的.apk。
    4. 喝杯啤酒(希望如此)。

    说真的,如果库确实安装正确,那应该可以解决问题。

    【讨论】:

    • 我现在只想发誓、尖叫和快乐。这已经困扰我3天了。你是完全正确的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-21
    • 2023-04-03
    相关资源
    最近更新 更多