iCulture forum | iPhone, iPad,  iPod touch, Apple TV en iOS

iCulture forum | iPhone, iPad, iPod touch, Apple TV en iOS (https://forum.iculture.nl/)
-   Ontwikkelen voor iOS (https://forum.iculture.nl/f133/development/f58/ontwikkelen-voor-ios/)
-   -   Push notificaties (https://forum.iculture.nl/f133/development/f58/ontwikkelen-voor-ios/87469-push-notificaties.html)

Dreissen 24-03-11 23:27

Push notificaties
 
Hallo,

Ik loop al een weekje te testen en proberen met push notificaties.
Dit gaat allemaal prima, mijn server werkt ook, mijn berichten komen mooi aan op mijn Iphone, allemaal prima dus en helemaal blij dat het zo makkelijk zonder problemen gelukt was.
Echter het werkte alleen omdat ik mijn "devicetoken" wist, als andere telefoons de app installeren moet dit allemaal vanzelf gaan.
Ik moet de tokens verzamelen en als ik een push wil die tokens oproepen, dit werkt allemaal maar ik krijg op de een of andere manier de token niet verzonden.

Dit is wat ik doe:

In de appdelegate staat het volgende:

PHP-code:

- (void)application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken 
    
    
NSString *str = [NSString 
                     stringWithFormat
:@"Device Token=%@",deviceToken];
    
NSLog(str);
    


Als ik nu mijn NSLog bekijk staat daar netjes de token, maar ik wil dat deze tokens naar mijn database worden gestuurd.
Daar gebruik ik de volgende code voor.

PHP-code:

- (void)application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken 
    
    
NSString *srt =[NSString stringWithFormat:@"?token=%@",deviceToken];
    
    
NSString *hostStr = @"http://www.website.nl/token.php";
    
hostStr = [hostStr stringByAppendingString:srt];
    
NSData *dataURL =  [NSData dataWithContentsOfURL: [ NSURL URLWithStringhostStr ]];    
    
NSString *serverOutput = [[NSString allocinitWithData:dataURL encodingNSASCIIStringEncoding];
    
    
    if([
serverOutput isEqualToString:@"succes"]){
        
        
//Hier komt dan een alert ofzo als het allemaal gelukt is niet belangrijk
    
}    
    


Het php bestand werkt met een simpele GET in de url geef ik de token aan en dan upload het php script naar de database, dit werkt ook allemaal prima.
Alleen gaat het fout bij de Iphone, bij het versturen van de token/oproepen van de URL.
Ook in het NSLog zie ik geen fouten alleen dat hij nu blijft hangen op "Registering for push notifications..."

Ik weet het even niet meer, jullie enig idee?

Dreissen 26-03-11 13:54

Iemand? :)

DJ14 27-03-11 12:43

Misschien dat je hier iets aan hebt (met name nummer 5 onder "Creating the iPhone Application").

Dreissen 28-03-11 00:32

Citaat:

Oorspronkelijk geplaatst door DJ14 (Bericht 656127)
Misschien dat je hier iets aan hebt (met name nummer 5 onder "Creating the iPhone Application").

Daar wordt de code opgeslagen in de NSLog en dat kan ik al, maar dat heeft alleen zin voor mijn eigen token.
Ik moet de tokens van al mijn gebruikers hebben en die verzenden.
Zie mijn voorbeeld code, maar op de een of andere manier werkt die niet.
Daar licht dus het probleem, hoe doen andere developers dat hier met push, hun tokens verzamelen?

Nikooos 28-03-11 09:35

Ik sla mijn token op in de NSUserDefaults en pas als het daadwerkelijk nodig is, verstuur ik de tokens naar de server.

Overigens haal ik wel de spaties en de <> uit de tokens die worden opgehaald. Kan goed zijn dat dat ook bij jou een probleem is? Misschien even zorgen dat je urlstring wordt omgezet en bijvoorbeeld de spaties vervangt voor %20 zoals die in een URL horen te zijn.

Dreissen 28-03-11 11:55

Citaat:

Oorspronkelijk geplaatst door psychonikeo (Bericht 656508)
Ik sla mijn token op in de NSUserDefaults en pas als het daadwerkelijk nodig is, verstuur ik de tokens naar de server.

Overigens haal ik wel de spaties en de <> uit de tokens die worden opgehaald. Kan goed zijn dat dat ook bij jou een probleem is? Misschien even zorgen dat je urlstring wordt omgezet en bijvoorbeeld de spaties vervangt voor %20 zoals die in een URL horen te zijn.

Pfoe geen idee hoe ik die < > eruit haal of spaties, met php zou me dit zijn gelukt maar met obj. :P
Kun je een beetje helpen.

Nikooos 28-03-11 12:19

Citaat:

Oorspronkelijk geplaatst door Dreissen (Bericht 656544)
Pfoe geen idee hoe ik die < > eruit haal of spaties, met php zou me dit zijn gelukt maar met obj. :P
Kun je een beetje helpen.

Ik wilde het niet meteen verklappen, misschien dat je het zelf al ergens had kunnen vinden.

Persoonlijk haal ik gewoon de spaties en de <> eruit op deze manier:
Code:

NSString *token = [[[[deviceToken description] stringByReplacingOccurrencesOfString:@"<"withString:@""]
                        stringByReplacingOccurrencesOfString:@">" withString:@""]
                      stringByReplacingOccurrencesOfString: @" " withString: @""];

maar op deze manier worden (bijna) alle tekens die niet in een URL horen, vervangen door de bijbehorende percentagetekens:
Code:

NSString *urlstring = [rawstring stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

Dreissen 28-03-11 12:31

Citaat:

Oorspronkelijk geplaatst door psychonikeo (Bericht 656555)
Ik wilde het niet meteen verklappen, misschien dat je het zelf al ergens had kunnen vinden.

Persoonlijk haal ik gewoon de spaties en de <> eruit op deze manier:
Code:

NSString *token = [[[[deviceToken description] stringByReplacingOccurrencesOfString:@"<"withString:@""]
                        stringByReplacingOccurrencesOfString:@">" withString:@""]
                      stringByReplacingOccurrencesOfString: @" " withString: @""];

maar op deze manier worden (bijna) alle tekens die niet in een URL horen, vervangen door de bijbehorende percentagetekens:
Code:

NSString *urlstring = [rawstring stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

Ja thanks, maar ik krijg hem nog steeds niet werkend nu.
Op de een of andere manier kan ik de link (zie code in begin post) niet aanroepen en dan in de URL de token meegeven.
Ik zie de fout niet, want deze code werkt wel gewoon als ik er een formulier van maak.
Hoe verzend jij je tokens dan naar de server?

Nikooos 28-03-11 19:09

Citaat:

Oorspronkelijk geplaatst door Dreissen (Bericht 656562)
Ja thanks, maar ik krijg hem nog steeds niet werkend nu.
Op de een of andere manier kan ik de link (zie code in begin post) niet aanroepen en dan in de URL de token meegeven.
Ik zie de fout niet, want deze code werkt wel gewoon als ik er een formulier van maak.
Hoe verzend jij je tokens dan naar de server?

Doe eens een NSlog van je uiteindelijke hoststring. Kan je laten zien hoe die eruit ziet? Misschien zit daar een foutje eens.

Die output kan je dan even copy-posten in je browser, om te zien of dat wel werkt.

Dit is mijn code in ieder geval voor het versturen:
Code:

NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"http://url.nl/request.php?deviceId=%@",dev]];
        NSError *error;
        NSString *results = [NSString stringWithContentsOfURL:url encoding:NSASCIIStringEncoding error:&error];


Dreissen 28-03-11 20:44

Zie bericht hieronder.

Dreissen 28-03-11 20:51

Citaat:

NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"http://website.nl/push/reg_token.php?token=%@",deviceToken]];
NSError *error;
NSString *results = [NSString stringWithContentsOfURL:url encoding:NSASCIIStringEncoding error:&error];
Dit is mijn code nu maar ik krijg de token niet.
In NSLog blijft hij hangen op "Registering for push notifications..."

Dreissen 28-03-11 21:17

Edit:

Ik laat nu eerst alles in NSLog zetten, zodat ik kan kijken wat er gebeurd.
Ik heb nu dat ik deze link krijg:

"http://www.website.nl/push/reg_token.php?token=TOKEN Verwijderd
Alleen staan er veel % in de url is dat erg?

Nikooos 28-03-11 21:18

Dus heel de didRegisterForRemoteNotificationsWithDeviceToken wordt niet aangeroepen??

Wat voor code heb je nog meer in de appdelagate?

ik neem aan dat deze er wel tussen zit?
Code:

[[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound)];

Nikooos 28-03-11 21:18

En heb je deze er ook in zitten en geeft die misschien wel wat terug?

Code:

-(void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)err {
    NSString *str = [NSString stringWithFormat:@"Error: %@",err];
    NSLog(@"%@",str);
}


Dreissen 28-03-11 21:25

Code:

        NSString *urlString = [[NSString alloc] initWithFormat:@"http://www.website.nl/push/reg_token.php?token=%@", deviceToken];
    NSString *encodedString = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
        NSString *token = [[[[[encodedString description] stringByReplacingOccurrencesOfString:@"<"withString:@""]
                        stringByReplacingOccurrencesOfString:@">" withString:@""]
                                          stringByReplacingOccurrencesOfString:@"%" withString:@""]
                      stringByReplacingOccurrencesOfString: @" " withString: @""];
       
        NSLog(@"url %@", token);

Nu werkt ie wel, zo.
Had bij NSLog nog encodedString staan en niet token. :)
Nu krijg ik een correcte link.

Maar het klopt nog niet kijk hier even na:

Code:

Mijn token even verwijderd :)
De URL is juist, maar de token erachter is niet juist op de een of andere manier.
Daaronder zie je hoe de token moet zijn dus als ik er nog geen url van heb gemaakt.

Dreissen 28-03-11 21:39

Het werkt nu ;)

Ik heb:

Code:

NSString *encodedString = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
Eruit gelaten en alleen gefilterd op spatie, < > en % :)

Thanks, met jou hulp was het niet gelukt.

Nikooos 28-03-11 21:44

Citaat:

Oorspronkelijk geplaatst door Dreissen (Bericht 656874)
Het werkt nu ;)

Ik heb:

Code:

NSString *encodedString = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
Eruit gelaten en alleen gefilterd op spatie, < > en % :)

Thanks, met jou hulp was het niet gelukt.

Ah ok, nou mooi. Maar het was ZONDER mijn hulp ook vast een keer gelukt ;)

Dreissen 28-03-11 21:59

Citaat:

Oorspronkelijk geplaatst door psychonikeo (Bericht 656877)
Ah ok, nou mooi. Maar het was ZONDER mijn hulp ook vast een keer gelukt ;)

Vast wel ja :) Maar toch bedankt!


Alle tijden zijn GMT +2. Het is nu 14:16.