Konuyu Oyla:
  • Derecelendirme: 5/5 - 2 oy
  • 1
  • 2
  • 3
  • 4
  • 5
iOS Bildirim Hakkında Yardım[Çözüldü]
#1
Merhaba, aşağıda bulunan iki makaledeki tüm işlemleri yapmama rağmen ios cihazımda bildirim alamıyorum. İşin garip yanı DeviceId ve DeviceToken değerleri servisi aktif ettiğimde geliyor ama ne uygulama kapalıyken ne de açıkken bildirim alamıyorum.
Bu konu da tecrübe edinen biri yardımcı olabilir mi?

http://blog.rzaripov.kz/2017/02/firebase...d-ios.html

http://blog.rzaripov.kz/2017/02/firebase...ios-2.html
Cevapla
#2
Hocam bu ios bildirim için bir çözüm bulan var mı?
Cevapla
#3
Merhaba,
Sorunun kesin kaynağını tespit etmek zor. Apple Developer üyeliğinizde; uzak bildirim (Push notification) ayarlarının doğru yapılıp yapılmadığını kontrol edin.
Uzak bildirim sertifikalarınızın doğruluğunu bir uygulama ile test edin.
Yukarıdaki her iki adımda bir sorun yok ise aşağıdaki iki adımı uygulayarak, yeniden bildirim göndermeyi deneyin.
1- Project > Options > Version Info sekmesinde UIBackgroundModes parametresini remote-notification seçin.
2- Yine aynı ekranda FMLocalNotificationPermission parametresini true yapın.

Lokal bildirimleriniz çalışıyor mu?
While true do; Hayat döngüsü, kısır değildir! Yapılan bir yanlış, o döngünün dışına çıkmanızı sağlayacaktır.
WWW
Cevapla
#4
Hocam sizin belirttiğini şeyleri daha önce yapmıştım. Ancak netice alamadım. Local bildirimler evet çalışıyor. Şimdi apple tabletimi güncelliyorum ios 10 için birde TOKYO'yu kuruyorum. Bir de bu şekilde deneyeceğim. Netice alırsam bildiririm.
İlginiz için teşekkürler.

Hocam birde Google Firebase de CLOUD MESSAGING kısmında ios için "Uygulama Kimliği Ön Eki" değeri istiyor. Bende yardım linkinden tıkladım ama bununla ilgili hesabımda bir değere ulaşamadım. Bu değer önemli mi ve nereden temin ediliyor.
Cevapla
#5
(10-06-2017, Saat: 13:13)beklentili Adlı Kullanıcıdan Alıntı: Hocam sizin belirttiğini şeyleri daha önce yapmıştım. Ancak netice alamadım. Local bildirimler evet çalışıyor. Şimdi apple tabletimi güncelliyorum ios 10 için birde TOKYO'yu kuruyorum. Bir de bu şekilde deneyeceğim. Netice alırsam bildiririm.
İlginiz için teşekkürler.

Rica ederim. Sonucu merakla bekliyorum.
While true do; Hayat döngüsü, kısır değildir! Yapılan bir yanlış, o döngünün dışına çıkmanızı sağlayacaktır.
WWW
Cevapla
#6
Hocam birde Google Firebase de CLOUD MESSAGING kısmında ios için "Uygulama Kimliği Ön Eki" değeri istiyor. Bende yardım linkinden tıkladım ama bununla ilgili hesabımda bir değere ulaşamadım. Bu değer önemli mi ve nereden temin ediliyor.
Cevapla
#7
(10-06-2017, Saat: 13:20)beklentili Adlı Kullanıcıdan Alıntı: Hocam birde Google Firebase de CLOUD MESSAGING kısmında ios için "Uygulama Kimliği Ön Eki" değeri istiyor. Bende yardım linkinden tıkladım ama bununla ilgili hesabımda bir değere ulaşamadım. Bu değer önemli mi ve nereden temin ediliyor.

Uygulamanızın benzersiz olmasını sağlayan kriterlerden biri olduğunu düşünüyorum.
App ID Prefix alanına uygulamanızı tanımlayıcı, özel bir değer yazabilirsiniz.
Kaynak: FCM iOS 


Alıntı:Here is an example of the delivery receipt that CCS sends to tell your app server that a device received a message that CCS sent it:

<message id="">
  <gcm xmlns="google:mobile:data">
  {
      "category":"com.example.yourapp", // to know which app sent it
      "data":
      {
         “message_status":"MESSAGE_SENT_TO_DEVICE",
         “original_message_id”:”m-1366082849205”
         “device_registration_id”: “REGISTRATION_ID”
      },
      "message_id":"dr2:m-1366082849205",
      "message_type":"receipt",
      "from":"gcm.googleapis.com"
  }
  </gcm>
</message>

Note the following:
  • The "message_type" is set to "receipt".
  • The "message_status" is set to "MESSAGE_SENT_TO_DEVICE", indicating that the device received the message. Notice that in this case, "message_status" is not a field but rather part of the data payload.
  • The receipt message ID consists of the original message ID, but with a dr2: prefix. Your app server must use the same connection to send an ACK back with this ID, which in this example is dr2:m-1366082849205.

Alıntı Kaynağı: About Firebase Cloud Messaging Server
iOS için FCM oluştururken tanımlamış olduğunuz Prefix kısmı, mesaj gönderiminde kullanılıyor.
While true do; Hayat döngüsü, kısır değildir! Yapılan bir yanlış, o döngünün dışına çıkmanızı sağlayacaktır.
WWW
Cevapla
#8
Hocam ne yazık ki ne yaptıysam netice alamadım. Hatta önce den butonla local bildirim yapıyorum ancak şu an onu da yapamıyorum.

Platform: Delphi Tokyo
Mac: Sierra 10.12.5
Platform Assistant Server  Version 10.0.1.30 (PaServer 19)
Test Cihazı: iPad - iOS 10.3.2
XCode: Version 8.3.3 (8E3004b)

Yaptığım işlemleri sırasıyla yazıyorum.
1- Mac Anahtar Zinciri Erişimi uygulaması üzerinden Sertifika Yardımcısı>Sertifika Otoritesinden Sertifika İste.. adımı ile apple developer hesabına ait eposta adresi ile certSigningRequest uzantılı bir sertifika alıyorum. (Sertifika alırken sadece Kullanıcı e-posta adresini giriyorum. Diğer alanlara bir şey yazmıyorum)
2-https://developer.apple.com/ adresinde Certificates alanında iOS Development ve iOS Distribution için iki adet sertifika oluşturuyorum.
3-Devices alanına cihazımı kaydediyorum.
4-Identifiers alanında com.dfdsf.cxcd gibi bir App IDs oluşturuyorum ve burada ek olarak Push Notifications alanını işaretliyorum.
5-Daha sonra oluşturduğum  App IDs seçerek Edit tıklayıp Development SSL Certificate ve Production SSL Certificate alanlarının her ikisi için 1. adımdaki sertifikaları yükleyip Apple Push Services ve APNs Development iOS sertifikalarını oluşturuyorum.
6-Provisioning Profiles alanında Develepor için, AdHoc için ve AppStore için üç tane sertifika oluşturuyorum.

7-Akabinde Xcode üzerinde ilgili menüleri kullanmak suretiyle developer hesabımı açıyorum ve sertifikaları dahil ediyorum.
8- Akabinde https://developer.apple.com/ adresindeki tüm sertifikalarımı indirerek Anahtar Zinciri Erişimi uygulamasını açıp Dosya>Öğeleri içe aktar seçeneği ile içeri aktarıyorum.
Anahtar Zinciri Erişimi uygulamasını kontrol ediyorum ve herhangi bir çift sertifika yok. Zaten bu işlemden önce ilgili tüm sertifikaları siliyorum
9-PaServer aracılığyla sorunsuz bir şekilde bağlanıp Mac, Similatör ve iOS'a ait tüm sertifikaları Delphi üzerine ekliyorum.
10- Delphi üzerinde hem standart PushEvents1 ve KinveyProvider1 uygulamaları aracılığıyla hemde aşağıdaki kod ile denediğimde netice alamıyorum. Şu an local bildirim bile çalışmıyor.

CFBundleIdentifier alanına ilgili com.. ile başlayan uzantıyı ekledim.
FMLocalNotificationPermission alanı true
UIBackgroundModes alanında da remote-notification alanını seçmeme rağmen ne yazık ki netice yok.

--------
procedure TForm_home.OnServiceConnectionChange(Sender: TObject;
  PushChange: TPushService.TChanges);
begin
 // Do something if the service connection change;
end;

- - - - - - - - - - - - - - - - - -
procedure TForm_home.OnReceiveNotificationEvent(Sender: TObject;
 const ServiceNotification: TPushServiceNotification);

const
 FCMSignature = 'gcm.notification.body';
 GCMSignature = 'message';
 APNsSignature = 'alert';

var
 MessageText: String;
 aObj: TJSONValue;

begin
{$IFDEF ANDROID}
 aObj := ANotification.DataObject.GetValue(GCMSignature);
 if aObj <> nil then
   MessageText := aObj.Value;
else
 MessageText := ServiceNotification.DataObject.GetValue(FCMSignature).Value;
{$ELSE}
aObj := ServiceNotification.DataObject.GetValue(APNsSignature);
if aObj <> nil then
 MessageText := aObj.Value;
{$ENDIF}
ShowMessage(MessageText);

ShowAndroidNotification(MessageText, 0);
end;

- - - - - - - - - - - - - - - - - - - - -

procedure TForm_home.ShowAndroidNotification(MessageText: string;
 NotificationNumber: integer);

var
 NotificationCenter: TNotificationCenter;
 Notification: TNotification;

begin
 NotificationCenter := TNotificationCenter.Create(nil);
 try
   Notification := NotificationCenter.CreateNotification;
   try
     Notification.Name := MessageText;
     Notification.AlertBody := MessageText;
     Notification.Title := MessageText;
     Notification.EnableSound := false;
     Notification.Number := NotificationNumber;
     NotificationCenter.ApplicationIconBadgeNumber := NotificationNumber;
     NotificationCenter.PresentNotification(Notification);
   finally
     Notification.DisposeOf;
   end;
 finally
   NotificationCenter.Free;
   NotificationCenter.DisposeOf;
 end;
end;
Cevapla
#9
Hocam Kinvey üzerinden bildirim gönderebiliyorum. Şu an için onu başardım ancak Google Firebase üzerinden netice alamadım. Benim için Firebase önemli çünkü Android ve diğer tüm servisler Firebase üzerinden çalışıyor. Bu konuda bir fikriniz var mı?

Firebase için aşağıdaki işlemleri yaptım.
Firebase üzerinde;
1 - com.xxxx.ios uzantısında bir ios uygulama oluşturdum.
2 - App Store Kimliği: https://itunesconnect.apple.com üzerinden oluşturduğum ve henüz yayında olmayan uygulamanın kimliği,
3 - Uygulama Kimliği Ön Eki:https://developer.apple.com üzerinden edindiğim Team ID bilgisini ilgili alanlara ekledim.
4 - "CLOUD MESSAGING" alanındaki "iOS uygulama yapılandırması" alanında bulunan ios uygulamasını seçerek bu alandaki APNs bilgilerine https://developer.apple.com üzerinden oluştuduğum .p8 uzantılı sertifikayı, bu alanın Anahtar kimliği alanına yine https://developer.apple.com üzerindeki APNs sertifikasını Anahtar kimliğini ve Uygulama kimliği ön eki ön eki alanına da yine Team ID ekleyerek kaydettim.
5 - iOS uygulamasının CFBundleIdentifier alanına com.xxxx.ios değerini ekledim.
6 - Yine Kinver nesnesi ve PushEvent nesnelerine Android de olduğu gibi ilgili değerleri girdim.

Ancak netice alamadım. Bir şeyleri eksik yapıyorum ama çözemedim. Çünkü kinvey üzerinden bildirim gönderebiliyorum ancak Firebase üzerinden gönderemiyorum
Cevapla
#10
Sorunu ne yazık ki Google Firebase üzerinde çözemedim ancak alternatif bir yöntem buldum. 

Yöntem şöyle:
1-Bu yöntem için bir sunucu gerekiyor ve bu sunucu da 2195 giden portun açık olması gerekiyor.
2- Mac Anahtar Zinciri Erişimi uygulaması üzerinden Sertifika Yardımcısı>Sertifika Otoritesinden Sertifika İste.. adımı ile apple developer hesabına ait eposta adresi ve developer Ad ve Soyadı ile certSigningRequest uzantılı bir sertifika alıyorum. 
3-https://developer.apple.com/ adresinde Certificates alanında iOS Development ve iOS Distribution için iki adet sertifika oluşturuyorum.
4-Devices alanına cihazımı kaydediyorum.
5-Identifiers alanında com.dfdsf.cxcd gibi bir App IDs oluşturuyorum ve burada ek olarak Push Notifications alanını işaretliyorum.

6-Daha sonra oluşturduğum  App IDs seçerek Edit tıklayıp Development SSL Certificate ve Production SSL Certificate alanlarının her ikisi için 2. adımdaki sertifikaları yükleyip Apple Push Services ve APNs Development iOS sertifikalarını oluşturuyorum.

7-Provisioning Profiles alanında Develepor için, AdHoc için ve AppStore için üç tane sertifika oluşturuyorum.

8-Akabinde Xcode üzerinde ilgili menüleri kullanmak suretiyle developer hesabımı açıyorum ve sertifikaları dahil ediyorum. 

9- Akabinde https://developer.apple.com/ adresindeki tüm sertifikalarımı indirerek Anahtar Zinciri Erişimi uygulamasını açıp Dosya>Öğeleri içe aktar seçeneği ile içeri aktarıyorum.

10-Daha sonra Anahtar Zinciri Erişimi üzerinde "Apple Development IOS Push Services: com.dfdsf.cxcd" ve "Apple Push Services: com.dfdsf.cxcd" isimli sertifikaların dışa aktarma seçeneği ile bir şifre belirleyip dışa aktarıyorum. (Sertifikalar .p12 uzantılı)
11-Daha sonra windows üzerinde "https://freefr.dl.sourceforge.net/project/gnuwin32/openssl/0.9.8h-1/openssl-0.9.8h-1-setup.exe" adresindeki uygulamayı kurarak "C:\Program Files (x86)\GnuWin32\bin" dizinindeki "openssl.exe" uygulamasını çalıştırıp bu uygulamaya her iki .p12 uzantılı sertifika için aşağıdaki kodu çalıştırıp şifreleri girerek .pem uzantılı iki dosya oluşturuyorum. Bu sertifikalardan Development  olanı Geliştirici modunda bildirim gönderirken diğerini de app store modunda kullanıyorum.

Kod:
[Ars=powershell]pkcs12 -in C:\cer\Services18062017.p12 -out C:\cer\Services18062017.pem -nodes -clcerts [/ars]



Son olarak aşağıdaki PHP kodu ile sunucuda bildirimi sorunsuz bir şekilde gönderiyorum.

PHP Kod: (Select All)
<?php
$resultArray 
= array();
define("APNS_DEVELOPMENT""sandboxD");// Buradaki D harfini silersek geliştirici modu olur. D rastgele bir harf başka harfte koyulabilir.
define("APNS_CERT_DEV""pems/Develoment18062017.pem");//gelistirici sertifika
define("APNS_CERT_DEV2""pems/Services18062017.pem"); //degitici sertifika

$token=$_GET["token"]; 
$mesaj=base64_decode ($_GET["mesaj"]);

if ((
$token=='') or ($mesaj=='') )
{
$row_array['durum'] = "Yok";
$row_array['aciklama'] = ("Degerler bos");
array_push($resultArray,$row_array);
echo 
json_encode($resultArray);
}
else
{
$push_arr=array(
 
"alert" => $mesaj,
 
"badge" => 0,
 
"sound" => "default",
 
"dt" => $token,
);

 
   send_ios_push_specific($push_arr);
 
   $row_array['durum'] = "Ok";
 
   array_push($resultArray,$row_array);
 
   echo json_encode($resultArray);
 
   }

function 
send_ios_push_specific($push_arr){
 
   if (APNS_DEVELOPMENT == "sandbox") {
 
       $apnsHost 'ssl://gateway.sandbox.push.apple.com:2195';
 
       $apnsCert APNS_CERT_DEV;
 
   } else {
 
       $apnsHost 'ssl://gateway.push.apple.com:2195';
 
       $apnsCert APNS_CERT_DEV2;
 
   }

 
   $dirName dirname(__FILE__);
 
   $certificate $dirName '/' $apnsCert;
 
   try {
 
       $streamContext stream_context_create();
 
       stream_context_set_option($streamContext'ssl''local_cert'$certificate);
 
       $passphrase 'Hiper.34';
 
       stream_context_set_option($streamContext'ssl''passphrase'$passphrase);
 
       $apns stream_socket_client($apnsHost$error$errorString60STREAM_CLIENT_CONNECT$streamContext);
 
   } catch (Exception $e) { 

 
   }


 
   $message = (array
 
  (
 
  'default'=>$push_arr['alert'],
 
  'aps'=>array(
 
  'alert'=>$push_arr['alert'],
 
  'badge' => $push_arr['badge'],
 
  'sound'=>$push_arr['sound'],
 
   ),

 
      )

 
  );

 
   $payload json_encode($message);
 
   if (!empty($push_arr['dt'])) {

 
      try {
 
       $apnsMessage chr(0) . chr(0) . chr(32) . pack('H*'str_replace(' '''$push_arr['dt'])) . chr(0) . chr(strlen($payload)) . $payload;
 
       fwrite($apns$apnsMessage);
 
           } catch (Exception $e)
{ } 
      
}
}
?>
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  [ÇÖZÜLDÜ] Delphi iOS Mesaj Sorunu Halil Han Badem 10 604 12-05-2020, Saat: 13:09
Son Yorum: Halil Han Badem
  ( Çözüldü ) OrangeUI windows 64 bit yok mu? mfidan 21 1.860 08-05-2020, Saat: 03:01
Son Yorum: DelphiTeacher
  [ÇÖZÜLDÜ] OrangeUI SkinFMXListView Item Güncelleme Halil Han Badem 1 229 18-04-2020, Saat: 13:32
Son Yorum: Halil Han Badem
  [ÇÖZÜLDÜ] Pil optimizasyon izinini almak [ÇÖZÜLDÜ] arsl01 4 362 08-04-2020, Saat: 22:10
Son Yorum: arsl01
  OrangeUI Sorunları Hakkında. pro_imaj 10 689 01-04-2020, Saat: 23:46
Son Yorum: pro_imaj



Konuyu Okuyanlar: 1 Ziyaretçi