Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
iOS Bildirim hakkında
#11
(30-01-2025, Saat: 18:11)barissagir Adlı Kullanıcıdan Alıntı:
(30-01-2025, Saat: 17:03)RAD Coder Adlı Kullanıcıdan Alıntı: Sorunun çözümü zorlaşıyor. 
Adım adım gitmemiz gerekiyor. 
İlk hatayı aştınız mı, yoksa aynı hata mı geliyor.
Çünkü bu hata ile sertifikanın bir ilgisi yok.

Hayir hocam. Aynı hatayı aliyorum. Uses kismindan ios firebase kutuphanesini kaldirinca sorun cozuluyor ama ekleyince hata veriyor.

FCM için Kastri bileşen setini kullanmışsınız (PromisesObjC Hatası). Delphi sürümü veya FirebaseSDK sürümü (bu bileşen firebase sdk'yı manuel kurduruyor) uyumsuz. Delphi sürümünüze uygun bir FirebaseSDk kurmalısınız yada harici bileşen kullanmayın. 
Delphi'inin kendi kütüphaneleri ile işlem yapın.  Delphi bileşenleri Firebase IOS SDK kullanmaz. PAServer aracılığıyla doğrudan macOS/XCode üzerinden lokale alır ve kullanır.
Kastri ile devam edecekseniz; bu sorunu kendisine bildirebilirsiniz (DrlphiWorlds).
Begin : = end / 2;
Cevapla
#12
Cevaplariniz icin cok tesekkur ederim. Ben herseyi sifirdan kurarak yeniden deneyeyim.
Cevapla
#13
(31-01-2025, Saat: 09:20)RAD Coder Adlı Kullanıcıdan Alıntı:
(30-01-2025, Saat: 18:11)barissagir Adlı Kullanıcıdan Alıntı: Hayir hocam. Aynı hatayı aliyorum. Uses kismindan ios firebase kutuphanesini kaldirinca sorun cozuluyor ama ekleyince hata veriyor.

FCM için Kastri bileşen setini kullanmışsınız (PromisesObjC Hatası). Delphi sürümü veya FirebaseSDK sürümü (bu bileşen firebase sdk'yı manuel kurduruyor) uyumsuz. Delphi sürümünüze uygun bir FirebaseSDk kurmalısınız yada harici bileşen kullanmayın. 
Delphi'inin kendi kütüphaneleri ile işlem yapın.  Delphi bileşenleri Firebase IOS SDK kullanmaz. PAServer aracılığıyla doğrudan macOS/XCode üzerinden lokale alır ve kullanır.
Kastri ile devam edecekseniz; bu sorunu kendisine bildirebilirsiniz (DrlphiWorlds).

merhabalar, Hocam Delphide yeni bir proje oluşturdum.
Tüm sertifika işlerini yeniden yaptım.
Yeni uygulamada o hatayı artık almıyorum.
Programı iphonumda çalıştırdım ve Cihaz tokenını aldım.

şimdi FireBase sayfasından Test mesajı gönderiyorum ama gelen bişey yok.

Başka ne eksik olabilir?
Cevapla
#14
Merhabalar

Şöyle bir google taraması yaptım, bende ios yok.

Apple Developer'daki Team ID (prefix) projenizdeki ile aynı mı kontrol etmek isteyebilirsiniz diyor. Umarım işe yarar bir bilgidir.
Saygılarımla
Muharrem ARMAN

guplouajuixjzfm15eqb.gif
Cevapla
#15
Merhaba,

IOS tarafında elde ettiğiniz token bilgisi 64 karakter uzunluğunda olmalı. Bunu FCM için uygun hale getirmeniz gerekir.

Daha önce burada php tarafında yapmıştım.
https://www.delphican.com/showthread.php...0#pid56130
Cevapla
#16
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  Sad

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;
Cevapla
#17
(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  Sad

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;
Cevapla
#18
Hocam kodumu dediğiniz gibi değiştirdim.

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].Kind:=TRESTRequestParameterKind.pkHTTPHEADER;
          Params[0].Name:='Authorization';
          Params[0].Options:=[TRESTRequestParameterOption.poDoNotEncode];
          Params[0].Value:='Bearer '+AccessToken;

          Params.Add;
          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.ornek.iosbildirim",'+
                           '"sandbox":true,'+
                            '"apns_tokens":"'+APNToken+'"'+

                             '}';



          Execute;
          end;

           Result:=RestResponse1.Content;
 end;

Apple da kitapta denilenleri harfiyen yapmıştım.

   


Firebase ayarları şöyle

   
   

Access Token ı   https://developers.google.com/oauthplayground/ adresinden alıyorum.

   



Sonuç olarak hep,

<H1>Unauthorized</H1>
<H2>Error 401</H2>


hatasını alıyorum.
Cevapla
#19
Merhaba,

Sanırım siz FCM üzerindeki değişikliği tam olarak anlamadınız. Benim de php tarafında yapmamın sebebi direkt destek olmasından ötürü. Konumda bahsettiğim fcm paneli üzerinden json dosyasına sahip olmanız gerekiyor. artık tek bir token ile işlem yapamıyorsunuz. Delphi tarafında da o jsonu parse edip istenilen kısmı yollayan bir fonksyion yazamadım. Bunu php üzerindeki Fcm kütüphaneleri otomatik yapıyor.
attachment.php?aid=2776
Cevapla
#20
(03-02-2025, Saat: 15:32)Mr.X Adlı Kullanıcıdan Alıntı: Merhaba,

Sanırım siz FCM üzerindeki değişikliği tam olarak anlamadınız. Benim de php tarafında yapmamın sebebi direkt destek olmasından ötürü. Konumda bahsettiğim fcm paneli üzerinden json dosyasına sahip olmanız gerekiyor. artık tek bir token ile işlem yapamıyorsunuz. Delphi tarafında da o jsonu parse edip istenilen kısmı yollayan bir fonksyion yazamadım. Bunu php üzerindeki Fcm kütüphaneleri otomatik yapıyor.
attachment.php?aid=2776

Hocam burdaki dosya access token almanızı sağlamıyor mu?
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Orange Ui Page Control Hakkında nurah 3 567 30-10-2025, Saat: 09:17
Son Yorum: RAD Coder
  Firebase den bildirim gelmiyor. barissagir 1 579 22-09-2024, Saat: 09:36
Son Yorum: arsl01
  Duns Numarası Hakkında Yardım glagher 5 1.578 16-08-2024, Saat: 16:48
Son Yorum: glagher
  Xcode Üyeliği hakkında barissagir 15 5.011 07-02-2024, Saat: 16:26
Son Yorum: barissagir
  Andorid Font Hakkında barissagir 2 1.009 20-11-2023, Saat: 09:05
Son Yorum: RAD Coder



Konuyu Okuyanlar: