9

Le nostre app sono in fase di sviluppo sia per Android che per iOS. Stiamo utilizzando AWS SNS Mobile Push per inviare messaggi a GCM e APNS. Il back-end è PHP e quindi utilizza l'SDK PHP AWS.AWS Mobile Push con utenti che possono essere registrati su più dispositivi

Fino ad ora, il nostro sistema ha salvato 1 ARN Endpoint per utente. Trasmettiamo quindi un messaggio Mobile Push direttamente a questo ARN Endpoint.

La domanda:

Sarebbe strano se un utente è connesso alla nostra applicazione su più dispositivi e non ha ricevuto le notifiche push su ognuna di esse. Quindi - dovremo cambiare qualcosa.

In che modo, in AWS Mobile Push, viene gestito il concetto di "un utente, più dispositivi (e potenzialmente più piattaforme)?

Il nostro sistema deve mantenere un'associazione uno-a-molti di User-to-EndpointARNs (ad esempio, iniziare a salvare più EndpointARN per utente in modo che possiamo inviare messaggi a tutti loro in sequenza)?

O dovrei cercare nel concetto 'argomenti' che spingono Mobile fornisce (Sono confuso qui - alcune persone usano un argomento per utente, e quindi spingere i messaggi al soggetto stesso?) ..

Infine - immagino come una domanda bonus - è normale per le persone che utilizzano il PHP SDK AWS per includere sia APNSeGCM attributi nella matrice Message payload? Non abbiamo tenuto traccia del "tipo di dispositivo utilizzato da ciascun utente". Abbiamo appena salvato un ARN Endpoint per utente. E immagino che il pensiero fosse di coprire solo tutte le nostre basi di piattaforma (APNS, APNS_SANDBOX, GCM) quando stiamo spingendo un messaggio verso un endpoint.

Ho eseguito molte ricerche sull'argomento "un utente con più dispositivi": Mobile Push con AWS SNS e in realtà i risultati non sono stati di alcuna utilità.

Aiuto per favore :(

Grazie!

+0

Penso che sia necessario inviare un messaggio separato per più dispositivi della piattaforma –

+0

@IjasAhamed pertanto, gli utenti di AWS Mobile Push in genere mantengono una tabella DB che esegue il mapping tra gli utenti e i loro ARN (multipli) degli endpoint, per supportare gli utenti che hanno installato l'app su più dispositivi? –

+0

Yah .. Penso di sì. –

risposta

0

Dopo aver inviato SNS messaggio Push, si otterrà il successo o il motivo per il fallimento. prego di controllare i log e condividere per identificare problema esatto.

Cloudwatch: SNS pubblica le metriche di Cloudwatch per il numero di messaggi pubblicati, il numero di notifiche riuscite, il numero di notifiche non riuscite e la dimensione dei dati pubblicati. Le metriche sono disponibili in base all'applicazione . Puoi accedere alle metriche di Cloudwatch tramite AWS Management Console o CloudWatch API.

indirizzamento diretto: indirizzamento diretto consente di consegnare le notifiche direttamente ad un singolo endpoint, invece di inviare messaggi identici a tutti gli abbonati di un argomento. Questo è utile se si desidera fornire messaggi mirati con precisione a ciascun destinatario. Quando si registrano token dispositivo con SNS, SNS crea un endpoint che corrisponde al token. È possibile pubblicare sull'endpoint del token proprio come si pubblica su un argomento. È possibile pubblicare direttamente il testo della notifica o un payload specifico della piattaforma che sfrutta funzionalità specifiche della piattaforma come l'aggiornamento del numero di badge della propria app. L'indirizzamento diretto è attualmente disponibile solo per gli endpoint di notifiche push.

documentazione ufficiale, "Quando si crea un argomento, Amazon SNS assegnerà un ARN unico (Amazon Resource Name) al tema.

https://aws.amazon.com/sns/faqs/

0

Non ho provato questo, ma per risolvere il problema Manterrei una mappa dell'utente cognitivo dell'utente e l'ARN dell'endpoint corrispondente per ogni app principale che definisce la transazione eseguita dall'utente Se l'endpoint esiste già, non è necessario salvarlo, ma se per questo ID utente viene visualizzato un altro endpoint ARN, salvare, aggiorna, aggiungi o associa questo nuovo endpointARN con userID in DynamoDB come attributo @Document, quindi in qualsiasi momento trasmetti a tutti gli endpointARN associati all'ID utente in DynamoDB.

I codici di esempio hub mobile mysampleapp sono utili per la manipolazione rapida. Per Android:

Prendi l'endpointARN in app come questo:

PushManager pushManager; 
    String userDeviceEndPoint; 
    pushManager = AWSMobileClient.defaultMobileClient().getPushManager(); 
    userDeviceEndPoint = pushManager.getEndpointArn(); 

È possibile aggiornare DynamoDB utilizzando l'aggiornamento Salva comportamento di ignorare se un endpoint già esistente è notato per l'utente:

DynamoDBMapper mapper = new DynamoDBMapper(ddbClient, new DynamoDBMapperConfig(DynamoDBMapperConfig.SaveBehavior.UPDATE_SKIP_NULL_ATTRIBUTES)); 

Non sono sicuro di come farlo in PHP. Spero che questa idea aiuti.

1

Ho una soluzione per questo problema, come già sapete, ARN è associato a token dispositivo singolo, quindi è necessario gestirlo per inviare push allo stesso utente con più dispositivi.

Il mio approccio è quello di creare 2 tabella nel database mysql o qualsiasi altra cosa che si sta utilizzando 1. Per APNS o, APNS_SANDBOX avere dettagli come user_id (locale), token di dispositivo, endpoint ARN, di stato ecc (EG: sns_apns) 2 . Lo stesso vale per GCM o Baidu è necessario creare una tabella con i dettagli dell'utente con endpoint ARN (EG: sns_gcm)

Ora ogni volta quando si invia spinta per un particolare utente basta scrivere un codice simile a questa

Switch($platform) { 
    case 'APNS': 
    case 'APNS_SANDBOX': 
     Select all users from sns_apns by login id. 
     Create a message and send it to all users having same user id 
    case 'GCM': 
     Select all users from sns_gcm by login id. 
     Create a message and send it to all users having same user id 
}