0

Ich möchte in der Lage sein, Push-Benachrichtigungen mit Titanium und Arrow Push auf Android zu senden.Appcelerator/Titanium: Kann keine Push-Benachrichtigung an Android senden

Ich habe die Anweisungen hier folgen:

Configuring Push Services

Subscribing to push notifications

Modules.CloudPush

Mein einfachen Code sieht wie folgt aus:

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))); 
     } 
    }); 
} 

der oben meisten Code ähnelt den Dokumenten. Der Subskriptionsaspekt des Codes scheint einwandfrei zu funktionieren, da das Gerät des Benutzers auch im Gerätebereich des Appcelerator-Dashboards angezeigt wird.

Wenn es jedoch zu kommt, sendet eine Meldung aus dem Appcelerator-Dashboard das Wort "Fehler" neben meinem Android-Gerät.

Error on push notifications

Die vollständige Fehlermeldung, wenn Hervorhebung der "?" Symbol ist wie folgt:

Ausnahmetyp: GCM; Fehlercode: 3103; Fehlermeldung: RegistrationId (s) ist null oder leer; Catched Ausnahme: Argument kann nicht

Ich sah diesen Fehler null bis auf http://docs.appcelerator.com/arrowdb/latest/#!/guide/troubleshooting und alles was man sagt, ist:

Der GCM-Client eine null oder leer Registrierungs-ID versehen. Dieser Fehler ist ungewöhnlich, wenn Sie das Module.CloudPush-Modul verwenden.

Das ist nicht hilfreich.

Was mache ich falsch? Ist das ein Fehler auf der Accelerator-Seite?

Antwort

0

Ich bin kaum ein Experte mit Push, aber ich habe verglichen, was Sie haben, was ich in einer meiner Apps habe.

Ziemlich sicher, dass Sie das deviceToken in die subscribeToChannel-Funktion senden müssen.

Versuchen Sie, diese zu ändern -

function subscribeToChannel() { 

dazu -

function subscribeToChannel (deviceToken) { 

dann das Token an den hier Anruf hinzufügen -

subscribeToChannel (deviceToken); 

Lassen Sie mich wissen, ob das für Sie arbeitet.

-Jon

+0

Das ist nicht das Problem. Das Geräte-Token ist eine globale Variable, die hier in Ordnung ist. In der Tat hat es sogar gut abonniert sowie es ist auf der Geräteliste –

+0

Ich denke, das Problem ist, wo ich meine Anmeldeinformationen bekam, da die Dokumentation veraltet scheint. Wo hast du deine bekommen? –

+0

@YahyaUddin Dies ist ein Ausschnitt aus den Notizen, die ich im letzten Jahr gemacht habe - Ein Google API-Projekt erstellen Der erste Schritt besteht darin, ein Google API-Projekt zu erstellen und dessen GCM-Dienst zu aktivieren. Sie müssen außerdem eine GCM-Absender-ID abrufen und einen Google API-Serverschlüssel erstellen. ein neues Projekt von hier erstellen: https://console.developers.google.com/project GO TO API-Manager Credentials - API-Schlüssel erstellen - kopieren und in das Hamburger Menü Pfeil Armaturenbrett Klick einfügen - IAM & Admin Einstellungen - Kopieren Sie die Projektnummer - fügen Sie diese in das Arrow-Dashboard ein Ist es das, worauf Sie sich beziehen? –

0

Auf subscribeToChannel() Funktion geben Sie type : 'gcm' statt type: Ti.Platform.name

Diese verwenden sollte, ist ein Commonjs Modul, das ich für mein Android Push erstellt:

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; 

Offensichtlich müssen Sie zuerst Konfigurieren Sie Android Push Service http://docs.appcelerator.com/platform/latest/#!/guide/Configuring_push_services-section-src-37551713_Configuringpushservices-ConfiguringpushservicesforAndroiddevices

+0

Der Typ 'gcm' wird nirgendwo in der Dokumentation erwähnt. Nichtsdestotrotz versuchte ich es und es änderte nichts. Der Fehler ist immer noch da. Ich glaube wirklich, das Problem ist, wo ich meine Referenzen bekommen habe. Wie haben Sie Ihre erhalten, da die Dokumente wirklich veraltet sind? –

+0

Sie finden sie unter https://console.cloud.google.com/home/dashboard. Sie müssen ein Projekt erstellen (und Sie haben die Absender-ID) und müssen dann ein neues Credential für App Android erstellen (dies ist Ihr API-Schlüssel) – astrovicApps

+0

Bitte lesen Sie meine verwandte Frage hier: http: // stackoverflow. com/questions/43757524/appcelerator-titan-bekommen-android-credentials-to-push-benachrichtigungen. Die Dinge haben sich sowohl auf Appcelerator als auch auf Google geändert. –

Verwandte Themen