NativeScript中的OneSignal for Android。不要加载库

时间:2016-09-05 12:13:15

标签: android nativescript onesignal

我正在尝试在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。因此,似乎没有进口信号。现在,我卡住了。有人有任何想法吗?

1 个答案:

答案 0 :(得分:1)

看起来你已经完成了所有事情。但是,我的猜测是你忘记了很多人忽视的东西:)如果你已经建立了&amp;在app.gradle中添加lib之前,在设备/模拟器上运行此.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. 喝啤酒(希望如此)。
  5. 说真的,如果库正确安装,那应该解决问题。