Skip to content

Phonegap v3.x #37

@mwager

Description

@mwager

Is it possible to use the plugin with phongap v3.x (yet)?

I could'nt get it running, the readme.md seems not to be very helpful here.

Should I use plugman? or does the plugin need upgrading for use via the new node based cli tools? ("cordova plugin add ...")

Tested only on Android yet (phonegap 3.0 on a mac, followed manual install, using cordova-3.0.0.jar)

"adb logcat" output:

W/PluginManager(31200): THREAD WARNING: exec() call to PushPlugin.register 
blocked the main thread for 30ms. Plugin should use 
CordovaInterface.getThreadPool().

Cheers,
Michael

Activity

jdhiro

jdhiro commented on Jul 23, 2013

@jdhiro

I can't even install it via the 3.0 CLI tools =\

Error: grafting xml at selector "plugins" from "/Users/jasonfarnsworth/Dev/MobileClient/platforms/android/res/xml/config.xml" during config install went bad :(
    at /usr/local/lib/node_modules/cordova/node_modules/plugman/src/util/config-changes.js:277:47
    at Array.forEach (native)
    at /usr/local/lib/node_modules/cordova/node_modules/plugman/src/util/config-changes.js:256:63
    at Array.forEach (native)
    at /usr/local/lib/node_modules/cordova/node_modules/plugman/src/util/config-changes.js:235:45
    at Array.forEach (native)
    at Object.module.exports.add_plugin_changes (/usr/local/lib/node_modules/cordova/node_modules/plugman/src/util/config-changes.js:231:35)
    at /usr/local/lib/node_modules/cordova/node_modules/plugman/src/util/config-changes.js:321:28
    at Array.forEach (native)
    at Object.module.exports.process (/usr/local/lib/node_modules/cordova/node_modules/plugman/src/util/config-changes.js:320:49)
mwager

mwager commented on Jul 23, 2013

@mwager
Author

I now got it installed using the following command:

$ plugman --platform android --project ./platforms/android --plugin https://github.com/phonegap-build/PushPlugin.git

However, the Java Plugin (PushPlugin.java) should be modified:

From

import org.apache.cordova.api.CallbackContext;
import org.apache.cordova.api.CordovaPlugin;

To

import org.apache.cordova.CallbackContext;
import org.apache.cordova.CordovaPlugin;

I found this by looking at other Phonegap 3.0 JavaPlugins like Device.java.
I don't know if this is the best approach but now I reveive messages on real android devices.

It would be really great if the docs could be updated.

@Hiroio I somehow got around this error by adding following temporary to my android's config.xml:
Also, the plugman outputs lots of errors if files already exist. Trying delete them helped me.

<plugin></plugin>
jdhiro

jdhiro commented on Jul 23, 2013

@jdhiro

Yeah, it looks like the plugin.xml needs to be updated to avoid installation errors. At a bare minimum...

<config-file target="res/xml/config.xml" parent="plugins"> needs to be <config-file target="res/xml/config.xml" parent="/*">.

Docs are behind on the 3.0 plugin changes, so I'm looking at the core plugins as a reference. I'll try to pull together a pull request for plugin.xml changes.

Pragith

Pragith commented on Jul 23, 2013

@Pragith

This error appears on my phone:-

error: Class not found

For Android!

EDIT:
The error shown in Eclipse is:
07-23 15:26:27.720: D/PluginManager(20853): exec() call to unknown plugin: PushPlugin

I observed that the Push plugin doesn't get copied to the \platforms\android\assets\www\plugins unlike other core plugins.
I tried a lot, but I'm very confused because of the directory structure having similar names.

mwager

mwager commented on Jul 23, 2013

@mwager
Author

@Pragith Try adding the following to res/xml/config.xml:

<feature name="PushPlugin">
    <param name="android-package" value="com.plugin.gcm.PushPlugin" />
</feature>
Pragith

Pragith commented on Jul 23, 2013

@Pragith

@mwager OMG!
Thanks a lot! It worked. You don't know for how long I've been working on this issue.

jdhiro

jdhiro commented on Jul 23, 2013

@jdhiro

I just submitted a pull request for Cordova and cordova-cli 3.0 issues -- issue #39.

jdhiro

jdhiro commented on Jul 24, 2013

@jdhiro

@mwager have you had any luck with iOS? I'm not getting any errors, but the tokenHandler callback never gets fired now.

Edit 1
I'm getting this in the XCode console. I haven't been able to track down the issue yet:

2013-07-23 22:47:46.648 [11370:907] ERROR: Method 'register:' not defined in Plugin 'PushPlugin'
2013-07-23 22:47:46.650 [11370:907] -[CDVCommandQueue executePending] [Line 116] FAILED pluginJSON = [
  "PushPlugin1385651646",
  "PushPlugin",
  "register",
  [
    {
      "alert" : "true",
      "ecb" : "onNotificationAPN",
      "sound" : "true",
      "badge" : "true"
    }
  ]
]

Edit 2
From reading the 3.0 release notes, it would appear that the old signature of:

- (void)register:(NSMutableArray *)arguments withDict:(NSMutableDictionary *)options;

has been removed and needs to be replaced with something like

- (void)myMethod:(CDVInvokedUrlCommand*)command;

This is going to have to wait until tomorrow...

mwager

mwager commented on Jul 24, 2013

@mwager
Author

@Hiroio I didn't try with iOS and pg 3.0 yet since I'm focussed on Android only right now. Think I'll wait to see what's going on here...

jdhiro

jdhiro commented on Jul 29, 2013

@jdhiro

This should all be fixed in my pull request
#39

mohan5070

mohan5070 commented on Sep 4, 2013

@mohan5070

I am getting this error after excuted plugman cli and pushplugin.java:

Warning: Ignoring platform 'android-10': build.prop is missing.
Warning: Ignoring add-on 'addon-google_apis-google-14': File not found: manifest.ini

jdhiro

jdhiro commented on Sep 4, 2013

@jdhiro

@mohan5070 if I had to take a guess, it would be that the v13 support APIs are clobbering the v14 APIs that you apparently already have in your project or something. You probably have to get that sorted out in Eclipse somehow. (Sorry, I'm not going to be of much help there since I've migrated to Android Studio.)

mohan5070

mohan5070 commented on Sep 5, 2013

@mohan5070

@jdhiro Thanks. I fixed all the issues.

elsigh

elsigh commented on Oct 3, 2013

@elsigh

I had to change the tag in plugin.xml to a jsmodule tag in order to get the CLI prepare function to install the plugin to the proper location.

elsigh

elsigh commented on Oct 3, 2013

@elsigh

Also, I had to rewrite the plugin JS itself to fit to the new plugin syntax (i.e. it gets wrapped by the cordova fn and put in cordova_plugins.js)

Should I send in a pull? I think this may break backwards-compat.

every25admin

every25admin commented on Oct 17, 2013

@every25admin

Is the issue with tokenHandler callback never gets fired on iOS fixed? I tried latest install from phonegap CLI to download the plugin, but the tokenhandler is still not fired. and no error messages at all.

omeriko

omeriko commented on Nov 23, 2013

@omeriko

Guys, is it now safe to use PushPlugin on PhoneGap 3.0 and beyond on Android and iOS ?, what should i do in order to avoid issues?

mwager

mwager commented on Mar 3, 2014

@mwager
Author

If it helps, on this app everything works with the plugin, even with ios7/cordova 3.x..

https://github.com/mwager/atonego

neilsh

neilsh commented on Mar 14, 2014

@neilsh

I'd like to reiterate omeriko's question: Is it safe to use PushPlugin with PhoneGap 3.x, and are there any known undocumented caveats?

anyandallart

anyandallart commented on Mar 20, 2014

@anyandallart

i'm on 3.4 and it's working great for me. installed using CLI: cordova plugin add https://github.com/phonegap-build/PushPlugin.git

SteveChadaway

SteveChadaway commented on Jun 19, 2014

@SteveChadaway

I've downgraded to Phonegap 3.4 (20) and still unable to get this plugin working by any method. Everytime I get a class not found error. Anyone any joy or tips?

srameshsh

srameshsh commented on Jul 21, 2014

@srameshsh
l-lawliett

l-lawliett commented on Oct 21, 2014

@l-lawliett

Heh guys am getting Register call but when ever i Click it i get Class not Found I manually add the Plugin and is Deploying on my phone but It says class not Fount what should i do.
look below


Push Notification

<description>
    Push
</description>

<author href="http://cordova.io" email="dev@cordova.apache.org">
    D-Raid
</author>

<access origin="*"/>



<preference name="loglevel" value="DEBUG" />
<!--
  <preference name="splashscreen" value="resourceName" />
  <preference name="backgroundColor" value="0xFFF" />
  <preference name="loadUrlTimeoutValue" value="20000" />
  <preference name="InAppBrowserStorageEnabled" value="true" />
  <preference name="disallowOverscroll" value="true" />
-->

<feature name="App">
  <param name="android-package" value="org.apache.cordova.App"/>
</feature>
<feature name="Geolocation">
  <param name="android-package" value="org.apache.cordova.GeoBroker"/>
</feature>
<feature name="Device">
  <param name="android-package" value="org.apache.cordova.Device"/>
</feature>
<feature name="Accelerometer">
  <param name="android-package" value="org.apache.cordova.AccelListener"/>
</feature>
<feature name="Compass">
  <param name="android-package" value="org.apache.cordova.CompassListener"/>
</feature>
<feature name="Media">
  <param name="android-package" value="org.apache.cordova.AudioHandler"/>
</feature>
<feature name="Camera">
  <param name="android-package" value="org.apache.cordova.CameraLauncher"/>
</feature>
<feature name="Contacts">
  <param name="android-package" value="org.apache.cordova.ContactManager"/>
</feature>
<feature name="File">
  <param name="android-package" value="org.apache.cordova.FileUtils"/>
</feature>
<feature name="NetworkStatus">
  <param name="android-package" value="org.apache.cordova.NetworkManager"/>
</feature>
<feature name="Notification">
  <param name="android-package" value="org.apache.cordova.Notification"/>
</feature>
<feature name="Storage">
  <param name="android-package" value="org.apache.cordova.Storage"/>
</feature>
<feature name="FileTransfer">
  <param name="android-package" value="org.apache.cordova.FileTransfer"/>
</feature>
<feature name="Capture">
  <param name="android-package" value="org.apache.cordova.Capture"/>
</feature>
<feature name="Battery">
  <param name="android-package" value="org.apache.cordova.BatteryListener"/>
</feature>
<feature name="SplashScreen">
  <param name="android-package" value="org.apache.cordova.SplashScreen"/>
</feature>
<feature name="Echo">
  <param name="android-package" value="org.apache.cordova.Echo"/>
</feature>
<feature name="Globalization">
  <param name="android-package" value="org.apache.cordova.Globalization"/>
</feature>
<feature name="InAppBrowser">
  <param name="android-package" value="org.apache.cordova.InAppBrowser"/>
</feature>
<feature name="PushPlugin">
<param name="android-package" value="com.plugin.gcm.PushPlugin" />
</feature>

<plugin name="PushPlugin" value="com.plugin.gcm.PushPlugin" />
mwager

mwager commented on Oct 22, 2014

@mwager
Author

@l-lawliett maybe you should try this:

  1. remove the plugin from all platforms:

    $ cordova plugin rm com.phonegap.plugins.PushPlugin
    
  2. add it again using the cordova add command:

    cordova plugin add https://github.com/phonegap-build/PushPlugin.git
    
l-lawliett

l-lawliett commented on Oct 22, 2014

@l-lawliett

Okay am Gona try that as soon as possible got my mid term coming okay

l-lawliett

l-lawliett commented on Oct 22, 2014

@l-lawliett

@mwager the post above

rch84

rch84 commented on Apr 29, 2015

@rch84

I am new Git. Can some one provide me steps to apply patch 39 for this plugin in cordova project?

added a commit that references this issue on Sep 29, 2015
srinivasn462

srinivasn462 commented on Nov 18, 2015

@srinivasn462

register not defined in PushPlugin.m

  • (void)register:(CDVInvokedUrlCommand*)command;
    {
    self.callbackId = command.callbackId;

    NSMutableDictionary* options = [command.arguments objectAtIndex:0];

#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 80000
UIUserNotificationType UserNotificationTypes = UIUserNotificationTypeNone;
#endif
UIRemoteNotificationType notificationTypes = UIRemoteNotificationTypeNone;

id badgeArg = [options objectForKey:@"badge"];
id soundArg = [options objectForKey:@"sound"];
id alertArg = [options objectForKey:@"alert"];

if ([badgeArg isKindOfClass:[NSString class]])
{
    if ([badgeArg isEqualToString:@"true"]) {
        notificationTypes |= UIRemoteNotificationTypeBadge;

#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 80000
UserNotificationTypes |= UIUserNotificationTypeBadge;
#endif
}
}
else if ([badgeArg boolValue]) {
notificationTypes |= UIRemoteNotificationTypeBadge;
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 80000
UserNotificationTypes |= UIUserNotificationTypeBadge;
#endif
}

if ([soundArg isKindOfClass:[NSString class]])
{
    if ([soundArg isEqualToString:@"true"]) {
        notificationTypes |= UIRemoteNotificationTypeSound;

#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 80000
UserNotificationTypes |= UIUserNotificationTypeSound;
#endif
}
}
else if ([soundArg boolValue]) {
notificationTypes |= UIRemoteNotificationTypeSound;
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 80000
UserNotificationTypes |= UIUserNotificationTypeSound;
#endif
}

if ([alertArg isKindOfClass:[NSString class]])
{
    if ([alertArg isEqualToString:@"true"]) {
        notificationTypes |= UIRemoteNotificationTypeAlert;

#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 80000
UserNotificationTypes |= UIUserNotificationTypeAlert;
#endif
}
}
else if ([alertArg boolValue]) {
notificationTypes |= UIRemoteNotificationTypeAlert;
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 80000
UserNotificationTypes |= UIUserNotificationTypeAlert;
#endif
}

notificationTypes |= UIRemoteNotificationTypeNewsstandContentAvailability;

#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 80000
UserNotificationTypes |= UIUserNotificationActivationModeBackground;
#endif

self.callback = [options objectForKey:@"ecb"];

if (notificationTypes == UIRemoteNotificationTypeNone)
    NSLog(@"PushPlugin.register: Push notification type is set to none");

isInline = NO;

#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 80000
if ([[UIApplication sharedApplication]respondsToSelector:@selector(registerUserNotificationSettings:)]) {
UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UserNotificationTypes categories:nil];
[[UIApplication sharedApplication] registerUserNotificationSettings:settings];
[[UIApplication sharedApplication] registerForRemoteNotifications];
} else {
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:notificationTypes];
}
#else
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:notificationTypes];
#endif

if (notificationMessage)            // if there is a pending startup notification
    [self notificationReceived];    // go ahead and process it

}

/*

  • (void)isEnabled:(NSMutableArray *)arguments withDict:(NSMutableDictionary *)options {
    UIRemoteNotificationType type = [[UIApplication sharedApplication] enabledRemoteNotificationTypes];
    NSString *jsStatement = [NSString stringWithFormat:@"navigator.PushPlugin.isEnabled = %d;", type != UIRemoteNotificationTypeNone];
    NSLog(@"JSStatement %@",jsStatement);
    }
    */
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

      Development

      No branches or pull requests

        Participants

        @neilsh@Pragith@SteveChadaway@elsigh@mwager

        Issue actions

          Phonegap v3.x · Issue #37 · phonegap-build/PushPlugin