(01-02-2025, Saat: 13:50)barissagir Adlı Kullanıcıdan Alıntı: Merhabalar, yorumlarınız çok teşekkür ederim.
Muammer hocam, Sanırım çözüm Serhat beyin dediği gibi,
ios ta ki gelen tokenın APN token muş. Onu AccessToken ile birlikte kullanıp registration_token u bulmak lazım.
Serhat bey PHP kodunda bunu yapmış. (ama ben kullanmayı beceremedim![]()
Sanırım aşağıdaki kod örneğini delphiye aktarabilirsem sorunu çözmüş olacağım.
Örnek POST isteği
https://iid.googleapis.com/iid/v1:batchImport Authorization: Bearer ya29.ElqKBGN2Ri_Uz...HnS_uNreA access_token_auth:true { "application": "com.google.FCMTestApp", "sandbox":false, "apns_tokens":[ "368dde283db539abc4a6419b1795b6131194703b816e4f624ffa12", "76b39c2b2ceaadee8400b8868c2f45325ab9831c1998ed70859d86" ] }
Örnek sonuç
HTTP 200 OK { "results":[ { "apns_token": "368dde283db539abc4a6419b1795b6131194703b816e4f624ffa12", "status": "OK", "registration_token":"nKctODamlM4:CKrh_PC8kIb7O...clJONHoA" }, { "apns_token": "76b39c2b2ceaadee8400b8868c2f45325ab9831c1998ed70859d86", "status":"Internal Server Error" }, ] }
Aşağıdaki şekilde function yazıyorum ama sonuçta token gelmiyor..Nerde hata yapıyorum acaba
function TForm1.iOsTokenAl(AccessToken,APNToken:string):string; begin with RESTClient1 do begin Accept:='application/json, text/plain; q=0.9, text/html;q=0.8,'; AcceptCharset:='utf-8, *;q=0.8'; BaseURL:='https://iid.googleapis.com/iid/v1:batchImport'; ContentType:='application/json'; end; RESTResponse1.ContentType:='application/json'; with RESTRequest1 do begin Params.Clear; Client:=RESTClient1; Method:=TRESTRequestMethod.rmPOST; Params.Add; Params[0].ContentTypeStr:=''; Params[0].Kind:=TRESTRequestParameterKind.pkHTTPHEADER; Params[0].Name:='Authorization'; Params[0].Options:=[TRESTRequestParameterOption.poDoNotEncode]; Params[0].Value:='Bearer '+AccessToken; Params.Add; Params[1].ContentTypeStr:=''; Params[1].Kind:=TRESTRequestParameterKind.pkHTTPHEADER; Params[1].Options:=[TRESTRequestParameterOption.poDoNotEncode]; Params[1].Name:='access_token_auth'; Params[1].Value:='true'; Params.Add; Params[2].ContentTypeStr:='application/json'; Params[2].Kind:=TRESTRequestParameterKind.pkREQUESTBODY; Params[2].Name:='body4F2F8D1B700A48268C02F0BEF90A6118'; Params[2].value:='{'+ '"application": "com.google.FCMTestApp",'+ '"sandbox":false,'+ '"apns_tokens":"'+APNToken+'"'+ '}'; Execute; end; Result:=RestResponse1.Content; end;
1- https://console.firebase.google.com üzerinde, iOS App oluşturmalısınız. Örneğinizde, proje adı com.google.FCMTestApp. Proje oluştururken; Delphi proje ayarlarınızda uygulamanızın adı ne ise o adı hem firebase proje adı olarak yazmalı, hem de gönderdiğiniz json içinde bu adı göndermelisiniz. Sorunun asıl kaynağı da bu olabilir.
2- Apple Developer hesabınız ile App IDs ekranında uygulamanızı seçip, uygulama özelliklerinde APNs kısmında Developer ve Production APNs sertifikalarını etkinleştirin.
3- Certificates sayfasında, oluşturduğunuz PN sertifikalarını indirip, macOS bilgisayara yükleyin.
4- macOS üzerinde, Keychain Access aracılığıyla PN sertifikalarını tek tek seç ve export edin. Böylece pem sertifikasını, p12 sertifikasına dönüştürmüş olacaksınız.
5- console.firebase/Project settings/Cloud Messaging sekmesi/APNs Certificates ekranına gidin ve buradaki development APNs certificate ve Production APNs certificate alanlarına ilgili sertifikaları yükleyin.
6- Tekrar göndermeyi deneyin ve dönen json'ı bize iletin.
Olası hata sebepleri;
1- Yukarıda belirtilen firebase ve Apple Developer konfigürasyonlarının doğru yapılmamış olması.
2- RESTRequest1; bir ve ikinci parametrelerde ContentTypeStr boş set etmişsiniz. Bu satırları silin (Params[0].ContentTypeStr:='' ve Params[1].ContentTypeStr:='' ).
3- RESTRequest1; 3. parametrede proje adının (com.google.FCMTestApp), asıl proje adı ile aynı olmaması.
4- RESTRequest1; 3. parametrede sandbox, test ortamı için true olmalıdır. Yani developer sertifikası ve test cihazınızda işlem yapıyorsanız "sandbox":true olmalıdır.
Begin : = end / 2;

