phonegap-build / PushPlugin

This repository is deprecated head to phonegap/phonegap-push-plugin
https://github.com/phonegap/phonegap-plugin-push
MIT License
1.31k stars 1k forks source link

Phonegap v3.x #37

Open mwager opened 10 years ago

mwager commented 10 years ago

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

jdhiro commented 10 years ago

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 commented 10 years ago

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 commented 10 years ago

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 commented 10 years ago

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 commented 10 years ago

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

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

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

jdhiro commented 10 years ago

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

jdhiro commented 10 years ago

@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 commented 10 years ago

@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 commented 10 years ago

This should all be fixed in my pull request https://github.com/phonegap-build/PushPlugin/pull/39

mohan5070 commented 10 years ago

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 commented 10 years ago

@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 commented 10 years ago

@jdhiro Thanks. I fixed all the issues.

elsigh commented 10 years ago

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 commented 10 years ago

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 commented 10 years ago

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 commented 10 years ago

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 commented 10 years ago

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

https://github.com/mwager/atonego

neilsh commented 10 years ago

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 commented 10 years ago

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 commented 9 years ago

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 commented 9 years ago

Hi all I have the same issue.Some one can help me see the link: http://stackoverflow.com/questions/24839836/salesforce-android-app-remote-access-application-authorization

l-lawliett commented 9 years ago

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

<?xml version="1.0" encoding="UTF-8"?>

<widget xmlns = "http://www.w3.org/ns/widgets" id = "io.cordova.helloCordova" version = "2.9.0">

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 commented 9 years ago

@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 commented 9 years ago

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

l-lawliett commented 9 years ago

@mwager the post above

rch84 commented 9 years ago

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

srinivasn462 commented 8 years ago

register not defined in PushPlugin.m

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

}

/*