Bildirim

FireMonkey ve Mobil uygulama (iOS, Android, Windows Phone) ile ilgili sorularınızı bu foruma sorabilirsiniz.
Cevapla
jakarta2
Üye
Mesajlar: 74
Kayıt: 20 Nis 2015 06:51
İletişim:

Bildirim

Mesaj gönderen jakarta2 »

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?
jakarta2
Üye
Mesajlar: 74
Kayıt: 20 Nis 2015 06:51
İletişim:

Re: Bildirim

Mesaj gönderen jakarta2 »

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?
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7586
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Re: Bildirim

Mesaj gönderen mussimsek »

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: 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 kısmı:

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;
jakarta2
Üye
Mesajlar: 74
Kayıt: 20 Nis 2015 06:51
İletişim:

Re: Bildirim

Mesaj gönderen jakarta2 »

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
cmkare
Üye
Mesajlar: 177
Kayıt: 23 Ağu 2010 11:29

Re: Bildirim

Mesaj gönderen cmkare »

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
Cevapla