[C#] APNs-Sharp batch notifications

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Avalaxy
  • Registratie: Juni 2006
  • Laatst online: 00:53
Ik probeer met behulp van de APNs-Sharp library notificaties te pushen naar Apple Push Notification Service, dit is mij gelukt. Echter kan een notification object zover ik zie maar 1 device token bevatten en dus naar slechts 1 device verstuurd worden. Dit leidt er toe dat ik voor elk device een apart notification object aan moet maken en hier doorheen moet loopen met een thread sleep van 1 seconde tussen elke verstuurde notificatie (zodat Apple het niet markeert als flooding).

Het moet echter mogelijk zijn dezelfde notification te versturen aan meerdere devices door gewoon een lijst met devices op te geven. Mij lijkt echter dat dat niet gaat lukken met het standaard Notification object van APNs-Sharp, aangezien die slechts een enkele string heeft voor het device token (geen collectie oid).

Dit is de code die ik momenteel gebruik om berichten te versturen:

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
/// <summary>
/// Sends a simple message consisting of a simple message body to one or multiple devices.
/// </summary>
/// <param name="notifications">Notification that needs to be sent, it should include the 
/// device token. Use ApnsNotification instead of Notification for unit testing purposes.</param>
/// <param name="messageBody">The message that needs to be sent.</param>
public void SendMessage(IEnumerable<ApnsNotification> notifications, string messageBody)
{
    if (notifications != null)
    {
        foreach (ApnsNotification notification in notifications)
        {
            notification.Payload.Alert.Body = messageBody;

            // Check if there is a device token and message and queue the notification.
            if (!string.IsNullOrEmpty(notification.DeviceToken) && !string.IsNullOrEmpty(messageBody) && _service.QueueNotification(notification))
            {
                notification.MessageQueued = true;
                if (log.IsDebugEnabled) log.Debug("Notification queued '" + notification + "'.");
            }
            else
            {
                notification.MessageQueued = false;
                if (log.IsDebugEnabled) log.Error("Notification failed to be queued.");
            }

            // Temporary fix to stop Apple from blocking our messages as a result of 'flooding'
            Thread.Sleep(1000);
        }
    }
}

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Ik zou eens bij de documentatie beginnen. Misschien specificeert die wel dat je in die 'string' de ID's komma-separated (of colon-separated of verzin_iets) mag specificeren. En anders heeft die method misschien wel een override?
Als dat soort mogelijkheden allemaal uitgesloten zijn kun je prima een wrapper schrijven zoals je nu hebt gedaan. Je hebt dan misschien wat meer (externe) calls naar "Apple" (of weet ik waar 't naar toe gaat), maar dat is dan maar zo.

Ik zie 't probleem eigenlijk niet zo.
Avalaxy schreef op dinsdag 06 september 2011 @ 14:11:
Het moet echter mogelijk zijn dezelfde notification te versturen aan meerdere devices door gewoon een lijst met devices op te geven. Mij lijkt echter dat dat niet gaat lukken met het standaard Notification object van APNs-Sharp, aangezien die slechts een enkele string heeft voor het device token (geen collectie oid).
Mij lijkt 't dus dat je zoiets gewoon in de documentatie moet kunnen vinden. Wat zegt die? En als 't er niet in staat dan is, denk ik, je aanname gewoon verkeerd en zul je dus inderdaad gewoon meerdere calls moeten doen.

En heb je al eens aangeklopt bij de auteurs of supportafdeling van "APNS-sharp" :? Wat zeggen die?

[edit]
Ik zie hier al meteen:
C#:
1
2
if (!string.IsNullOrEmpty(deviceToken) && deviceToken.Length != DEVICE_TOKEN_STRING_SIZE)
    throw new BadDeviceTokenException(deviceToken);

Dus "komma-separated" oid. gaat 'm sowieso al niet worden; dan hadden ze wel op een veelvoud van die lengte gecontroleerd. En een overrride voor QueueNotification lijkt er ook niet te zijn.

Tja, als 't er niet in zit zit 't er niet in.

[edit2]
Even wat Googlen leerde me dat er wel een NotificationBatch (en NotificationBatchException) is (of is geweest). Geen idee of dat is wat je zoekt, en of 't er nog in zit, maar dat kun je zelf ook prima uitzoeken als je even de moeite neemt de code (of documentatie) door te nemen.

[ Voor 76% gewijzigd door RobIII op 06-09-2011 15:24 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Avalaxy
  • Registratie: Juni 2006
  • Laatst online: 00:53
Ik snap niet echt waar je naar toe wilt door driemaal in één post te impliceren dat ik niet naar documentatie heb gezocht... Als je zelf even had gezocht dan had je gezien dat er niet eens documentatie is, maar dat er slechts 3 "testprojecten" zijn met daarin een voorbeeld hoe je de library gebruikt, maar hier wordt het versturen van batches dus niet getoond.
RobIII schreef op dinsdag 06 september 2011 @ 14:34:

Ik zie 't probleem eigenlijk niet zo.
Het probleem is dat het nogal wat tijd kost om 50.000 berichtjes te sturen met tussenpozen van 1 seconde terwijl dat ook in één keer (zonder pauze) zou kunnen.
[...]

Mij lijkt 't dus dat je zoiets gewoon in de documentatie moet kunnen vinden. Wat zegt die? En als 't er niet in staat dan is, denk ik, je aanname gewoon verkeerd en zul je dus inderdaad gewoon meerdere calls moeten doen.
Mijn aanname is niet verkeerd, Apple zegt namelijk zelf dat het kan, en Urban Airship doet het ook gewoon.
En heb je al eens aangeklopt bij de auteurs of supportafdeling van "APNS-sharp" :? Wat zeggen die?
Het is open source, dus er is geen supportafdeling. Zeker niet op korte termijn.
[edit2]
Even wat Googlen leerde me dat er wel een NotificationBatch (en NotificationBatchException) is (of is geweest). Geen idee of dat is wat je zoekt, en of 't er nog in zit, maar dat kun je zelf ook prima uitzoeken als je even de moeite neemt de code (of documentatie) door te nemen.
Had ik ook gevonden, maar dat zit er dus niet in. Ik kan wel de code copy/pasta doen en zelf een binary bouwen op goed geluk dat dat werkt, het lijkt me alleen raar dat het er niet gewoon in zit.

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Avalaxy schreef op dinsdag 06 september 2011 @ 15:01:
Ik snap niet echt waar je naar toe wilt door driemaal in één post te impliceren dat ik niet naar documentatie heb gezocht...
Dat zeg ik niet; je geeft 't alleen niet aan in je startpost dat er geen documentatie is. Dat ontdekte ik (later) ook; als je dat meteen had vermeld had 't die opmerking(en) gescheeld.
Avalaxy schreef op dinsdag 06 september 2011 @ 15:01:
Als je zelf even had gezocht dan had je gezien dat er niet eens documentatie is
Zoals gezegd: had je het even in je TS vermeld (zie onze Quickstart) dan had ik niet hoeven zoeken.
Avalaxy schreef op dinsdag 06 september 2011 @ 15:01:
Het probleem is dat het nogal wat tijd kost om 50.000 berichtjes te sturen met tussenpozen van 1 seconde terwijl dat ook in één keer (zonder pauze) zou kunnen.
Volgens Apple misschien wel, maar als "APNS-Sharp" die implementatie niet heeft zul je:
a) die zelf erin moeten bouwen ("jeej opensource!")
b) de auteurs moeten verzoeken 't in te bouwen
c) een andere library moeten zoeken die 't wél ondersteunt
In alle 3 de gevallen zie ik niet hoe wij je zouden moeten helpen.
Avalaxy schreef op dinsdag 06 september 2011 @ 15:01:
Mijn aanname is niet verkeerd, Apple zegt namelijk zelf dat het kan, en Urban Airship doet het ook gewoon.
Als Apple zegt dat 't kan wil 't niet zeggen dat derden die "API's" ook implementeren he? Ik heb geen flauw idee wat Urban Airship is en of 't APNS-Sharp gebruikt, maar misschien kun je me dat dan even vertellen? Of mag ik dat ook gaan uitpuzzelen? Als "Urban Airship" géén APNS-Sharp gebruikt zie ik niet hoe dit relevant is.
Avalaxy schreef op dinsdag 06 september 2011 @ 15:01:
Het is open source, dus er is geen supportafdeling. Zeker niet op korte termijn.
Geen supportafdeling misschien, maar wel auteurs die je kunt benaderen en tevens kun je een issue openen.
Avalaxy schreef op dinsdag 06 september 2011 @ 15:01:
het lijkt me alleen raar dat het er niet gewoon in zit.
Als 't er niet in zit zit 't er niet in. Ik zie niet hoe wij daar bij kunnen helpen anders dan 't in te bouwen :? Sterker: wat is nou precies de vraag? Want die zie ik niet in je topicstart.

[ Voor 3% gewijzigd door RobIII op 06-09-2011 15:29 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Avalaxy
  • Registratie: Juni 2006
  • Laatst online: 00:53
Alright, ik kwam er dus achter dat ik een verkeerde versie van de library had, namelijk deze package: https://github.com/Redth/APNS-Sharp/downloads. Bij doorklikken naar de repository zelf kom je echter op https://github.com/Redth/APNS-Sharp waar dus die NotificationChannel in zit, daarmee kan het inderdaad, je moet dan alleen de NotificationService vervangen door de NotificationChannel.

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
In ieder geval fijn dat je de oplossing nog even post d:)b

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij

Pagina: 1