23 Ağustos 2014 Cumartesi

Delphi Android Foreground

Merhabalar,

Sizelere bu sefer biraz cihazda görsellik yaratacak ve projenizi daha profesyonel gösterecek bir şeyler hazırladım. Bunun tam olarak ne olduğunu anlamak için  "Android Foreground" kelimelerini Google üzerinden aratıp tam anlamlı açıklamalara erişebilirsiniz ben eksik bilgi verip kafanızı karıştırmak istemem.

Bu işleme yaptığım bir örneğin resmini koyarak tam anlamı ile göstermek istiyorum.

Resim 1

Resim 2

Kodların orjinalini Embarcaderonun formunda bir soruya verilen cevaptaki linten indirdim fakat çoğu zaman üşengeç bir millet olduğumuzdan bütün bu .pas dosyalarını projeye dahil edecez de ayarlamaları yapacas da bizim için büyük iş :)
Bende bunları düşünerek bütün pas dosyalarını 1 component üzerinde birleştirdim ve yapmamız gereken sadece componenti tutup formun üzerine bırakmak ve .StartService proceduresini çalıştırmak.

Eğer biraz meraklıysanız ve android arka plan servisleri ile ilgili uygulamalar geliştirmek isterseniz .pas dosyalarının içeriğini karıştırmanızı öneririm. Çünkü hazırlayan arkadaş android cihazın yaptığı yayınları yakalama gibi olayları güzelce anlatmış orada.



Ek olarak yapılması gereken 2 ayar vardır bunlar:



2-) AndroidManifest.template.xml ayarı

Bu "AndroidManifest.template.xml" ayarı için yapılması gereken

1-) Manifest dosyasını açınız.

2-)
<receiver android:name="com.embarcadero.firemonkey.notifications.FMXNotificationAlarm"/>
satırını bulunuz ve hemen altına boş bır satır açarak vereceğim metini yapıştırınız.

3-) <service android:name="com.barisatalay.foreground.ForegroundServis"
                 android:persistent="true"
                 android:enabled="true">
        </service>

4-) Eğer doğru olarak eklediyseniz kodlar bu resimdeki gibi gözükmeli.



5- ) Resimdeki şekilde projemizi önce Clean sonra Compile yapıyoruz


Tüm bu işlemleri tamamladığınızda Foreground olayının başarı ile çalıştığını göreceksiniz.

Bütün bunlarda da hata yapma olasılığınızı düşünerek component klasörlerinin içerisine "Demo" adında klasörde sizler için örnek bir proje hazırladım.

İyi çalışmalar.

Delphi Classes.dex Deploy

Merhabalar,

Bu  yazı "Delphi Android Foreground" başlığı için bir ara yazıdır ve burada android cihaz için classes.dex dosyasını nasıl deploy edildiğini öğreneceğiz.

İşlemlerimize resimleri takip ederek devam ediyoruz.

1-) sırasıyla adımları izleyerek projemizi daha önce compile etmediysek bu işlemler ile gerekli dosyaların yaratılmasını sağlıyoruz.


2-) Project>>Deployment seçerek gerekli menü açılır





 3-) 
1- numarada gördüğünüz satır orjinal delphinin hazırlamış olduğu classes.dex dosyasıdır ve onun seçimini iptal ediyoruz.

2- 2 numarası ile gösterilen  yere tıklayıp component dosyalarının içerisindeki "dex" klasörünün içerisindeki "classes.dex" dosyasını seçiyoruz.

3- Mavi ile seçili satır yüklediğimiz classes.dex dosyasıdır ve sizdeki ayalarında aynı bu resimde gördüğünüz gibi olması için gerekli düzenlemeleri yapın.

4-) Deploy butonuna basarak işleminizi tamamlayın.

19 Ağustos 2014 Salı

Delphi Formdaki nesnelerde gezinti

Merhabalar,

Zaman zaman lazım olan ve çabuk unutulan bir işlemi unutmamak için paylaşmak istiyorum.

Amacımız formdaki nesneler arasında taborder'larına göre yön tuşlarıyla veya tab tuşuyla gezinti.

1-) Formun KeyPreview özelliğini True yapınız

2-) Formun Object Inpector'den "ActiveControl" seçeneğinde ilk olarak hangi nesnede olmasını istiyorsanız onu seçin.

3-) Formun "OnKeyDown" eventine aşağıdaki kodu yazınız.

if (Key = VK_RETURN) or (Key = VK_DOWN) then SelectNext(ActiveControl,True,True);
if Key = VK_UP then SelectNext(ActiveControl,False,True);

13 Ağustos 2014 Çarşamba

XE6 PushEvents ve KinveyProvider Kullanımı

Merhabalar,

Aslında pek ilgi olmadığı için blogda paylaşım yapmayı bıracaktım, fakat Tahsin abi sağolsun arayıp paylaşımlardan dolayı teşekkür etti ve bende takip eden olduğunu anca o zaman farkına varmış oldum. Tahsin abiye selamlar buradan.

Gelelim asıl konumuza;

Bir çok arkadaşımız veritabanı entegreli uygulamalar yapmakta bunların çeşitli türleri mevcut google play üzerinde. Uygulamalarımız kullanıcı karşısına çıktıkça yenilenmeden duramayacağı için kullanıcılara bildirimler yapılması şarttır.
Bu bildirimleri Mail, Sms vs. birçok yöntemle yapabilirsiniz.
Ama bunların daha iyisi olarak android dünyasının bizlere sunmuş olduğu "Notification" olayı mevcuttur. Delphi XE5 ile bu işlemi Embarcadero bizlere component tadında sunmuş ve işlerimizi kolaylaştırmıştır. Fakat bence unuttular veya yetiştiremediler şöyle birşey var ki uygulama kapalı olduğu zamanda bu componentin çalışmaması başta bizleri hayal kırıklığına uğratmıştı.

"Brian Long" adlı geliştiricinin bloğunu inceleyenler bu kişinin bir takım java kodlarını delphi proje ile beraber derleyip background servisi yazdığını görmüştür fakat ben bir türlü tam anlamı ile anlayamamış ve o background servisi ile uygulamamdaki Notification componentini tetikleyememiştim.

Embarcadero XE6 sürümü ile bize birtakım componentler daha sunmuştur "BAAS Client" grubu altındaki bu componentler bizlere biraz önce bahsettiğim notification olayını Kinvey.com(Android) veya Parse.com(IOS) aracılığı ile hiç uğraşmadan kolay bir şekilde tetikliyebilmemizi sağlamaktadır.
Bu işlemide Google android mesaj servisi sayesinde yapmaktadır.

İşin kısası: Masaüstündeki exeden mesajınızı ve başlığını yazıyorsunuz Mobil cihazınıza bildirim olarak düşüyor :)

Neden bu kadar şeyi açıklama gereği duydum bende bilmiyorum fakat parmaklar yazdı derler ya o oldu işte.

Projemize ilk önce "Kinvey.com" da üyelik aldığınızı varsayarak başlıyorum. Daha bunu yapmayanlar için biraz önce yazdığım makaleden yararlanabilirler
Linki: http://brsatalay.blogspot.com.tr/2014/08/kinveycom-uyelik-alma-ve-kullanc.html


Gerekli Componentleri aşağıdaki resimde görebilirsiniz.



Öncekle 1 şey yaptırmak istiyorum tabi tercihe kalmıs KinveyProviderin aktif olayını istediğiniz gibide yapabilirsiniz ben checkboxun click olayı ile bağlamak istiyorum.

Toolbardan "View" sekmesine tıklayınız ve açılan menüden "LiveBindings Designer"i açınız aşağıda bir bölüm açıldıgını göreceksiniz.

Bu bölümde yapmanız gereken tek birşey var Chekbox'un altındaki "IsChecked" yazan yeri mouse ile tutup "PushEvents" ın Active yazan yerinin üstüne bırakmanız yani arada bir köprü(link) oluşturacas ki entegre calıssın.

Şimdi bu ekrani  kapatabilirsiniz.

"PushEvents" componentinin  "AutoActive" özelliğini false yapalım ki bu checkboxla aktifleştirelim



Ekranda gördüğünüz resimdeki KinveyProvider componentinin bazı ayarları vardır sıradaki işlemimiz önceki konularda oluşturdugumuz hesaplar ve kodları bu providere tanımlamak.

GCMAppOD = http://brsatalay.blogspot.com.tr/2014/08/google-messaging-service-ayarlamalar.html
Bu linkteki  2. resimdeki "Project Number"

AppKey, AppSecret, MasterSecret = Kinvey.com girişinde sağ alta mevcuttur

Örnek


Username, Password = http://brsatalay.blogspot.com.tr/2014/08/kinveycom-uyelik-alma-ve-kullanc.html adresindeki konuda oluşturduğumuz kullanıcıdır.


Resimdeki gibi Atamaları yapınız




Evet sıradaki atamaları bitirdiğimize göre sıradaki işlemimiz bu servisin yayınladığı mesajı yakalamaktır.

Java kodlarında olsa bir yığın kod yazmamız gerekecekti fakat işte delphiyi bu sebeble seviyorum bizim için zaman kaybetmememiz için standart kodları kendi hallediyor.

Evet olayı bölmeden devam..

"PushEvents" componentinin Event sekmesine gelerek sırayla eventlerimizi tanımlayalım.

procedure TMainScreen.PushEventsDeviceTokenRequestFailed(Sender: TObject; 
const AErrorMessage: string); 
begin //DeviceTokenRequestFailed Eventi hata anında tetiklenir.
  Memo1.Lines.Add('Hata Var!');
  BildirimMemo.Lines.Add(AErrorMessage);//Bu değişken sayesinde dönen hata mesajını yakalayabilirsiniz.
  BildirimMemo.Lines.Add('');
end;

procedure TMainScreen.PushEventsPushReceived(Sender: TObject; 
const AData: TPushData);
begin//Sorunsuz iletişim anında burası tetiklenir.
 BildirimGonder(AData.Message);//Bu değişkene Kinvey.com adresinden gönderdiğiniz mesaj gelecektir.
end;

procedure TMainScreen.BildirimGonder(T: String);
var
  Notification: TNotification;
begin
  if NotificationCenter.Supported then
  begin
    Notification := NotificationCenter.CreateNotification;
    try
      Notification.Name := 'Mesaj Başlığı';
      Notification.AlertBody := T;
      Notification.FireDate := Now;
      NotificationCenter.ScheduleNotification(Notification);
    finally
      Notification.DisposeOf;
    end;
  end
end;


Evet kod kısmımız  *.pas dosyası içerisinde bu kadar sorabilirsiniz "BildirimGonder" proceduresini neden tanımladın sebebi şu:

Uygulama kapalıyken bildirim sekmesine ileti düşer fakat uygulama açıkken herhangi bir "Notification" algısı çalışmadığı için bu işlemi manuel olarak yapmamız gerekmektedir.

Sıradaki işlemimizde "AndroidManifest.template.xml" içerisine uygulama izinleri ve servis ayarları gibi atamaları yapacağız.

"AndroidManifest.template.xml" dosyasını açıyoruz ve "<%uses-permisson%>" metini bulup altına biraz yer açıyoruz ki şu kodları yapıştırabilelim..


<!-- GCM connects to Google Services. -->

    <uses-permission android:name="android.permission.INTERNET" />



    <!-- GCM requires a Google account. -->

    <uses-permission android:name="android.permission.GET_ACCOUNTS" />



    <!-- Keeps the processor from sleeping when a message is received. -->

    <uses-permission android:name="android.permission.WAKE_LOCK" />



    <!--

     Creates a custom permission so only this app can receive its messages.



     NOTE: the permission *must* be called PACKAGE.permission.C2D_MESSAGE,

     where PACKAGE is the application's package name.

    -->

    <permission android:name="%package%.permission.C2D_MESSAGE"

    android:protectionLevel="signature" />

    <uses-permission android:name="%package%.permission.C2D_MESSAGE" />



    <!-- This app has permission to register and receive data message. -->

    <uses-permission

    android:name="com.google.android.c2dm.permission.RECEIVE" />



Nedir bu kodlar derseniz permission yazısından anlayabileceğiniz gibi kullanacağımız işlemlerin izinleridir bu şekil manuel ayarlamak yerine Delphi içerisinden seçerekte atayabilirsiniz tercih size kalmış.


Şimdi biraz aşağılardaki

</intent-filter>

        </activity>


kodları bulun ve hemen altına şu kodları yapıştırın.

<receiver

      android:name="com.embarcadero.gcm.notifications.GCMNotification" android:exported="true"

      android:permission="com.google.android.c2dm.permission.SEND" >

        <intent-filter>

          <action android:name="com.google.android.c2dm.intent.RECEIVE" />

          <category android:name="%package%" />

        </intent-filter>

      </receiver>



Bu kodlar yanlış anlamadıysam google messaj servisinden gelen yayını dinliyor

Son olarak şu kodu ekleyiniz.

<service android:name="com.embarcadero.gcm.notifications.GCMIntentService" />


Sıradaki ve son işlemimiz Mesajımızı göndermektir :)

Bu işlem için Kinvey.com'a giriyoruz ve resimdeki adımları izleyerek Mesaj gönderme ekranına geliyoruz.



Aşağıda gördüğünüz yerdeki yazı alanına istediğinizi  yazarak uygulamanızın kapalı oldugu cihaza notification bildirimi gönderebilirsiniz.



Makalelerimi takip ettiğiniz için teşekkürler. Pek takip eden olduğunu var saymıyorum ama ilgi gösterilirse bu notification gönderme işlemini masaüstü bilgisayardan nasıl gönderildiği ile ilgili yazı yazabilirim isteğe bağlı..

Bu resimde gönderdiğimiz metni görebilirsiniz :)

Kinvey ile Google Cloud Message entegrasyonu

Merhabalar,

Bu yazımda BAAS Client componentleri için ara yazıdır. Bu yazıda Kinvey ile Google Cloud Message entegrasyonu ara konusuna değineceğiz.

Peki bu entegrasyon ne için gerekli ben makalelerimde sadece Push Notification olayı için anlatacağım fakat googlenin sağladığı bütün servisler için geçerli oldugunu bilmeniz yeterlidir örneğin konum servisleri.

Adım 1: Kinvey.com giriş yapılır. Resimdeki adımlar izlenir.



Adım 2: Soldaki Configuration bölümü seçilir ve Sağda açılan "Google Cloud Messaging Configuration" Formu doldurulur.



Buradaki verileri http://brsatalay.blogspot.com.tr/2014/08/google-messaging-service-ayarlamalar.html linkindeki makaleden alıcas.

1. Edit = Linkteki 2. resimi incelediğinizde nereden alıcağımızı görebilirsiniz doğru yeri kopyalayıp yapıştırınız.

2. Edit = Linkteki son resimdeki "API Key" dir ve oradan kopyalayıp yapıştırınız.

Bilgileri girince aşağıya buton geldiğini göreceksiniz tıklayarak kayıt ediniz.

Entegrasyon işlemimiz bu kadar.


Google Messaging Service Ayarlamaları

Merhabalar,

Bu yazımda BAAS Client componentleri için ara yazıdır. Bu yazıda "Google Cloud Message API" için key oluşturacağız.

https://console.developers.google.com/project

Adresine giriş yapılır ve sol üsteki "Create Project" butonuna basarak ekranın ortasında açılan form doldurulur.



1. Edit yöneteceğiniz proje adıdır.
2. Edit uniq bir degerdir begenmesseniz yanındaki yenileme butonuna basmanız yeterlidir. "Create" butonuna basılarak devam edilir.

projeyi oluşturduğu zaman aşağıdaki resimdeki ekran karşınıza gelir bu ekranda size lazım olacak 2 değer vardır bunu bir yere not ediniz veya tekrar buraya gelip bakabilirsiniz

bunlar kırmızı kutu içerisine aldığım "Project ID" ve "Project Number" dir.



Aşağıdaki resimde göreceğiniz gibi soldaki menüden "APIS & AUTH >> APIS" tıklayarak açılan Listede "Google Cloud Messaging for Android" seçeneğini "ON" yani aktif duruma getiriniz.



Ardından yine soldaki menüden "Credentials" seçeneğine tıklayarak "CREATE NEW KEY" butonuna basınız. Açılan Ekranda "Server Key" tıklayarak gelen ekrandaki metin kutusuna "0.0.0.0/0" değerini girmeniz kafidir.



Bu sayede aşağıdaki resimde gördüğünüz gibi "API KEY" elde etmiş olduk.

Kinvey.com Üyelik alma ve Kullanıcı oluşturma

Merhabalar,

Bu yazımda BAAS Client componentleri için ara yazıdır. Bu yazıda "Kinvey.com" üzerinde kullanıcı developer olarak hesap açarak servisleri kullanması için kullanıcı oluşturacas.

Adım 1:
http://console.kinvey.com/ adresine girilir ve aşağıdaki form ile giriş bilgileri oluşturulur.


Adım 2:

"Sing Up" butonuna bastıkdan sonra aşağıdaki ekran karşınıza gelir ve "What's your app called?" bölümüne panelde yöneteceğiniz uygulama adı yazılır  ve aşağıdan "Other >> REST API" seçenekleri seçilir ve butona basılır


Adım 3:
 Dashboard ekranında aşağıdaki resimde gördüğünüz gibi sol üsteki "Addons" yazısına tıklanır ve açılan ekrandan "Core >>> Users" seçilir.


Adım 4:
Sıradaki karşımıza gelen ekranda sol menüden "Add User" tıklanarak bilgilerin girileceği ekran sağ tarafta mevcut hala gelir

Resimde göreceğiniz gibi ekrandaki yerleri kırmızı renkle yazdım ve bir sonraki makalemizde bu bilgileri kullanarak örnekler yapacağız


Bu işlem bu kadar basit.
Artık Kinvey.com üzerindeki REST API leri kullanmak için bir Kullanıcınız var

6 Ağustos 2014 Çarşamba

Delphi Mobile ve FireMonkey Flat Button Componenti

Merhabalar,

Embarcaderonun bizlere sunmuş olduğu TButton componenti malesef benim ihtiyaçlarımı tam olarak karşılayamamaktadır.

Öncelikli sebebi TButtonun şeffaf olmasıdır.

Bu sebebden dolayı "TFlatRectButton" adını vermiş olduğum componenti yazma ihtiyacı duydum. Bu component "TRectangle" nesnesinden türetilmiştir.

Bu "TFlatRectButton" componenti biraz acemi işi oldu fakat bana buton üzerinde istediğimi yapma özelliği sundu.

Güncel Proje Linki : https://code.google.com/p/delphi-mobile-flat-button/

İndirme Linki [06/08/2014] : http://s3.dosya.tc/server26/IzVFLm/FlatButtonSet.rar.html

FmxExpress: http://www.fmxexpress.com/free-flat-rectangle-icon-button-component-for-delphi-xe6-firemonkey-on-android-and-ios/




Bunlar nelerdir?
Resimde kullanacağımız 2 özelliği çizerek gösterdim.




1- ) "Text"

Bu özellik adından da anlaşıldığı gibi butonumuzun üzerinde gözükecek olan metindir.

2-) "Settings"

Kullanacağımız özellikleri "Settings" başlığı altında topladım.
Bunlar:

"ButtonSettings": 
  Bu bölümde butonun renk ayarlarını yapabilirsiniz.
  Eğer butonun üzerine geldiğinizde renginin sizin belirlediğiniz bi renk olmasını istiyorsanız "IsHoverColor" rengini değiştirin.
 Eğer butona tıkladığınızda butonun rengi sizin belirlediğiniz bi renk olmasını istiyorsanız "IsPressedColor" rengini değiştirin.

"IconSettings":
Bu bölümde button içerisinde kullanacağınız resim ayarlarını yapabilirsiniz.
  Icon : Butonda gözükecek olan resim.
  Align: Butona eklenmiş olan resimin butonda hangi pozisyonda duracağını seçmelisiniz.

"TextSettings":
Bu bölümde butonda gözükecek olan metinin ayarlarını yapabilirsiniz.
  Font: Gözükecek olan metinin standart font ayarlarını yaptığınız bölümdür.
  TextColor: Gözükecek olan metinin rengini buradan ayarlayabilirsiniz.
  TextHorizontal: Gözükecek olan metinin yatay olarak hizalamasını buradan ayarlayabilirsiniz.
  TextVertical: Gözükecek olan metinin dikey olarak hizalamasını buradan ayarlayabilirsiniz.

Örnek Butonlar