Sending SMS programmatically on IOS!

Mobil uygulamalarımız artık, sadece iphone değil, ipad, ipod touch gibi diğer cihazlarda çalışıyor. Programsal olarak SMS göndermeden önce, uygulamanın yüklü olduğu device’ın SMS göndermek için uygun olup olmadığını (Sim kartı takılı vs.) anlamaya ihtiyacımızı var.
SMS gönderip gönderemeyeceğini anlamak için IOS Core Framework’lerinden CoreTelephony framework’ünü kullanmak gerekli.
Bu Framework’ü Xcode’da Projemize eklemek için;
Proje’nin Target’ı seçilir, ve Build Phases’den Link Binary With Libraries kısmına gelinir.

adding framework to project in XCode.

Burada bulanan framework’ler, projenin kullandığı frameworklerdir. IOS projelerinde UIKit, Foundation ve CoreGraphics framework’leri baz olarak proje oluşurken ekli gelir.

Yeni bir framework eklemek için ‘+’ tuşuna basarak, framework seçilir. CoreTelephony framework’ü Developer SDK’sı ile gelen bir framework, bu nedenle CoreTelephony yazıp aratırsanız, IOS klasörünün altında gelecektir.

Kullandığınız SDK altındaki diğer frameworkleri incelemek için;
örneğin burada iphoneOS ve 5.1 sdk’da bulunan frameworklere dosya sisteminde aşağıdakine benzer bir yolla erişebilirsiniz.
—– Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.1sdk/System/Library altındaki Frameworks ya da Private Frameworks klasörleri altında bulabilirsiniz.

Konumuza geri dönersek 😉 Eklediğiniz framework’ü projenin altında görebilirsiniz. Genelde framework’ler dizin olarak “Frameworks” klasörünün altında yer alır.
Sürükleyip, bu klasörün altına alabilirsiniz.

Eklediğimiz bu framework’teki CTTelephonyNetworkInfo ve CTCarrier sınıflarına ihtiyacımız var bu nedenle, bu sınıfları eklemeden önce, framework’teki referanslarını import etmeliyiz.

#import <CoreTelephony/CTCarrier.h>
#import <CoreTelephony/CTTelephonyNetworkInfo.h>

Device’da herhangi bir sim kartının katılı olup olmadığını ya da bir operatör bilgisinin alınıp alınamadığını, aşağıdakine benzer bir method yazarak anlayabilirsiniz. Burada mobileNetworkCode‘un nil yada boş olup olmadığına bakarak, SMS gönderip gönderilmeyeceği anlaşılabilir.

- (BOOL) canDeviceSendSMS{
CTTelephonyNetworkInfo *networkInfo = [[[CTTelephonyNetworkInfo alloc] init] autorelease];
CTCarrier *carrier = [networkInfo subscriberCellularProvider];

if(nil!=[carrier mobileNetworkCode]){
return YES;
}else{
return NO;
}
}

Bu kontrolleri yaptıktan sonra, SMS gönderme ekranını açıp ve esas işi yapan MessageUI framework’ünü de aynı şekilde, Xcode üzerinden proje target’ına eklemeniz ve, kullanırken aşağıdaki şekilde, import etmeniz gerekiyor.

#import <MessageUI/MessageUI.h>

if([MFMessageComposeViewController canSendText]){
MFMessageComposeViewController *controller = [[[MFMessageComposeViewController alloc] init] autorelease];

controller.body = "First SMS Body";
controller.recipients = [NSArray arrayWithObjects @"02123456789", nil];

controller.messageComposeDelegate = self;
[self openSMSSendingModalView:controller];
}else{
[self showSMSSendingErrorMessage];
}

//METHODS FOR PUSHING And DISMISSING MESSAGE UI WINDOW
-(void) openSMSSendingModalView:(MFMessageComposeViewController*) composeView{
[[[UIApplication sharedApplication] delegate] window] presentModalViewController:composeView animated:YES];
}

-(void) dismissSMSSendingModalView{
[[[UIApplication sharedApplication] delegate] window] dismissModalViewControllerAnimated:YES];
}

-(void) showSMSSendingErrorMessage{
//HANDLE SMS sending error to fill here.
}

- (void)messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult)result {
switch (result){
case MessageComposeResultCancelled:
DLog(@"Result:SMS cancelled");
//DO SOMETHING ABOUT IT!
break;
case MessageComposeResultSent:
DLog(@"Result:SMS sent");
break;
case MessageComposeResultFailed:
DLog(@"Result:SMS failed");
//DO SOMETHING ABOUT IT!
break;
default:
DLog(@"Result:SMS not sent");
//DO SOMETHING ABOUT IT!
break;
}
[self dismissSMSSendingModalView];
}
///***************/////

Yukarıda [[[UIApplication sharedApplication] delegate] window] kodu ile uygulamamızın window’una erişerek, Mesaj göndermeye yarayacak controller’ımızı yani MFMessageComposeViewController class’ının bir objesini presentModalViewController ile ekranların gösterim stack’inin en üst sırasına koyuyoruz.

@interface SMSSender : NSObject
{
......
......
}

SMS gönderme işlemimizin sonucu alabilmemiz için, MFMessageComposeViewControllerDelegate’i olmamız, ve bu protocol’ü (java’da interface olarak tabir edebiliriz) sınıfımıza eklememiz (örneğin aşağıdaki şekilde) ve yukarıdaki gibi – (void)messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult)result {} methodu ile bu işleminin sonuçlarına göre aksiyon almamız gerekiyor. SMS gönderme işlemi tamamlandıktan sonra bu method otomatik olarak tetikleniyor ve MessageComposeResult tipinde sonuçlar döndürüyor.

MessageUI ile ilgili daha detaylı bilgi almak için buradan devam edebilirsiniz! 🙂

Kolay Gelsin!

Advertisements

Cheers!

Paylaşmak.. anı, kahkahayı paylaşmak, bir parça bisküviyi, bir dilim ekmeği, anlam yüklü bir
bakışı paylaşmak. Bazen soğuğu, yağmuru paylaşmak…Bir filmi, müzikteki bir notayı paylaşmak, aslında hayatı paylaşmak.

Paylaşımlar olmadan, ne anlamı var ki hayatın. Bir bütünlükte, hem kendin, hem parçadan ziyade bir bütün olmak,
Arkadaşlıklar, kocaman bir aile yapıyor insanı. Birilerini kendinden görüp onları düşünmek, onlarla ilgilenmek, hiç ummadığın bir anda onların seni hatırladığını, düşündüğünü bilmek..

Gözü kapalı güvenebilmek, dostum diyebilmek. Birilerine gerçekten inanabileceğini hissetmek, o güven duygusundan güç almak. Hala iyi insanların hayatta olduğunu bilerek yaşayabilmek çok güzel bir duygu.

Aynı gemide olabilmenin huzuruna! Arkadaşlığa! 😉

Cheers to be on the same board, (on the same friend ship=)) Cheers to FriendShip!

Lay the favorite!

Geçenlerde, “Lay the favorite”, (“Bahse var mısın?”) filmine gittim, Bahis tutkunu bir amca, sayılarla arası iyi olan bir kızı işe alır ve hikaye başlar. Film eğlenceliydi, hayatları hızlı bir şekilde aldıkları kararlara, değiştirdikleri oranlara, kazandıkları ve kaybettikleri yüklü miktar paralara indeksliydi karakterlerin. Kural şuydu: Favorinin kazanması değil, kaybetmesi üzerine bahse gir! Asıl yüklü bahis, “kaybeden” loser olarak görünenlerin kazanmasıyla, elde edilir. Çünkü tüm insanların hayatta görmedikleri küçük mantık hataları vardır, bunu yakala ve onun üzerine oyna!

Nitekim, filmin sonunda, tüm hayatlarını kazanması ihtimali çok düşük olan bir takımın maçı kazanmasına bağladılar.. Sonunu söylemeyeceğim tabi. Filmi izledikten sonra, arkadaşım bana döndü ve şunu sordu: “Ee bu filmi niye çekmişler?”, haklıydı insanda böyle bir izlenim uyandırıyordu film. İkimiz beraber cevap verdik soruya: Eğlenmek için 🙂 Aslında filmin sonuna doğru esas fikir kendini açığa çıkarıyordu: Tüm bu bahisler, aslında heyecanlanmak, hayatını birşeye bağlamak, kazanmanın sevinci ve kaybetmenin korkusu arasındaki o heyecanı tatmak içindi.

Kazanınca, havalara uçup kaybedince deli gibi kızgın olmak, tüm o duyguları uçta yaşamanın coşkusu, baş karakterimiz Bruce Wills amcamız bunu içten içe çok seviyordu 🙂 Birşeylerin içinde olmanın heyecanı, aslında bence  hepimizin aradığı, içinde tutkuyla olabileceği, hem kendini bulup, hem de kendini delice kaybedebileceği bir şeyler…

Tutku, insanın içinden gelen o motivasyon duygusunu yakalayabilmesi için, hem iyi olduğu, hem kendini bulduğu hem de içinde kaybolup gittiği birşeye sahip olması . Bu fikri anlatıyordu, bahis tutkusu olan bu insanların hem kaybetmekten deli gibi korktuğu, hem de kazanma hissini ne pahasına olursa olsun yaşamak istedikleri için birşeylerin bağımlısı olmaları..