Konuyu Paylaş : facebook gplus twitter

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?

Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol

Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
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ı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlHocam 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ı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlHocam 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: Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol 


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ğı: Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
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 Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol 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: Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol ü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 Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol üzerinden oluştuduğum .p8 uzantılı sertifikayı, bu alanın Anahtar kimliği alanına yine Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol ü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 Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol 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:
pkcs12 -in C:\cer\Services18062017.p12 -out C:\cer\Services18062017.pem -nodes -clcerts 



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

PHP Kod:
<?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

Konuyu Paylaş : facebook gplus twitter



Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  [Çözüldü] FireBase (FCM) Push Notification mesajı gelmiyor Fesih ARSLAN 17 374 24-04-2018, Saat: 12:56
Son Yorum: mrmarman
  Uygulamamın açılışındaki siyah ekran Hakkında webprog 8 338 19-03-2018, Saat: 20:24
Son Yorum: webprog
Information Status Bar Android [ÇÖZÜLDÜ] malitutuncu 8 361 27-02-2018, Saat: 09:23
Son Yorum: malitutuncu
Question TWebView ile Web Sitesindeki Herhangi Bir Nesneye Ulaşım Yada Cookie [ÇÖZÜLDÜ] malitutuncu 2 310 22-02-2018, Saat: 09:47
Son Yorum: malitutuncu
  Push Natification hata (Tokyo ve Seattle) [ÇÖZÜLDÜ] malitutuncu 7 297 19-02-2018, Saat: 13:59
Son Yorum: malitutuncu



Konuyu Okuyanlar: 1 Ziyaretçi