0

Je veux être en mesure d'envoyer des notifications push en utilisant Titanium et Arrow Push sur Android.Appcelerator/Titanium: Impossible d'envoyer une notification push à Android

j'ai suivi les instructions ici:

Configuring Push Services

Subscribing to push notifications

Modules.CloudPush

Mon code simple se présente comme suit:

var CloudPush = require('ti.cloudpush'); 
var deviceToken = null; 

// Works fine 
CloudPush.retrieveDeviceToken({ 
    success: function() { 
     deviceToken = e.deviceToken; 
     alert('deviceToken: ' + deviceToken); 
     subscribeToChannel(); 
    }, 
    error: function() { 
     alert('Failed to register for push notifications! ' + e.error); 
    } 
}); 

// Never runs!!! 
CloudPush.addEventListener('callback', function (evt) { 
    Ti.API.info('New notification!'); 
    alert("Notification received: " + evt.payload); 
}); 

// Works fine 
function subscribeToChannel() { 
    Cloud.PushNotifications.subscribeToken({ 
     device_token: deviceToken, 
     channel: 'general', 
     type: Ti.Platform.name 
    }, function (e) { 
     if (e.success) { 
      alert('Subscribed'); 
     } else { 
      alert('Error:\n' + ((e.error && e.message) || JSON.stringify(e))); 
     } 
    }); 
} 

La plupart de ce qui précède le code est similaire aux docs. L'aspect abonnement du code semble fonctionner parfaitement, car l'appareil de l'utilisateur apparaît également dans la section des appareils du tableau de bord Appcelerator.

Cependant quand il s'agit de l'envoi d'une notification, à partir du Tableau de bord Appcelerator, le mot "Failure" apparaît à côté de mon appareil Android.

Error on push notifications

Le message d'erreur complet lorsque vous sélectionnez le "?" l'icône est la suivante:

Type d'exception: GCM; Code d'erreur: 3103; Message d'erreur: RegistrationId (s) est null ou vide; Attrapé Exception: l'argument ne peut pas être nul

Je regardais cette erreur sur http://docs.appcelerator.com/arrowdb/latest/#!/guide/troubleshooting et tout ce qu'il dit est:

Le client GCM a fourni un enregistrement nul ou vide ID. Cette erreur est rare si vous utilisez le module Modules.CloudPush.

Ce qui n'est pas utile.

Qu'est-ce que je fais mal? Est-ce un bug sur le côté Accelerator.

Répondre

0

Je ne suis pas un expert en push, mais j'ai comparé ce que vous avez à ce que j'ai dans une de mes applications. Assez sûr que vous avez besoin d'envoyer le deviceToken dans la fonction subscribeToChannel.

Essayez de changer cela -

function subscribeToChannel() { 

à cette -

function subscribeToChannel (deviceToken) { 

puis ajoutez le jeton à l'appel ici -

subscribeToChannel (deviceToken); 

Laissez-moi savoir si cela fonctionne pour vous.

-Jon

+0

Ce n'est pas le problème. Le jeton de périphérique est une variable globale est bien ici. En fait, il s'est même très bien abonné ainsi que sur la liste des appareils –

+0

Je pense que le problème est là où j'ai mes informations d'identification que la documentation semble obsolète. Où avez-vous eu le vôtre? –

+0

@YahyaUddin Ceci est un extrait des notes que j'ai prises quand j'ai travaillé l'année dernière - Créer un projet API Google La première étape consiste à créer un projet API Google et à activer son service GCM. Vous devez également obtenir un ID d'expéditeur GCM et créer une clé de serveur API Google. créer un nouveau projet à partir d'ici: https://console.developers.google.com/project GO TO API Gestionnaire de vérification des pouvoirs - créer clé API - le copier et le coller dans le tableau de bord Flèche menu, cliquez hamburger - IAM & Admin Paramètres - copier le numéro de projet - le coller dans le tableau de bord de l'Arrow Est-ce cela dont vous parlez? –

0

En fonction subscribeToChannel(), vous devez utiliser type : 'gcm' au lieu de type: Ti.Platform.name

Ceci est un module CommonJS que j'ai créé pour ma poussée Android:

function ACSPush(_callback) { 

    var debug_mode = true; 
    var Cloud = require('ti.cloud');   
    var CloudPush = require('ti.cloudpush'); 
    CloudPush.enabled = true; 
    var deviceToken; 

    CloudPush.retrieveDeviceToken({ 
     success : function deviceTokenSuccess(e) { 
      if(debug_mode) 
       Ti.API.info('Device Token: ' + e.deviceToken); 
      deviceToken = e.deviceToken; 
      if(Ti.App.Properties.getString("deviceToken") != deviceToken.toString()){ 
       defaultSubscribe(); 
      }; 
     }, 
     error : function deviceTokenError(e) { 
      if(debug_mode) 
       Ti.API.info('deviceTokenError.. :(' + e.error); 
     } 
    }); 

    function defaultSubscribe() { 
     Cloud.PushNotifications.subscribeToken({ 
      channel : 'MyChannel', 
      device_token : deviceToken, 
      type : 'gcm' 
     }, function(e) { 
      if(e.success) { 
       if(debug_mode) 
        Ti.API.info("Success registerForPushNotifications"); 
       Ti.App.Properties.setString("deviceToken", deviceToken.toString()); 
      } else { 
       if(debug_mode) 
        Ti.API.info('Error:\n' + ((e.error && e.message) || JSON.stringify(e))); 
      }; 
     }); 
    }; 

    CloudPush.addEventListener('callback', function(evt) { 
     var payload = JSON.parse(evt.payload); 
     if(debug_mode){ 
      Ti.API.info("Received a push notification\nPayload:\n" + JSON.stringify(evt.payload)); 
      Ti.API.info("payload: " + payload); 
     }; 
     _callback(payload); 
    }); 
    CloudPush.addEventListener('trayClickLaunchedApp', function(evt) { 
     if(debug_mode) 
      Ti.API.info('Tray Click Launched App (app was not running)'); 
    }); 
    CloudPush.addEventListener('trayClickFocusedApp', function(evt) { 
     if(debug_mode) 
      Ti.API.info('Tray Click Focused App (app was already running)'); 
    }); 

}; 

module.exports = ACSPush; 

De toute évidence, vous devez d'abord configurer Android Push Service http://docs.appcelerator.com/platform/latest/#!/guide/Configuring_push_services-section-src-37551713_Configuringpushservices-ConfiguringpushservicesforAndroiddevices

+0

Le type 'gcm' n'est mentionné nulle part dans les docs. Néanmoins, je l'ai essayé et ça n'a rien changé. L'erreur est toujours là. Je pense vraiment que la question est où j'ai mes informations d'identification. Comment avez-vous obtenu le vôtre car les documents sont vraiment périmés, –

+0

Vous pouvez le trouver sur https://console.cloud.google.com/home/dashboard. Vous devez créer un projet (et vous aurez l'ID de l'expéditeur), puis créer une nouvelle référence pour l'application Android (ce sera votre clé API) – astrovicApps

+0

Veuillez voir ma question connexe ici: http: // stackoverflow. com/questions/43757524/appcelerator-titanium-getting-android-credentials-to-push-notifications. Les choses ont changé à la fois sur Appcelerator et Google se termine –