iOS推送接收设备令牌但不使用Phonegap Build没有通知

时间:2016-02-27 19:16:29

标签: apple-push-notifications phonegap-build

我正在尝试使用PhoneGap Build实现推送通知。 我在iOS设备上收到设备令牌但未在托盘中收到通知。在这里,我的成功回调是被调用但后来回调函数没有被调用。 我在config.xml中包含了最新版本的push插件。

关于App的几点:

  1. 这是我的第一个应用

  2. 我正在使用Phonegap Build

  3. 实现它
  4. iOS设备:Iphone 6s:iOS 9

  5. Android设备:三星:Android 4.1.2

  6. 我在Android中使用以下代码接收托盘通知(虽然Android已延迟)但在我的iOS设备中没有。

  7. 如果您需要更多信息,请告诉我。

    这是javascript代码段。

    onDeviceReady: function() { 
    //alert('Inside onDeviceReady'); 
    var pushNotification = window.plugins.pushNotification; 
    //var device = window.plugins. 
    //alert ('Value of Variable Pushnotification : ' + pushNotification); 
        //alert ('Device Platform : ' + device.platform); 
    if (device.platform === 'android' || device.platform === 'Android') 
    { 
    //alert('Inside Register Call for Android'); 
    pushNotification.register(app.successHandler, app.errorHandler,{"senderID":"935585158292","ecb":"app.onNotificationGCM"}); 
    } 
    else 
    { 
    //alert('Inside Register Call for iOS'); 
    pushNotification.register(app.pg_token_handler, app.pg_error_handler, {"badge": "true","sound":"true","alert":"true","ecb":"app.on_pg_apn_notification"}); 
    } 
    }, 
    
    on_pg_apn_notification: function(event) 
    { 
    if ( event.alert ) 
    { 
    alert('Inside Alert call of APN Notification'); 
    navigator.notification.alert(event.alert); 
    } 
    
    if ( event.sound ) 
    { 
    alert('Inside sound call of APN Notification'); 
    var snd = new Media(event.sound); 
    snd.play(); 
    } 
    
    if ( event.badge ) 
    { 
    alert('Inside Badge call of APN Notification'); 
    pushNotification.setApplicationIconBadgeNumber(app.successHandler, app.errorHandler, event.badge); 
    } 
    } 
    
    } 
    

    粘贴Config.xml相关代码。

    <?xml version="1.0" encoding="UTF-8"?>
    
    <!-- config.xml reference: https://build.phonegap.com/docs/config-xml -->
    <widget xmlns     = "http://www.w3.org/ns/widgets"
            xmlns:gap = "http://phonegap.com/ns/1.0"
            id        = "com.phonegap.helloworld"
            version   = "1.0.0">
    
        <name>CalendarSync</name>
    
        <description>
            This is my first application using PhoneGap
        </description>
    
        <author href="http://phonegap.com" email="support@phonegap.com">
            Aditya Lele
        </author>
        <platform name="ios|winphone|wp8|android" />
        <!--
            If you do not want any permissions to be added to your app, add the
            following tag to your config.xml; you will still have the INTERNET
            permission on your app, which PhoneGap requires.
        -->
        <preference name="permissions"                value="none"/>
        <!-- Customize your app and platform with the preference element. -->
        <preference name="orientation"                value="default" />        <!-- all: default means both landscape and portrait are enabled -->
        <preference name="target-device"              value="universal" />      <!-- all: possible values handset, tablet, or universal -->
        <preference name="fullscreen"                 value="true" />           <!-- all: hides the status bar at the top of the screen -->
        <preference name="webviewbounce"              value="true" />           <!-- ios: control whether the screen 'bounces' when scrolled beyond the top -->
        <preference name="prerendered-icon"           value="true" />           <!-- ios: if icon is prerendered, iOS will not apply it's gloss to the app's icon on the user's home screen -->
        <preference name="stay-in-webview"            value="false" />          <!-- ios: external links should open in the default browser, 'true' would use the webview the app lives in -->
        <preference name="ios-statusbarstyle"         value="black-opaque" />   <!-- ios: black-translucent will appear black because the PhoneGap webview doesn't go beneath the status bar -->
        <preference name="detect-data-types"          value="true" />           <!-- ios: controls whether data types (such as phone no. and dates) are automatically turned into links by the system -->
        <preference name="exit-on-suspend"            value="false" />          <!-- ios: if set to true, app will terminate when home button is pressed -->
        <preference name="show-splash-screen-spinner" value="true" />           <!-- ios: if set to false, the spinner won't appear on the splash screen during app loading -->
        <preference name="auto-hide-splash-screen"    value="true" />           <!-- ios: if set to false, the splash screen must be hidden using a JavaScript API -->
        <preference name="disable-cursor"             value="false" />          <!-- blackberry: prevents a mouse-icon/cursor from being displayed on the app -->
        <preference name="android-installLocation"    value="auto" />           <!-- android: app install location. 'auto' will choose. 'internalOnly' is device memory. 'preferExternal' is SDCard. -->
        <preference name="android-build-tool"         value="gradle" /> 
        <!--
            Define a specific version of PhoneGap to build into your app.
    
        -->
        <preference name="phonegap-version"/>
    
        <!-- Plugins -->
    
        <!-- Core plugins -->
        <gap:plugin name="com.phonegap.plugins.pushplugin" version="2.5.0"/>
        <gap:plugin name="org.apache.cordova.device" spec="0.3.0" source="pgb" />
    
        <!-- Third party plugins -->
    
        <!-- A list of available plugins are available at https://build.phonegap.com/plugins -->
        <!--
            <gap:plugin name="com.phonegap.plugins.barcodescanner" />
        -->
    
        <!-- Define app icon for each platform. -->
        <icon src="icon.png" />
        <icon src="res/icon/android/icon-36-ldpi.png"   gap:platform="android"    gap:qualifier="ldpi" />
        <icon src="res/icon/android/icon-48-mdpi.png"   gap:platform="android"    gap:qualifier="mdpi" />
        <icon src="res/icon/android/icon-72-hdpi.png"   gap:platform="android"    gap:qualifier="hdpi" />
        <icon src="res/icon/android/icon-96-xhdpi.png"  gap:platform="android"    gap:qualifier="xhdpi" />
        <icon src="res/icon/blackberry/icon-80.png"     gap:platform="blackberry" />
        <icon src="res/icon/blackberry/icon-80.png"     gap:platform="blackberry" gap:state="hover"/>
        <icon src="res/icon/ios/icon-57.png"            gap:platform="ios"        width="57" height="57" />
        <icon src="res/icon/ios/icon-72.png"            gap:platform="ios"        width="72" height="72" />
        <icon src="res/icon/ios/icon-57-2x.png"         gap:platform="ios"        width="114" height="114" />
        <icon src="res/icon/ios/icon-72-2x.png"         gap:platform="ios"        width="144" height="144" />
        <icon src="res/icon/webos/icon-64.png"          gap:platform="webos" />
        <icon src="res/icon/windows-phone/icon-48.png"  gap:platform="winphone" />
        <icon src="res/icon/windows-phone/icon-173.png" gap:platform="winphone"   gap:role="background" />
    
        <!-- Define app splash screen for each platform. -->
        <gap:splash src="res/screen/android/screen-ldpi-portrait.png"       gap:platform="android" gap:qualifier="port-ldpi" />
        <gap:splash src="res/screen/android/screen-mdpi-portrait.png"       gap:platform="android" gap:qualifier="port-mdpi" />
        <gap:splash src="res/screen/android/screen-hdpi-portrait.png"       gap:platform="android" gap:qualifier="port-hdpi" />
        <gap:splash src="res/screen/android/screen-xhdpi-portrait.png"      gap:platform="android" gap:qualifier="port-xhdpi" />
        <gap:splash src="res/screen/blackberry/screen-225.png"              gap:platform="blackberry" />
        <gap:splash src="res/screen/ios/screen-iphone-portrait.png"         gap:platform="ios"     width="320" height="480" />
        <gap:splash src="res/screen/ios/screen-iphone-portrait-2x.png"      gap:platform="ios"     width="640" height="960" />
        <gap:splash src="res/screen/ios/screen-iphone-portrait-568h-2x.png" gap:platform="ios"     width="640" height="1136" />
        <gap:splash src="res/screen/ios/screen-ipad-portrait.png"           gap:platform="ios"     width="768" height="1024" />
        <gap:splash src="res/screen/ios/screen-ipad-landscape.png"          gap:platform="ios"     width="1024" height="768" />
        <gap:splash src="res/screen/windows-phone/screen-portrait.jpg"      gap:platform="winphone" />
    
        <gap:config-file platform="ios" parent="CFBundleShortVersionString">
        <string>100</string>
        </gap:config-file>
    
        <!--
            Define access to external domains.
            <access />            - a blank access tag denies access to all external resources.
            <access origin="*" /> - a wildcard access tag allows access to all external resource.
            Otherwise, you can specify specific domains:
            <access origin="http://phonegap.com" />                    - allow any secure requests to http://phonegap.com/
            <access origin="http://phonegap.com" subdomains="true" />  - same as above, but including subdomains, such as http://build.phonegap.com/
            <access origin="http://phonegap.com" browserOnly="true" /> - only allows http://phonegap.com to be opened by the child browser.
        -->
    
        <access origin="*"/>
        <!-- Added the following intents to support the removal of whitelist code from base cordova to a plugin -->
        <!-- Whitelist configuration. Refer to https://cordova.apache.org/docs/en/edge/guide_appdev_whitelist_index.md.html -->
        <plugin name="cordova-plugin-whitelist" version="1" />
            <!-- <plugin name="Device" value="org.apache.cordova.Device" spec="1.0.0" source="npm" />
        <feature name="Device">
            <param name="android-package" value="org.apache.cordova.device.Device" />
        </feature>    
    <feature name="Device">
        <param name="ios-package" value="CDVDevice" />
    </feature> -->
        <allow-intent href="http://*/*" />
        <allow-intent href="https://*/*" />
        <allow-intent href="tel:*" />
        <allow-intent href="sms:*" />
        <allow-intent href="mailto:*" />
        <allow-intent href="geo:*" />
        <platform name="android">
            <allow-intent href="market:*" />
        </platform>
        <platform name="ios">
            <allow-intent href="itms:*" />
            <allow-intent href="itms-apps:*" />
        </platform>
    
    </widget>
    

1 个答案:

答案 0 :(得分:0)

如果应用程序处于打开状态,IOS不会显示通知,因此我认为您的代码是正确的。 来自Apple Developer文档:

  

如果您的应用已位于前台,则iOS不会显示通知。

来源:Handling an Actionable Notification

我建议您在应用程序打开并收到通知时写一些自定义通知,例如弹出窗口。