Baştan belirtmek zorundayım, iOS uygulamalarına otomatik yenilenen abonelikleri entegre etmek tam bir baş ağrısı. Her ödeme yönetminin zor yanları olabilir, ancak iOS uygulama mağazası üstünden yapılan otomatik tekrar eden abonelikleri yönetmek çok daha karışık bir mevzu.

Baştan başlamak gerekirse, otomatik ödeme yönetime ile yapılan abonelikler diğer tür ödemelerden farklı. "iOS uygulama içi satış entegrasyonu ve ödemeleri doğrulamak" yazısında iOS uygulama mağazası ödemelerini entegre etmek ve ödeme türleri üzerine bir yazı yazmıştım. Otomatik tekrar eden abonelik dışındaki diğer ödeme türlerinin entegresyonunu o yazıdan inceleyebilirsiniz. Ancak bu konuda bilginiz yoksa önce o yazıdaki bilgilere ihtiyacınız olacak, önce o yazıyı incelemenizi tavsiye ederim.

Otomatik tekrar eden abonelikler sayesinde, kullanıcınızın iznini aldıktan sonra iTunes aracılığıyla, 1 haftalık, 1 aylık, 2, 3, 6 veya 12 aylık periyodlarla otomatik şekilde ödemelerini sağlayabiliyorsunuz. Bir ürün için kullanıcıyı elde tutmak açısından diğer, tek seferlik satın almalardan çok daha değerli. Kullanıcınız ödemeyi ilk sefer yaparken satın almayı yapıyor ve sonrasında servisi iTunes üstünden iptal edilene kadar ödemeler otomatik tekrarlanıyor. Siz kazancınızı Apple'dan alıyorsunuz.

Devamını Oku →
iOS uygulaması geliştirmek bu günlerde oldukça popüler. Turkiye'de de birçok oyun geliştiricisi iOS platformlara yönelmeye başladı.

Uygulamanızda geliştireceğiniz gelir modeliniz bir şekilde Apple ödeme sistemine bağlanmak zorunda çünkü Apple uygulama geliştirici kontratınıza göre uygulama üzerinde yapacağınız herhangi bir satış modelini Apple ödeme sistemi üzerinden yapmak durumundasınız. Apple uygualama içi ödeme sistemini kullanmanın avantajları ve dezavantajları var.

En büyük dezavantajı her ödemede, Apple'a 30% vermek. Bunun dışında ödemeleri doğrulamanın teknik zorlukları da var. Bunun dışında avantajları, dezavantajlarını unutturacak kadar değerli. Çünkü iOS üstünden yapılacak bir alışverişte herhangi bir ödeme bilgisi sorgusu olmayacak, kullanıcılar ödeme bilgilerini zaten sistemde tanıtmış durumda. Yani bir ödeme kabul edebilmek aslında sadece bir onaylama kutusuna indirgeniyor. Çoğu durumda tek onay sorusuna cevap vermek ve Apple kimlik şifresini doğrulamakla ödeme sağlanabiliyor.

Bir diğer avantaj da, herhangi bir ödeme yönetim sistemi, banka vs gibi bir entegrasyonla uğraşmak durumunda olmamanız.

Şimdi gelelim entegrasyona, iOS geliştirici (objective-c) tarafında gerekli entegrasyonu StoreKit denilen bir Apple arabirimi ile iOS uygulamanıza yapmanız gerekiyor. Bazi amatör programcılar veya sunucu bağımsız uygulama yazmaya çalışan geliştiriciler ya gözden kaçırıyorlar ya da gerek görmüyorlar ama aslında StoreKit'den aldığınız tüm fatura kopyalarını (receipts) Apple sunucularına göndererek doğrulamanız gerekiyor.

Devamını Oku →
23 Ağustos Perşembe ´12   —   5 Yorum
Daha önce php'de iki tarihi karşılaştırmayı anlatmıştımhttp://mfyz.com/phpde-tarih-karsilastirma ancak iki tarih arasındaki ay, gün, yıl farkını kullanmanız gerektiğinde, php'nin tarih-zaman sınıfını kullanarak iki tarih arasındaki zaman farkını istediğiniz periyodda hesaplatabilirsiniz.

Bu yönetmle hesaplayacağınız tarih farkının iki genel kullanımı vardır. Birincisi hesaplamalarınızda iki tarih arasındaki geçen zamana göre yaptığınız bir kuralınız vardır. Mesela bir blog yazınızın 1 aydan önce yazıldığını denetlemek ve buna göre "Bilgiler geçerliliğini yitirmiş olabilir" gibi bir not göstermek istiyorsunuz. Bunun için şu an ile yazının yazılma tarihi arasında 1 ay olup olmadığını sorgulayabilirsiniz.

Bu hesaplama aslında basit bir matematiksel bir hesap gibi görünse de aslında ay uzunluğu, artık yıl hesabı gibi nedenlerden dolayı ve her zaman 1 ay = 30 gün olmaması nedeniyle biraz daha karışık olabiliyor. Dolayısıyla anlattığım yöntem gibi hazır yöntemleri kullanarak bu hesaplamaları doğru şekilde yapabilirsiniz.

Şimdi basit bir kod ile örnekleyeceğim.
$now     = new DateTime();
$created = new DateTime($_entry['created_at']);
$diff    = date_diff($now, $created);
$days    = $diff->format('%d');
$hours   = $diff->format('%h');
$mins    = $diff->format('%i');

$diffStr = NULL;
if ($days > 0) {
     $diffStr .= $days . ' gün';
}
if ($hours > 0) {
     $diffStr .= ' ' . $hours . ' saat';
}
if ($mins > 0) {
     $diffStr .= ' ' . $mins . ' dakika';
}
Yukarıdaki kodda $diffStr değişkeni, yazınızın kaç dakika, saat, gün önce eklendiğini gösterecektir. Eğer isterseniz ayı, yılı da ekleyerek herhangi bir tarih formatını "3 gün 8 saat 3 dakika önce" şeklinde bir metine çevirebilirsiniz.
Bir web uygulaması/sitesi geliştiriyorsanız verilerinizin eklenme, güncellenme tarihleri genelde uygulamanın işleyişinde büyük rol oynar.

Örnek bir senaryo olarak, bir günlük sitesi hazırladınız ve günlükte görünen yazılarınızın son güncellenme tarihlerine göre son güncellenen yazıları listelemek isteyebilirsiniz. Veya bir e-ticaret sitesinde ürünleri belirli günlerde yayına çıkarmak istiyorsunuz ama bütün ürünleri her gün tek tek ekleyememeceğinize göre her ürünün yayına çıkış tarihini ayarlamak isteyebilirsiniz. Bunun gibi bir çok örnek bulabilirsiniz verilerin tarihleri üzerinden işlem yapmak isteyeceğiniz.

Yani aslında tarihlerle çalışmak bu ısın her noktasında. Dolayısıyla tarih eşleştirmeleri yapmak veya iki tarih/zaman arasındaki farkı bulmak gibi birçok is yapıyor olacaksınız yukarıdaki veya benzer senaryoları kodlarken. Size bu dökümanda php ile tarih eşlestirmesi yapmayı göstereceğim.

Benzer şekilde tarih karşılaştırmasını mysql'de yapmak için yakında başka bir yazı yayınlayacağım.


Tarih karşılaştırması denince akla çok basit örnekler gelebilir, örneğin X tarihi Y'den önce mi sonra mi? gibi, bunu string karşılaştırması yaparak da yapabilirsiniz. MySQL'de sürekli gördüğünüz "Y-m-d H:i:s" formatı aslında tam olarak bu ihtiyacı karşılayabılır, Yani o tarih formatları string'e de çevrilse string karşılaştırmasında tarihsel sırayı doğru yansıtacaktır.
if ("2012-05-05" < "2012-05-10") print 'önce';
Ama tarih karşılaştırmaları her zaman böyle once/sonra karşılaştırması değil, 1 haftadan önce mi? veya son 1 aylık veriler... gibi daha karışık örneklere dönebilir. Böyle karışık tarih karşılaştırmaları eğer sihirli fonksiyonlar kullanılmazsa baş ağrısı olabilecek bir konu, çünkü tarihler arasındaki farklar sadece saat dakika saniye gibi matematiksel hesaplarla hesaplanması kısa kodlarla yapılacak bir şey değil. Tabi ki yapılabilir fakat tek satırda ya da tek fonksiyon ile bunu yapmak varken anlamsız. 1 ay öncesi demek her zaman son 30 gün demek değildir mesela. Veya Geçen hafta Pazartesi'yi hesaplamak kolay değildir.

Bu tarz karışık karşılaştırmalar için php'de her zaman kullandığım bir fonksiyon olan strtotime() fonksiyonunu tarih karşılaştırması yapmak için de kullanırım. Örnegin X tarihinin 3 günden önce olup olmadigini:
if (strtotime($X) < strtotime('-3 days')) print 'eski';
veya "3 days ago" stringini matematiksel tarih değeri yani timestamp'e çevirerek karşılastırabiliriz. Farkettiyseniz $X değişkenini de strtotime fonksiyonundan geçiriyorum çünkü o da string değeri olduğunu varsayıyorum. Strtotime fonksiyonunun güzel yanı, herhangi bir tarih formatını timestamp'e çevirebiliyor olması. Yani amerikan tarih formatı da yazsanız, bizim kullandığımız formatta da yazsanız php'nin bunu çeviriyor olması. Bundan daha değerli olarak gördüğüm, söylem olarak kullandığımız tarihleri de (2 gün önce, 1 saat sonra, geçen cumartesi, önümüzdeki pazar saat 2) gibi stringleri de doğru olarak timestamp'e çevirebiliyor olması. Bunu kullanarak istediğiniz tarih karşılaştırmasını yapabilirsiniz.

Mesela daha karışık bir örnek olarak:
if (strtotime('last monday 1pm') < strtotime($post_date)) print 'yayinda';
Bu ufak kontrolle, bütün hafta yazdığınız yazıları bir sonraki hafta pazartesi öğlen 1'de herkese görünür hale getirir. Kontrol'de su anki tarihe göre bir önceki haftanın pazartesi saat öğlen 1'in zaman değeri ile yazıların tarihlerini kıyaslıyoruz. Örnek veriyorum Bugün salı ve siz bi yazı yazdınız, o tarih değeri o haftanın pazartesisinden küçük olmadığı için yukarıdaki kodda if'in içindeki ilk tarih bir sonraki pazartesiye kadar değişmeyecektir. Bir sonraki pazartesi saat 1'de o anın tarihine dönüşeceği için bu salı günü yazdığınız yazı görünür hale gelecektir.

Popüler Etiketler

css api generator ie browser wireless share mail newsletter subscription social blog subversion svn code development kontrol yapıları if while php pear mdb2 prepare execute mysql mssql pgsql kitap html meta language css3 support facebook opengraph optimization fql tebrik firefox download lifestream rss mfyz proje seo search developer url service tool google parse xml network internet apple macosx license osx player auth http ubuntu cache ios iphone ipad app store store in-app purchase purchase verification integration storekit itunes connect itunes server notebook laptop lisans graph pharma hack wordpress htaccess apache route router mod_rewrite chart grafik sql injection javascript js date tarih nedir twitter doritos kampanya tytz wanda örnek kod gimp cookie assets connect box switch workspace iOS digital portfolio zaman mootools browsers phpstorm jetbrains ide editor cms internet explorer html5 query regex icon ikon xhtml media sosyal logo oyun screen konsol terminal bootstrap jquery widget windows ruffles ui ux icons job startups music statistics plugin medya istatistik compile diff optimizasyon analyse procedure framework deployment version control git less open source session subdomain banner calendar login app mobile imza signature ajax compiler linux on-the-fly form radio style applications free www redirect crossdomain kurulum nasıl sitemap fstab ntfs link insanlar webkit export ipucu table button coding dokuman select db database object spam web app howto input textarea design xmlhttprequest