WEB SERVİS İLE TC KİMLİK SORGULAMA :MobileCoder I MobileCoder.NET I Mobil Programlama I Android Programlama I Mobil Geliştiricilerin Buluşma Noktası I www.MobileCoder.Net

WEB SERVİS İLE TC KİMLİK SORGULAMA

30.05.2015 tarihinde Android Programlama kategorisine eklenmiş, 1.464 views Kişi Okumuş ve 0 Yorum Yapılmış.

Bir uygulamamız var ve kullanıcı kaydı yapmak istiyoruz ve kaydı yaparken kullanıcın bilgileri bizim için çok önemli.

Bu sebeple TC Kimlik numara doğrulaması yapmamız gerekebilir.Bunun için bir tc  kimlik numarasını doğrulama servisini kullandım.

Sonuç olarak aşağıdaki gibi bir yapı oluşturdum.

1

Yaptığım uygulamayı anlatmadan önce Web Servis teriminden bahsetmekte fayda olduğunu düşünüyorum.Web Servisler, başkalarının alıp kullanması ve istediği sonucu alması için hazırlanırlar. Birileri bir web servis hazırlar, bize o servisin WSDL adresini verirler ve biz de bu adrese erişip gerekli parametreleri göndeririz. Sonucunda bize bir değer döner. Ben uygulamamda aşağıdaki webservis adresini kullandım.

https://tckimlik.nvi.gov.tr/Service/KPSPublic.asmx

Kullandığım araçlar;
*Android Stüdio
*Anroid Projesi
*Web servisin kendisi(https://tckimlik.nvi.gov.tr/Service/KPSPublic.asmx)
*Web servisi çağırabilmek için KSAOP2 kütüphanesi
Projem Nasıl Çalışıyor?
1. Kullanıcıdan, TC Kimlik No, Ad Soyad ve Doğum Yılı bilgilerini alıyoruz. Bu bilgileri TC Kimlik No doğrulayan servise XML olarak göndereceğiz.
2. Servisin bulunduğu web server hazırladığımız Soap XML Request’i ulaşacak.
3. Servis bizim gönderdiğimiz XML’i deserialize ederek içerisinden TC Kimlik No, Ad, Soyad ve Doğum Yılı bilgilerini ayıracak.
4. Servis kendi içerisinde doğrulama sürecini işletecek ve sonucunda kendi dilinde oluşan objeler vb. ni serialize ederek Soap XML Response üretecek.
5. Soap XML Response bizim uygulamamıza gelecek.
6. Biz de uygulamamızda, T.C. Kimlik No Doğrulama servisinin bize döndüğü XML dosyasını deserialize ederek, servisin yanıtını yorumlayacağız.

KSOAP2 Kütüpjanesini  İmport Etmek
Web Servis çağırma aşaması için ihtiyacımız olan şey ksoap2 kütüphanesi demiştik.
File->Project Structure ->app->depemcies
Adsız
Adımlarını izleyerek sağ tarafta çıkan artı işaratine tıklayarak indirdiğim Ksoap2 kütüphanesini yükleyip import ettim.Daha sonra Project menüsünden Clean’e seçip değişikliklerin geçerli olmasını sağladım.

package net.mobilcoder.projem;
import java.net.ConnectException;
import java.net.UnknownHostException;
import java.net.UnknownServiceException;
import java.util.Locale;
import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.AndroidHttpTransport;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.net.ConnectivityManager;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

Projeye başlayalım
İlk olarak android projesi oluşturdum.Projeyi oluşturduktan sonra,doğrulma işlemini yapacağımız activity main ismini,bunun sonucundada elimizde aşağıdaki activity oluşmuş oluyor.

public class MainActivity extends Activity {

Dana sonra üzerinde çalışacağım main_acticity.xml layout dosyasını aşağıdaki gibi düzenliyorum.Ben parametre olarak geçeceğimiz değerleri alan 4 edittext ve servis çağrısı yapacağımız bir buton, edittexteki değerleri sıfırlayan bir buton ve program hakkında bilgi veren bir buton ekledim.Kaynak dosyasının içine photoshopta hazırladığım resimleri kopyalıyor ve layaoutuma imageview ekleyerek tasarımı tamamladım.

3

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="fill_parent"
 android:layout_height="wrap_content"
 android:orientation="vertical"
 android:weightSum="1" >

 <EditText

 android:id="@+id/tcknArea"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:hint="@string/tckn_title"
 android:inputType="number"
 android:maxLength="11"
 style="@android:style/Animation.Toast" />

 <EditText
 android:id="@+id/nameArea"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:hint="@string/name"
 android:singleLine="true"
 android:text="" />

 <EditText
 android:id="@+id/surnameArea"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:hint="@string/surname"
 android:singleLine="true"
 android:text="" />

 <EditText
 android:id="@+id/yil"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:ems="10"
 android:hint="@string/dogumyili"
 android:inputType="number"
 android:maxLength="4" />

 <Button
 android:id="@+id/button1"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:onClick="controlTCKN"
 android:text="@string/sorgu"
 android:background="#ffce000c"
 android:enabled="true"
 android:focusable="false"
 android:singleLine="false"
 android:clickable="true"
 android:textColor="#ffffffff"
 android:elegantTextHeight="false" />

 <LinearLayout
 android:orientation="vertical"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:layout_gravity="center_horizontal"></LinearLayout>

 <Button
 android:layout_width="233dp"
 android:layout_height="wrap_content"
 android:text="Sıfırla"
 android:id="@+id/buton3"
 android:layout_gravity="center_horizontal"
 android:background="#ff253eff"
 android:clickable="true"
 android:textColor="#ffffffff" />

 <Button
 android:layout_width="123dp"
 android:layout_height="wrap_content"
 android:text="Hakkında"
 android:id="@+id/button2"
 android:background="#ff0fc2ff"
 android:textColor="#ffffffff"
 android:layout_gravity="center_horizontal" />

 <ImageView
 android:layout_width="185dp"
 android:layout_height="165dp"
 android:id="@+id/imageView"
 android:layout_gravity="center_horizontal"
 android:background="@drawable/ic_launcher" />

</LinearLayout></pre>

Şimdi MainActivity.java içerisine yazdığımız kodları ve açıkalamlarından bahsedeceğim.
Önce servise ilişkin static değişkenlerimizi tanımlıyoruz;

</pre>
public class MainActivity extends Activity {

private static final String NAMESPACE = "http://tckimlik.nvi.gov.tr/WS";
private static final String URL = "https://tckimlik.nvi.gov.tr/Service/KPSPublic.asmx?WSDL";
private static final String SOAP_ACTION = "http://tckimlik.nvi.gov.tr/WS/TCKimlikNoDogrula";
private static final String METHOD_NAME = "TCKimlikNoDogrula";

Değişkenlerden tek tek bahsetmek gerekirse;
* NAMESPACE: değişkeni, web servisin isim alanını ifade eder.
* SERVICE_URL: Bu bilgi bizim çağıracağımız servisin bilgisidir.
*DOGRULA_METHOD: Bu değişken, çağıracağımız servisin hangi metodunu kullanacağımızı ifade eder.
*SOAP_DOGRULA_ACTION: Aksiyon bilgisi de namespace ve çağıracağımız metodun birleşmesinden oluşur.

</pre>
package net.mobilcoder.projem;

import java.net.ConnectException;
import java.net.UnknownHostException;
import java.net.UnknownServiceException;
import java.util.Locale;
import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.AndroidHttpTransport;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.net.ConnectivityManager;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends Activity {

private static final String NAMESPACE = "http://tckimlik.nvi.gov.tr/WS";
private static final String URL = "https://tckimlik.nvi.gov.tr/Service/KPSPublic.asmx?WSDL";
private static final String SOAP_ACTION = "http://tckimlik.nvi.gov.tr/WS/TCKimlikNoDogrula";
private static final String METHOD_NAME = "TCKimlikNoDogrula";

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);//layaotumuz

Button buton2=(Button)findViewById(R.id.button2);
buton2.setOnClickListener(new View.OnClickListener(){
public void onClick(View v) {
AlertDialog alertDialog=new AlertDialog.Builder(MainActivity.this).create();

alertDialog.setTitle("HAKKINDA");
alertDialog.setTitle("HAKKINDA:Erkan Tuna erkantuna_54@hotmail.com");
alertDialog.setMessage("Bu uygulama T.C. Nüfus ve Vatandaşlık İşleri Genel Müdürlüğü tarafından kullanıma sunulan web servisi üzerinden doğrulama yapmaktadır.");alertDialog.setButton(AlertDialog.BUTTON_NEUTRAL, "Tamam",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {

}
});
alertDialog.show();
}
});

}

public void controlTCKN (View view) {

final EditText tcknArea = (EditText) findViewById(R.id.tcknArea);
String tckn = tcknArea.getText().toString().trim();
final EditText nameArea = (EditText) findViewById(R.id.nameArea);
String name = nameArea.getText().toString().trim().toUpperCase(new Locale("tr_TR"));
final EditText surnameArea = (EditText) findViewById(R.id.surnameArea);
final String surname = surnameArea.getText().toString().trim().toUpperCase(new Locale("tr_TR"));
final EditText birthDateArea = (EditText) findViewById(R.id.yil);
final String year = birthDateArea.getText().toString().trim();
nameArea.setText(nameArea.getText().toString().toUpperCase());
surnameArea.setText(surnameArea.getText().toString().toUpperCase());
nameArea.setText(nameArea.getText().toString().toUpperCase());

Button buton3=(Button)findViewById(R.id.buton3);
buton3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
tcknArea.setText("");
nameArea.setText("");
surnameArea.setText("");
birthDateArea.setText("");
}
});

if(checkInternetConnection()){
if(name.isEmpty() || surname.isEmpty() || tckn.isEmpty()){
Toast.makeText(MainActivity.this,"Lütfen gerekli alanları doldurunuz", Toast.LENGTH_SHORT).show();
}else {
new controlTCKNService().execute(tckn, name, surname, year);
}
} else {
Toast.makeText(MainActivity.this,"Lütfen internet bağlantınızı kontrol ediniz", Toast.LENGTH_SHORT).show();
}
}

private boolean checkInternetConnection() {
ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
boolean result = false;
if (cm.getActiveNetworkInfo() != null && cm.getActiveNetworkInfo().isAvailable() && cm.getActiveNetworkInfo().isConnected()) {
result = true;
} else {
result = false;
}
return result;
}

private class controlTCKNService extends AsyncTask<String, Void, Void> {

private String resultText;
private boolean result;
private ProgressDialog progressDialog = new ProgressDialog(MainActivity.this);
private AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);

AlertDialog alert;
protected void onPreExecute() {
progressDialog.setMessage("Kontrol ediliyor...");
progressDialog.show();

}

protected Void doInBackground(String... urls) {
SoapObject Request = new SoapObject(NAMESPACE, METHOD_NAME); // istek oluşturuyoruz,
//Bu Soap mesajı, aldığı parametreleri ayrıştırır ve ilgili servise gider. Daha sonra bir request adlı nesneye propertyler ekledik.
Request.addProperty("TCKimlikNo",urls[0]);
Request.addProperty("Ad", urls[1]);
Request.addProperty("Soyad", urls[2]);
Request.addProperty("DogumYili", urls[3]);

SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);//SoapEnvelope nesnesi oluşturduk ve versiyon olarak 1.1 sürümünü kullandık
envelope.dotNet = true;//.Net servisi kullanacağımızı belirttik ve bu envelope nesnesine request nesnesini ekledik.
envelope.setOutputSoapObject(Request);
AndroidHttpTransport androidHttpTransport = new AndroidHttpTransport(URL);// web servis urlmizi veriyoruz.nevi protokol tanımladık. Alışverişi buradan sağlayacağız.
try
{
androidHttpTransport.call(SOAP_ACTION, envelope);//web servisi çağırdık
SoapObject response = (SoapObject) envelope.bodyIn; //web service den gelecek sonuçları kullanmak için obje yarattık
result = Boolean.parseBoolean( response.getProperty(0).toString());
if(result) {
resultText ="TC Kimlik Numarası Geçerli";
}else{
resultText = "TC Kimlik Numarası Geçersiz";

}
}
catch(ClassCastException e){
result = false;
resultText = "TC Kimlik Numarası Geçersiz";
}
catch(ConnectException e){
result = false;
resultText = "İnternet bağlantınız kesilmiş ya da TCKN Servisi devre dışı kalmış olabilir.";
}
catch (UnknownHostException e) {
result = false;
resultText = "İnternet bağlantınız kesilmiş ya da TCKN Servisi devre dışı kalmış olabilir.";
}
catch (UnknownServiceException e) {
result = false;
resultText = "İnternet bağlantınız kesilmiş ya da TCKN Servisi devre dışı kalmış olabilir.";
}
catch(Exception e){
result = false;
resultText = "İnternet bağlantınız kesilmiş ya da TCKN Servisi devre dışı kalmış olabilir.";
}

return null;
}

protected void onPostExecute(Void unused) {

progressDialog.dismiss();
alert = builder.setMessage(resultText)
.setCancelable(true)
.setTitle("Sonuç")
.setPositiveButton("Tamam", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
}
}).create();
alert.show();

}

}

}

Daha sonra oluşturduğumuz nesneleri id’leri ile birbirine bağladım.Bu ıd değerleri de xml sayfasının kod kısmında bulunuyor.Daha sonra bu nesneleri tanımladım. Sonra SoabObject nesnesi olulturdum ve 4 parametre verdim.Bu soap mesajı aldığı parametreleri ayrıştırır ve ve ilgili servise gider.Daha sonra bir request adlı nesneye property ekledim. Yani Soap request inputlarımızı hazırladım. Daha sonra SoapEnvolope nesnesi oluşturdum ve versiyon 1.1 sürümünü kullandım. Daha sonra oluşturduğum requestleri web servise gönderme zamanı.Bunun için
Artık oluşan requesti web servise gönderme zamanı. Bunun için try cath bloğu içindeki kodları kullandım.
Uygulumamın çalışır durumdaki son halinden bir görüntü ve play store linki verilmiştir.

Play Store Linki:

https://play.google.com/store/apps/details?id=net.mobilcoder.projem&rdid=net.mobilcoder.projem

4

 

 

 

 

Yazar Hakkında

Yazar : ERKAN TUNA

Yazar Hakkında :

Yazarın Tüm Yazıları İçin Tıklayınız

Yorumlar

Sitemizde En Çok Okunan İçerikler

ANDROİD TELEFONLARA ROOT ATMA
ANDROİD TELEFONLARA ROOT ATMARoot Ne demek ? Bir android cihazı root etmek telefonun
fragment
ANDROİD FRAGMENT YAPISI VE KULLANIMIFragmentler Activity içerisinde yer alan kullanıcı ara yüzleridir. Fragment
Asp.NET’de web servis hazırlama ve Android de kullanimi  Web Servis Nedir ? Web üzerinden HTTP protokolü ile hizmet
ANDROİD TELEFONLARDA KONFERANS GÖRÜŞME
ANDROİD TELEFONLARDA KONFERANS GÖRÜŞMEANDROİD TELEFONLARDA KONFERANS GÖRÜŞME   Konferans görüşme çok fazla bilinmeyen androidin

Sitemizde En Çok Yorumlanan İçerikler

WEB UYGULAMALARINDA EKRAN UYUMU
WEB UYGULAMALARINDA EKRAN UYUMUAndroid için web uygulamaları hazırlarken odaklanmamız gereken en önemli
ActionBar Kullanım Özellikleri
ActionBar Kullanım ÖzellikleriActionBar Genel Bakış ActionBar temel olarak 4 ana işlevsel alan barındırır.

Son Yapılan Yorumlar

  • Kategoriler

  • Son Yazılar

  • Takvim

    Ağustos 2017
    P S Ç P C C P
    « Kas    
     123456
    78910111213
    14151617181920
    21222324252627
    28293031  
  • Etiketler

  • Son Yorumlar

    • Arşivler

    • Meta