edit:
Probleem opgelost. Lag aan gebruik van een verkeerd provisioning profile, het APNS-profiel moet gebruikt worden bij phonegap om te builden, en niet het gewone development provisioning profile van je dev cert!!
Want, anders staat de apns permissie niet in het profiel, wat knullig dit...
Probleem opgelost. Lag aan gebruik van een verkeerd provisioning profile, het APNS-profiel moet gebruikt worden bij phonegap om te builden, en niet het gewone development provisioning profile van je dev cert!!
Want, anders staat de apns permissie niet in het profiel, wat knullig dit...
Ik probeer Apple APNS werkend te krijgen op een Phonegap app.
Om dat te bewerkstelligen heb ik de plugin phonegap-plugin-push (1.6.1) gebruikt. Allereerst heb ik de app voor Android werkend gemaakt, voor wat betreft push (met gcm).
Het aanmelden bij de server van Apple (door de app!) lukt; ik krijg een deviceId terug in de javascript functie. Dit deviceId ajax ik door naar de PHP-server.
Tot zover lukt alles, en op de iPhone wordt ook gevraagd om toestemming tot verzenden van berichten.
Als ik probeer een bericht te sturen lukt dat ook, na veel gepriegel heb ik nu een 6-liner waarmee ik i.c.m. het dashboard van Apple Developer het ssl-certificaat download en een .p12 genereer i.c.m. de private key.
Bash:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| name=developmentje # 1 - create private key openssl genrsa -out $name.key 2048 # 2a - generate csr openssl req -new -key $name.key -out $name.certSigningRequest -subj "/emailAddress=development@xxx.com, CN=xxxKey" # 2b - use csr read -n1 -r -p "====================================================================================== Go to https://developer.apple.com/account/ios/certificate/create , upload $name.certSigningRequest, download SSL-certificate to '$name.cer' .... and press enter after placing it ! " # Convert the .cer to a .pem format the APNS will understand. openssl x509 -inform der -in $name.cer -out $name.pem cat $name.pem $name.key > $name.bundle.pem # P12 for e.g. Google GCM. openssl pkcs12 -export -inkey $name.key -in $name.pem -out $name.p12 |
De server klaagt niet over het cert, maar versturen lukt niet.
Ik krijg enkel statuscode 8 op de sandbox server van apple, na verzenden.
Zelf begin ik te denken dat de client zich bij de verkeerde server aanmeldt, maar over client-side setting voor wat betreft sandbox of niet (bij de phonegap-plugin-push) , is niks te vinden... ik nam aan dat dat het probleem niet is?
Omdat ik er niet uit kwam heb ik ook geprobeerd om via Google GCM te versturen naar iOS, want daarvoor bieden zij een brug.
Dat lukte ook niet, al lukte het versturen wel zonder errors via Google. Geen bericht op de iPhone echter.
Ik verstuurde met de juiste appId van Google (SENDER_ID in config.xml voor de phonegap/cordova build), van de App die ik dus op die brug heb toegevoegd..
Wat ik ook nog geprobeerd heb is via een test-site een bericht met het pem-certificaat en deviceId te versturen, tevergeefs, ook daar error 8. PHP-script is oke en laat ik hier ook niet zien.
Eerlijk gezegd ben ik ten einde raad. Maakt het uit dat ik geen Apple Mac heb gebruikt? Nee toch?
Nou, ik hoop dat iemand een idee heeft in welke richting ik het vooral moet zoeken, of wellicht een keurig alternatief voor het verzenden van pushberichten naar iOS.
[edit] Hieronder een verkorte weergave van relevante code:
Phonegap
XML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| <?xml version="1.0" encoding="utf-8"?> <widget id="com.xx.yy" version="1.0.0" xmlns="http://www.w3.org/ns/widgets" xmlns:gap="http://phonegap.com/ns/1.0"> <engine name="android" spec="~4.1.1" /> <preference name="android-build-tool" value="gradle" /> <preference name="phonegap-version" value="cli-6.0.0" /> <plugin name="cordova-plugin-device" spec="~1.1.1" /> <gap:plugin name="cordova-plugin-device" spec="1.1.1" source="npm" /> <plugin name="phonegap-plugin-push" spec="~1.6.1"> <variable name="SENDER_ID" value="1234000000000" /> </plugin> <gap:plugin name="phonegap-plugin-push" spec="~1.6.1" source="npm"> <param name="SENDER_ID" value="1234000000000" /> </gap:plugin> <access origin="*" /> </widget> |
Client
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| var push = PushNotification.init({ android: { senderID: push_sender_id }, ios: { sandbox: true, //ergens gevonden.. geen idee. doet niks volgens mij jsCallback: mijnDeviceClass.notification, //ik denk dat deze obsolete is alert: "true", badge: "true", sound: "true", ecb: "onNotificationAPN" //? }, windows: {} }); push.on('registration', mijnDeviceClass.registered); //tot zover goed, push.on('notification', mijnDeviceClass.notification); //android ontvangt wel het bericht... push.on('error', mijnDeviceClass.error); // ik heb de daadwerkelijke notification functie (en de hele) mijnDeviceCLass weggelaten, omdat het zover niet komt |
[ Voor 58% gewijzigd door Verwijderd op 07-04-2016 18:41 . Reden: problem solved ]