Selam;
Öncelikle sitedeki neredeyse bütün bildirim konularını inceledim ne denildiyse yaptım. Ancak bildirim göndermeyi başaramadım. Embarcadero'nun örneğini'de denedim. Google Cloud Messaging, https://console.firebase.google.com, https://console.kinvey.com/apps hepsinde kullanıcı v.s. oluşturdum. Api keyleri herşeyleri aldım. Barış Atalay'ın sayfasındaki kinvey uygulamasını da yaptım çalıştırdım ama. INVALID_SENDER hatası alıyorum. Firebase'e geçtiği için olabilir düşüncesiyle orayı da girip karıştırdım. google_services.json dosyasını indirdim. Orada kaldım. Bu dosyayı nereye yüklemem gerekiyor?
İkincisi de veritabanı tablosuna bir kayıt eklediğimde bildirimi nereye ve nasıl göndereceğim?
Bildirim
Re: Bildirim
Selamlar;
https://www.youtube.com/watch?v=mTIkCUAeSb4 Videosunda bildirim olayıyla ilgili ayrıntılı bilgi mevcut. Ancak benim telefonda çalışmadı (Program çalışıyor hiçbir hata vermiyor ama bildirim de gelmiyor) neden çalışmadı bulamadım sonra bakarım dedim bıraktım.
Şöyle bir çözüme gittim.
Öncelikle
1) C:\Users\Public\Documents\Embarcadero\Studio\17.0\Samples\Object Pascal\Mobile Snippets\Notifications\SendCancelNotification bu örneği uyguladım.
2) Bu uygulamanın anında bildirim gönder kodlarını aldım.
3) https://www.youtube.com/watch?v=0mD3WLK8FYc bu videodaki Android servisin uygulamaya nasıl ekleneceği konusunu inceledim.
4) Bütün bunlar bittikten sonra uygulamama Timer koydum. Timer'i ayarladım 15 dakikaya 15 dakikada bir kontrol sorgusu yapıyor. Bir tabloda kayıt eklendi ise bildirim gönderiyorum.
Benim sorunum şu. Arka planda çalışan android servis çalışıyor ama ben databese bağlantılarını programı kapatırken kesiyorum. Tabi böyle olunca kontrol edip bildirim göndermiyor. Bu sorunu database bağlantılarını kesmeyerek çözebilirim ancak o zaman hem internet bağlantısı hem de telefon boşuna yorulmuş olacak. Sizler böyle durumlar için ne yapıyorsunuz?
https://www.youtube.com/watch?v=mTIkCUAeSb4 Videosunda bildirim olayıyla ilgili ayrıntılı bilgi mevcut. Ancak benim telefonda çalışmadı (Program çalışıyor hiçbir hata vermiyor ama bildirim de gelmiyor) neden çalışmadı bulamadım sonra bakarım dedim bıraktım.
Şöyle bir çözüme gittim.
Öncelikle
1) C:\Users\Public\Documents\Embarcadero\Studio\17.0\Samples\Object Pascal\Mobile Snippets\Notifications\SendCancelNotification bu örneği uyguladım.
2) Bu uygulamanın anında bildirim gönder kodlarını aldım.
3) https://www.youtube.com/watch?v=0mD3WLK8FYc bu videodaki Android servisin uygulamaya nasıl ekleneceği konusunu inceledim.
4) Bütün bunlar bittikten sonra uygulamama Timer koydum. Timer'i ayarladım 15 dakikaya 15 dakikada bir kontrol sorgusu yapıyor. Bir tabloda kayıt eklendi ise bildirim gönderiyorum.
Benim sorunum şu. Arka planda çalışan android servis çalışıyor ama ben databese bağlantılarını programı kapatırken kesiyorum. Tabi böyle olunca kontrol edip bildirim göndermiyor. Bu sorunu database bağlantılarını kesmeyerek çözebilirim ancak o zaman hem internet bağlantısı hem de telefon boşuna yorulmuş olacak. Sizler böyle durumlar için ne yapıyorsunuz?
Re: Bildirim
Lokal bildirim olayı çok sıkıntı olmuyor. Ben şu şekilde bir uygulama yaptım. Program açıldığı zaman, önümüzdeki 2 günün bildirimlerini veritabanından alıp, lokal bildirim olarak ekliyor. Zamanı gelince ekrana düşüyor. Ancak kullanıcı 2 gün, hiç programı açmazsa sistem patlıyor.
Uzak bildirim olayını, iOS ve kinvey ile denemiştim. Biraz sıkıntılı bir süreç ama çalıştırmayı başarmıştım. Hatırladığım kadarıyla,
* kinvey'den bir hesap oluşturdum.
* Programımla aynı isimde bir kinvey projesi oluşturmuştum.
* Projeye kinveyprovider ve pushevents componentlerini ekleyip, kinveyden aldığım bilgileri (AppKey, AppSecret vs.) ekledim.
* OnPushReceived olayına da gerekli kodu ekledim.
* Project Options - Version Info kısmında UIBackgroundModes var. Orada da fetch ve remote-notification seçmişim.
Kod kısmı:
Uzak bildirim olayını, iOS ve kinvey ile denemiştim. Biraz sıkıntılı bir süreç ama çalıştırmayı başarmıştım. Hatırladığım kadarıyla,
* kinvey'den bir hesap oluşturdum.
* Programımla aynı isimde bir kinvey projesi oluşturmuştum.
* Projeye kinveyprovider ve pushevents componentlerini ekleyip, kinveyden aldığım bilgileri (AppKey, AppSecret vs.) ekledim.
* OnPushReceived olayına da gerekli kodu ekledim.
* Project Options - Version Info kısmında UIBackgroundModes var. Orada da fetch ve remote-notification seçmişim.
Kod: Tümünü seç
object KinveyProvider1: TKinveyProvider
ApiVersion = '3'
AppKey = 'kid_****'
AppSecret = '34cd***'
MasterSecret = '6aa6***'
UserName = '***'
Password = '****'
AndroidPush.GCMAppID = '19***'
Left = 32
Top = 112
end
object PushEvents1: TPushEvents
Provider = KinveyProvider1
AutoActivate = True
AutoRegisterDevice = False
OnPushReceived = PushEvents1PushReceived
Left = 32
Top = 72
end
Kod: Tümünü seç
procedure TFRM_MOBIL_MAIN.PushEvents1PushReceived(Sender: TObject;
const AData: TPushData);
var
Notification: TNotification;
begin
ShowMessage(AData.Message);
Notification := NC_PIRI_REIS.CreateNotification;
try
Notification.Name := 'Push1' ;
Notification.Title := Application.Title;
Notification.AlertBody := Adata.Message;
Notification.EnableSound := True;
NC_MOBIL_PROJE.PresentNotification(Notification);
finally
Notification.DisposeOf;
end;
end;
Re: Bildirim
Selam;
Öncelikle cevabın için teşekkür ederim. Benim kodlarım ve ayarlarım da aşağıdaki gibi ama ne kinveyden ne de başkabir uygulamayla https://console.firebase.google.com'dan bildirim alamadım. (Telefonun bildirim ayarları ile çok uğraştım o yüzden olabilir diye düşünüyorum artık).
Arka Planda çalışmayla ilgili bir uygulama yaptın mı hiç? (Database'e bağlı bir uygulamada)
unit kinveybildirim;
interface
uses
System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, IPPeerClient,
System.Notification, REST.Backend.PushTypes, System.JSON,
REST.Backend.KinveyPushDevice, System.PushNotification, System.Rtti,
System.Bindings.Outputs, Fmx.Bind.Editors, Data.Bind.EngExt,
Fmx.Bind.DBEngExt, Data.Bind.Components, FMX.Controls.Presentation,
FMX.StdCtrls, Data.Bind.ObjectScope, REST.Backend.BindSource,
REST.Backend.PushDevice, REST.Backend.KinveyProvider, FMX.ScrollBox, FMX.Memo;
type
TForm1 = class(TForm)
KinveyProvider1: TKinveyProvider;
NotificationCenter1: TNotificationCenter;
PushEvents1: TPushEvents;
Memo1: TMemo;
Switch1: TSwitch;
BindingsList1: TBindingsList;
LinkControlToField1: TLinkControlToField;
procedure PushEvents1DeviceTokenRequestFailed(Sender: TObject;
const AErrorMessage: string);
procedure PushEvents1PushReceived(Sender: TObject; const AData: TPushData);
procedure BildirimGonder(T: String);
procedure PushEvents1DeviceRegistered(Sender: TObject);
procedure PushEvents1DeviceTokenReceived(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.fmx}
procedure TForm1.PushEvents1DeviceRegistered(Sender: TObject);
begin
memo1.Lines.Add('Cihaz Kaydet' + linefeed);
end;
procedure TForm1.PushEvents1DeviceTokenReceived(Sender: TObject);
begin
memo1.Lines.Add('Cihaz Belirteç Kaydet' + linefeed);
end;
procedure TForm1.PushEvents1DeviceTokenRequestFailed(Sender: TObject;
const AErrorMessage: string);
begin
Memo1.Lines.Add('Hata Var!' + linefeed);
Memo1.Lines.Add(AErrorMessage + linefeed);
end;
procedure TForm1.PushEvents1PushReceived(Sender: TObject;
const AData: TPushData);
var NC : TNotificationcenter;
N : TNotification;
begin
memo1.Lines.Add('Push Notification' + linefeed);
NC := TNotificationcenter.Create(Nil);
N := NC.CreateNotification;
try
N.Title := 'Mesaj Başlığı';
N.AlertBody := Adata.Message;
N.EnableSound := True;
N.Number := 1;
NC.ApplicationIconBadgeNumber := 1;
NC.PresentNotification(N);
finally
NC.Free;
N.Free;
end;
end;
object KinveyProvider1: TKinveyProvider
ApiVersion = '3'
AppKey = 'kid_BJ8LIxxxx'
AppSecret = 'a3ea378032744a4f880db2875bexxxxx'
MasterSecret = '02b9104b16864502a13f67cb932xxxxx'
UserName = 'erolakyuz@xxxx.com'
Password = 'xxxxx'
AndroidPush.GCMAppID = '4116192xxx'
Left = 56
Top = 224
end
object NotificationCenter1: TNotificationCenter
Left = 40
Top = 320
end
object PushEvents1: TPushEvents
Provider = KinveyProvider1
AutoRegisterDevice = False
OnDeviceTokenReceived = PushEvents1DeviceTokenReceived
OnDeviceTokenRequestFailed = PushEvents1DeviceTokenRequestFailed
OnPushReceived = PushEvents1PushReceived
OnDeviceRegistered = PushEvents1DeviceRegistered
Left = 128
Top = 336
end
object BindingsList1: TBindingsList
Methods = <>
OutputConverters = <>
Left = 20
Top = 5
object LinkControlToField1: TLinkControlToField
Category = 'Quick Bindings'
DataSource = PushEvents1
FieldName = 'Active'
Control = Switch1
Track = True
end
end
Öncelikle cevabın için teşekkür ederim. Benim kodlarım ve ayarlarım da aşağıdaki gibi ama ne kinveyden ne de başkabir uygulamayla https://console.firebase.google.com'dan bildirim alamadım. (Telefonun bildirim ayarları ile çok uğraştım o yüzden olabilir diye düşünüyorum artık).
Arka Planda çalışmayla ilgili bir uygulama yaptın mı hiç? (Database'e bağlı bir uygulamada)
unit kinveybildirim;
interface
uses
System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, IPPeerClient,
System.Notification, REST.Backend.PushTypes, System.JSON,
REST.Backend.KinveyPushDevice, System.PushNotification, System.Rtti,
System.Bindings.Outputs, Fmx.Bind.Editors, Data.Bind.EngExt,
Fmx.Bind.DBEngExt, Data.Bind.Components, FMX.Controls.Presentation,
FMX.StdCtrls, Data.Bind.ObjectScope, REST.Backend.BindSource,
REST.Backend.PushDevice, REST.Backend.KinveyProvider, FMX.ScrollBox, FMX.Memo;
type
TForm1 = class(TForm)
KinveyProvider1: TKinveyProvider;
NotificationCenter1: TNotificationCenter;
PushEvents1: TPushEvents;
Memo1: TMemo;
Switch1: TSwitch;
BindingsList1: TBindingsList;
LinkControlToField1: TLinkControlToField;
procedure PushEvents1DeviceTokenRequestFailed(Sender: TObject;
const AErrorMessage: string);
procedure PushEvents1PushReceived(Sender: TObject; const AData: TPushData);
procedure BildirimGonder(T: String);
procedure PushEvents1DeviceRegistered(Sender: TObject);
procedure PushEvents1DeviceTokenReceived(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.fmx}
procedure TForm1.PushEvents1DeviceRegistered(Sender: TObject);
begin
memo1.Lines.Add('Cihaz Kaydet' + linefeed);
end;
procedure TForm1.PushEvents1DeviceTokenReceived(Sender: TObject);
begin
memo1.Lines.Add('Cihaz Belirteç Kaydet' + linefeed);
end;
procedure TForm1.PushEvents1DeviceTokenRequestFailed(Sender: TObject;
const AErrorMessage: string);
begin
Memo1.Lines.Add('Hata Var!' + linefeed);
Memo1.Lines.Add(AErrorMessage + linefeed);
end;
procedure TForm1.PushEvents1PushReceived(Sender: TObject;
const AData: TPushData);
var NC : TNotificationcenter;
N : TNotification;
begin
memo1.Lines.Add('Push Notification' + linefeed);
NC := TNotificationcenter.Create(Nil);
N := NC.CreateNotification;
try
N.Title := 'Mesaj Başlığı';
N.AlertBody := Adata.Message;
N.EnableSound := True;
N.Number := 1;
NC.ApplicationIconBadgeNumber := 1;
NC.PresentNotification(N);
finally
NC.Free;
N.Free;
end;
end;
object KinveyProvider1: TKinveyProvider
ApiVersion = '3'
AppKey = 'kid_BJ8LIxxxx'
AppSecret = 'a3ea378032744a4f880db2875bexxxxx'
MasterSecret = '02b9104b16864502a13f67cb932xxxxx'
UserName = 'erolakyuz@xxxx.com'
Password = 'xxxxx'
AndroidPush.GCMAppID = '4116192xxx'
Left = 56
Top = 224
end
object NotificationCenter1: TNotificationCenter
Left = 40
Top = 320
end
object PushEvents1: TPushEvents
Provider = KinveyProvider1
AutoRegisterDevice = False
OnDeviceTokenReceived = PushEvents1DeviceTokenReceived
OnDeviceTokenRequestFailed = PushEvents1DeviceTokenRequestFailed
OnPushReceived = PushEvents1PushReceived
OnDeviceRegistered = PushEvents1DeviceRegistered
Left = 128
Top = 336
end
object BindingsList1: TBindingsList
Methods = <>
OutputConverters = <>
Left = 20
Top = 5
object LinkControlToField1: TLinkControlToField
Category = 'Quick Bindings'
DataSource = PushEvents1
FieldName = 'Active'
Control = Switch1
Track = True
end
end
Re: Bildirim
Selamlar. Bende aynı şekilde denedim. Ama bende başarılı olamadım. Yaptığın/yaptığım işlemler doğru ama neden olmuyor bende anlamıyorum