(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.