Yardım PDF`sini İndir

Transkript

Yardım PDF`sini İndir
ADOBE FLASH CS4 PROFESSIONAL
ile
ADOBE AIR 1.5 uygulamalari geliştirme
®
®
®
™
© 2008 Adobe Systems Incorporated. Tüm hakları saklıdır.
Telif Hakkı
Adobe® Flash® CS4 ile Adobe® AIR™ 1.5 Uygulamaları Geliştirme
Bu kılavuz son kullanıcı sözleşmesini içeren bir yazılımla birlikte verilmişse bu kılavuz ve onda anlatılan yazılım lisanslıdır ve yalnızca bu lisansa uygun şekilde
kullanılabilir veya kopyalanabilir. Bu türde bir lisans tarafından izin verildiği durumlar dışında, bu kılavuzun hiçbir bölümü Adobe Systems Incorporated
şirketinden önceden yazılı izin alınmadan çoğaltılamaz, geri alma sistemlerinde depolanamaz veya elektronik, mekanik, kayıt yoluyla veya diğer herhangi bir
şekilde veya herhangi bir yöntemle aktarılamaz. Bu kılavuz son kullanıcı lisans sözleşmesi içermeyen bir yazılımla dağıtılmamış olsa bile bu kılavuzdaki içeriğin
telif hakkı yasalarıyla korunduğunu unutmayın.
Bu kılavuzun içeriği yalnızca bilgi amaçlıdır, önceden haber verilmeden değiştirilebilir ve Adobe Systems Incorporated şirketinin bir taahhüdü olarak
yorumlanmamalıdır. Adobe Systems Incorporated bu kılavuzdaki bilgilerin hatalı veya yanlış olması durumunda hiçbir sorumluluk veya yükümlülük kabul
etmez.
Projenize dahil etmek isteyebileceğiniz mevcut resimlerin ve görüntülerin telif hakkı yasalarıyla korunuyor olabileceğini unutmayın. Bu türde malzemenin yeni
çalışmanıza yetkisiz olarak katılması, telif hakkı sahibinin haklarını ihlal etmek anlamına gelebilir. Lütfen telif hakkı sahibinden gerekli tüm izinleri aldığınızdan
emin olun.
Örnek şablonlarda şirket veya şahıs adlarına yapılmış olan göndermeler yalnızca anlatım amacıyla olup gerçek kuruluş veya şahıslarla bir ilgisi yoktur.
Adobe, the Adobe logo, Acrobat, ActionScript, Adobe AIR, ColdFusion, Dreamweaver, Flash, Flex, Flex Builder, and Reader are either registered trademarks or
trademarks of Adobe Systems Incorporated in the United States and/or other countries.
Microsoft and Windows are either registered trademarks or trademarks of Microsoft Corporation in the United States and/or other countries. Apple, Macintosh,
and Mac OS are trademarks of Apple Inc., registered in the United States and other countries. Java is a trademarks or registered trademark of Sun Microsystems,
Inc. in the United States and other countries. Linux is the registered trademark of Linus Torvalds in the U.S. and other countries. All other trademarks are the
property of their respective owners.
This work is licensed under the Creative Commons Attribution Non-Commercial 3.0 License. To view a copy of this license, visit
http://creativecommons.org/licenses/by-nc/3.0/us/
This product includes software developed by the Apache Software Foundation (http://www.apache.org/)
MPEG Layer-3 audio compression technology licensed by Fraunhofer IIS and Thomson Multimedia (http://www.mp3licensing.com).
Speech compression and decompression technology licensed from Nellymoser, Inc. (www.nellymoser.com)
Video compression and decompression is powered by On2 TrueMotion video technology. © 1992-2005 On2 Technologies, Inc. All Rights Reserved.
http://www.on2.com.
This product includes software developed by the OpenSymphony Group (http://www.opensymphony.com/)
This product contains either BSAFE and/or TIPEM software by RSA Security, Inc.
Sorenson Spark™ video compression and decompression technology licensed from Sorenson Media, Inc.
This product includes software developed by the IronSmith Project (http://www.ironsmith.org/).
Adobe Systems Incorporated, 345 Park Avenue, San Jose, California 95110, USA.
Notice to U.S. Government End Users. The Software and Documentation are “Commercial Items,” as that term is defined at 48 C.F.R. §2.101, consisting of
“Commercial Computer Software” and “Commercial Computer Software Documentation,” as such terms are used in 48 C.F.R. §12.212 or 48 C.F.R. §227.7202,
as applicable. Consistent with 48 C.F.R. §12.212 or 48 C.F.R. §§227.7202-1 through 227.7202-4, as applicable, the Commercial Computer Software and
Commercial Computer Software Documentation are being licensed to U.S. Government end users (a) only as Commercial Items and (b) with only those rights
as are granted to all other end users pursuant to the terms and conditions herein. Unpublished-rights reserved under the copyright laws of the United States.
Adobe Systems Incorporated, 345 Park Avenue, San Jose, CA 95110-2704, USA. For U.S. Government End Users, Adobe agrees to comply with all applicable
equal opportunity laws including, if appropriate, the provisions of Executive Order 11246, as amended, Section 402 of the Vietnam Era Veterans Readjustment
Assistance Act of 1974 (38 USC 4212), and Section 503 of the Rehabilitation Act of 1973, as amended, and the regulations at 41 CFR Parts 60-1 through 60-60,
60-250, and 60-741. The affirmative action clause and regulations contained in the preceding sentence shall be incorporated by reference.
iii
İçindekiler
Bölüm 1: Adobe AIR yüklemesi
Adobe AIR'i yükleme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
Adobe AIR'i kaldırma
.................................................................................................. 2
AIR örnek uygulamalarını yükleme ve çalıştırma
........................................................................ 2
Bölüm 2: Flash CS3 uygulamasını Adobe AIR için ayarlama
Flash CS3 için Adobe AIR Güncellemesi'ne yönelik sistem gereksinimleri
Flash için Adobe AIR güncellemesi yükleme CS3
Flash CS3 için Adobe AIR güncellemesini kaldırma
Flash CS3 uygulamasına yönelik AIR eklemeleri
................................................ 3
........................................................................ 3
...................................................................... 4
......................................................................... 4
Bölüm 3: Adobe AIR'e Giriş
AIR 1.1'deki yenilikler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
AIR 1.5'teki yenilikler
................................................................................................... 8
Bölüm 4: AIR Kaynaklarını bulma
Bölüm 5: Flash CS3 veya CS4 kullanarak ilk AIR uygulamanızı oluşturma
Flash içinde Hello World uygulamasını oluşturma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
Uygulamayı test etme
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
Bir FLA dosyasını Adobe AIR uygulamasına çevirme
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
Bölüm 6: Flash CS3 Professional için Adobe AIR Güncellemesi
Bir Adobe AIR dosyası oluşturma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
Adobe AIR yayınlama ayarlarını belirleme
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
Bir Adobe AIR uygulamasının önizlemesini görüntüleme
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
Bir Adobe AIR uygulamasının hatalarını ayıklama
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
AIR uygulaması ve yükleme dosyaları oluşturma
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
Özel bir uygulama tanımlayıcı dosyası oluşturma
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
Uygulamanızı imzalama
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
Bölüm 7: AIR güvenliği
AIR güvenlik temelleri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
Yükleme ve güncellemeler
Sanal alanlar
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
HTML güvenliği
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
Farklı etki alanlarındaki içerikler arasında komut dosyası oluşturma
Diske yazma
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
Güvenilmeyen içerikle güvenli biçimde çalışma
Geliştiriciler için en iyi güvenlik uygulamaları
Kod imzalama
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
Bölüm 8: AIR uygulamasının özelliklerini ayarlama
Uygulama tanımlayıcı dosyasının yapısı . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
Uygulama tanımlayıcı dosyasında özellikleri tanımlama
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME iv
İçindekiler
Bölüm 9: Adobe AIR'e özgü işlevler
AIR'e özgü sınıflar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
AIR uygulamasına özgü işlevlere sahip runtime sınıfları
Hizmet izleme çerçevesi sınıfları
Bölüm 10: Yerel pencerelerle çalışma
Yerel pencereler hakkında ek çevrimiçi bilgiler
AIR penceresi temelleri
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
Pencereler oluşturma
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
Pencereleri yönetme
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
Pencere olaylarını dinleme
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
Tam ekran pencereleri görüntüleme
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
Bölüm 11: Ekranlar
Ekranlar hakkında ek çevrimiçi bilgi
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
Ekran temelleri
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
Ekranları numaralandırma
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
Bölüm 12: Yerel menülerle çalışma
Yerel menüler hakkında ek çevrimiçi bilgiler
AIR menüsü temelleri
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
Yerel menüler oluşturma
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
Bağlam menüleri hakkında
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
HTML'deki bağlam menüleri hakkında
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
Yerel menüleri tanıtıcı biçimde tanımlama
Açılır menüleri görüntüleme
Menü olaylarını işleme
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
Örnek: Pencere ve uygulama menüsü
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
Bölüm 13: Görev çubuğu simgeleri
Görev çubuğu simgeleri hakkında ek çevrimiçi bilgi
Görev çubuğu simgeleri hakkında
Dock simgeleri
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
Sistem Tepsisi simgeleri
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
Pencere görev çubuğu simge ve düğmeleri
Bölüm 14: Dosya sistemiyle çalışma
AIR Dosya API'si hakkında ek çevrimiçi bilgiler
AIR dosyası temel bilgileri
File nesneleriyle çalışma
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
Dosya sistemi bilgilerini alma
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
Dizinlerle çalışma
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
Dosyalarla çalışma
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
Dosyaları okuma ve dosyalara yazma
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
Bölüm 15: Sürükle ve bırak
Sürükleme ve bırakma hakkında ek çevrimiçi bilgiler
Sürükleme ve bırakma temel bilgileri
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME v
İçindekiler
Dışarı sürükleme hareketini destekleme
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
İçeri sürükleme hareketini destekleme
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
HTML Sürükle ve bırak
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
Bölüm 16: Kopyalama ve yapıştırma
Kopyalama ve yapıştırma hakkında ek çevrimiçi bilgiler
HTML kopyala ve yapıştır
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
Kopyalama ve yapıştırma için menü komutları ve tuş girişleri
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
Bölüm 17: Bayt dizileriyle çalışma
ByteArray okuma ve yazma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
ByteArray örneği: Bir .zip dosyasını okuma
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
Bölüm 18: Yerel SQL veritabanlarıyla çalışma
Yerel SQL veritabanları hakkında ek çevrimiçi bilgi
Yerel SQL veritabanları hakkında
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
Veritabanı oluşturma ve değiştirme
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
SQL veritabanı verilerini değiştirme
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
Senkronize ve senkronize olmayan veritabanı işlemlerini kullanma
Şifrelemeyi SQL veritabanlarıyla kullanma
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185
SQL veritabanlarıyla çalışmak için stratejiler
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201
Bölüm 19: Şifreli verileri saklama
Bölüm 20: HTML ortamı hakkında
HTML ortamına genel bakış . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208
AIR ve Webkit uzantıları
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210
Bölüm 21: HTML ve JavaScript'te programlama
HTMLLoader sınıfı hakkında . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223
Güvenlik ilişkili JavaScript hatalarını önleme
AIR API sınıflarına JavaScript'ten erişme
AIR'deki URL'ler hakkında
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230
ActionScript nesnelerini JavaScript için kullanılabilir duruma getirme
HTML DOM ve JavaScript nesnelerine ActionScript'ten erişme
SWF içeriğini HTML'e gömme
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233
HTML sayfasında ActionScript kitaplıkları kullanma
Date ve RegExp nesnelerini dönüştürme
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235
HTML stil sayfasını ActionScript'ten değiştirme
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236
Farklı güvenlik sanal alanlarında çapraz komut dosyası içeriği
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237
Bölüm 22: HTML ile ilgili olayları işleme
HTMLLoader olayları . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241
DOM olaylarını ActionScript ile işleme
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241
Yakalanmayan JavaScript istisnalarına yanıt verme
Çalışma zamanı olaylarını JavaScript'le işleme
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME vi
İçindekiler
Bölüm 23: HTML Kabı için Komut Dosyası Oluşturma
HTMLLoader nesnelerinin görüntü özellikleri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247
HTML içeriğini kaydırma
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249
HTML geçmiş listesine erişme
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250
HTML içeriği yüklenirken kullanılan kullanıcı aracısını ayarlama
HTML içeriğinde kullanım için karakter kodlamasını ayarlama
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251
HTML içeriği için tarayıcı benzeri kullanıcı arabirimleri tanımlama
HTMLLoader sınıfının alt sınıflarını oluşturma
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259
Bölüm 24: PDF içeriği ekleme
PDF Özelliklerini Saptama . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261
PDF içeriğini yükleme
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262
Komut dosyası PDF içeriği
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262
AIR'de PDF içeriği için bilinen sınırlamalar
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264
Bölüm 25: Dijital haklar yönetimini kullanma
Dijital haklar yönetimiyle ilgili ek çevrimiçi bilgiler
Şifreli FLV iş akışını anlama
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266
NetStream sınıfının DRM ilişkili üyeleri ve olayları
DRMStatusEvent sınıfını kullanma
DRMAuthenticateEvent sınıfını kullanma
DRMErrorEvent sınıfını kullanma
DRMManager sınıfını kullanma
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276
DRMContentData sınıfını kullanma
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277
Bölüm 26: Uygulama başlatma ve uygulamadan çıkma seçenekleri
Uygulama başlatma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278
Komut satırı argümanlarını yakalama
Oturum açılırken başlatma
Tarayıcı başlatma
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281
Uygulama sonlandırma
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283
Bölüm 27: Uygulama ayarlarını okuma
Uygulama tanımlayıcı dosyasını okuma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285
Uygulama ve yayıncı kimliklerini getirme
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285
Bölüm 28: Çalışma zamanı ve işletim sistemi bilgileriyle çalışma
Dosya ilişkilendirmelerini yönetme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286
Çalıştırma zamanı sürümü ve yama düzeyini getirme
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287
AIR özelliklerini saptama
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287
Kullanıcı varlığını izleme
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287
Bölüm 29: Ağ bağlantısını izleme
Ağ bağlantısı değişikliklerini saptama
Servis izleme temelleri
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289
HTTP bağlantısını saptama
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 290
Soket bağlantısını saptama
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 290
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME vii
İçindekiler
Bölüm 30: URL istekleri ve ağ iletişimi
URLRequest sınıfını kullanma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292
URLStream sınıfındaki değişiklikler
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295
Varsayılan sistem web tarayıcısında bir URL açma
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295
Bölüm 31: Uygulamalar arası iletişim
Bölüm 32: AIR uygulamalarını Dağıtma, Yükleme ve Çalıştırma
AIR uygulamasını masaüstünden yükleme ve çalıştırma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298
AIR uygulamalarını web sayfasından yükleme ve çalıştırma
Kuruluş konuşlandırma
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 299
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 306
AIR dosyasını dijital olarak imzalama
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 307
Bölüm 33: AIR uygulamalarını güncelleme
Uygulamaları güncelleme hakkında . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313
Özel uygulama güncelleme kullanıcı arabirimini sunma
Kullanıcının bilgisayarına bir AIR dosyası indirme
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315
Uygulamanın ilk kez çalışıp çalışmadığını görmek için kontrol edin
Güncelleme çerçevesini kullanma
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316
Bölüm 34: AIR uygulamalarını yerelleştirme
Yerelleştirmeye giriş . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328
Uygulama yükleyicisindeki uygulama adını ve açıklamasını yerelleştirme
Bir yerel ayar seçme
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329
Flaş içeriğini yerelleştirme
HTML içeriğini yerelleştirme
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329
Tarihleri, saatleri ve para birimlerini yerelleştirme
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 338
Bölüm 35: Komut satırı araçlarını kullanarak AIR uygulaması oluşturma
AIR Hata Ayıklama Başlatıcısı'nı (ADL) Kullanma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339
AIR yükleme dosyasını AIR Geliştirici Aracı (ADT) kullanarak paketleme
Uygulama sertifikasını değiştirmek için AIR dosyasını imzalama
ADT ile kendinden imzalı bir sertifika oluşturma
Apache Ant aracını SDK araçlarıyla kullanma
Dizin
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 341
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 350
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355
1
Bölüm 1: Adobe AIR yüklemesi
Adobe® AIR™ sayesinde AIR uygulamalarını masaüstünde çalıştırabilirsiniz. Çalışma zamanını şu şekillerde
yükleyebilirsiniz:
• Çalışma zamanını ayrı yükleyerek (bir AIR uygulaması da yüklemeden)
• İlk kez bir AIR uygulaması yükleyerek (ayrıca çalışma zamanını da yüklemeniz istenir)
• AIR SDK, Adobe® Flex™ Builder™ 3 veya Adobe Flex™ 3 SDK gibi (AIR komut satırı geliştirme araçlarını içeren) bir
AIR geliştirme ortamı kurarak
Çalışma zamanının her bilgisayarda yalnızca bir kere yüklenmesi gerekir.
AIR'i yüklemek ve AIR uygulamalarını çalıştırmak için sistem gereksinimleri burada ayrıntılı biçimde açıklanmıştır:
Adobe AIR: Sistem gereksinimleri(http://www.adobe.com/products/air/systemreqs/).
Adobe AIR'i yükleme
AIR'in Windows®, Mac OS X ve Linux sürümlerini indirmek ve yüklemek için aşağıdaki talimatları kullanın.
Bir kullanıcı çalışma zamanını güncellemek için bilgisayarda yönetimsel ayrıcalıklara sahip olmalıdır.
Çalışma zamanını Windows kurulu bir bilgisayara yükleme
1 çalışma zamanı kurulum dosyasını indirin.
2 Çalışma zamanı yükleme dosyasını çift tıklatın.
3 Yüklemeyi tamamlamak için yükleme penceresindeki istemleri izleyin.
Çalışma zamanını Mac kurulu bir bilgisayara yükleme
1 çalışma zamanı kurulum dosyasını indirin.
2 Çalışma zamanı yükleme dosyasını çift tıklatın.
3 Yüklemeyi tamamlamak için yükleme penceresindeki istemleri izleyin.
4 Yükleyici bir Kimlik Denetimi penceresi görüntülerse, Mac OS kullanıcı adınızı ve parolanızı girin.
Bir Linux bilgisayarına çalışma zamanını yükleyin
1 çalışma zamanı yükleme dosyasını indirin.
2 Dosya izinlerini, yükleyici uygulamanın yürütülebileceği biçimde ayarlayın:
Dosya izinlerini bir komut satırından chmod +x installer.binkomutuyla ayarlayabilirsiniz. Bazı Linux
sürümleri, dosya izinlerini bir bağlam menüsü aracılığıyla açılan Özellikler iletişim kutusunda ayarlamanıza olanak
verir.
3 Yükleyiciyi komut satırından veya çalışma zamanı yükleme dosyasını çift tıklatarak çalıştırın.
4 Yüklemeyi tamamlamak için yükleme penceresindeki istemleri izleyin.
AIR, şu paket adlarıyla rpm veya dpkg paketleri olarak yüklenir: adobeairv.n ve adobecerts. Yükleme, çalışan bir
X sunucusunu gerektirir. AIR, mime türünü kaydeder: application/vnd.adobe.air-application-installerpackage+zip.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 2
Adobe AIR yüklemesi
Adobe AIR'i kaldırma
Çalışma zamanını bir kez yükledikten sonra, aşağıdaki yordamları kullanarak kaldırabilirsiniz.
Çalışma zamanını Windows kurulu bir bilgisayardan kaldırma
1 Windows Başlat menüsünde, Ayarlar > Denetim Masası öğelerini seçin.
2 Program Ekle veya Kaldır denetim masasını seçin.
3 Çalışma zamanını kaldırmak için “Adobe AIR”i seçin.
4 Değiştir/Kaldır düğmesini tıklatın.
Çalışma zamanını Mac kurulu bir bilgisayardan kaldırma
• /Applications/Utilities klasöründe bulunan “Adobe AIR Uninstaller”ı çift tıklatın.
Çalışma zamanını Linux kurulu bir bilgisayardan kaldırma
Şunlardan birini yapın:
• Uygulamalar menüsünden “Adobe AIR Uninstaller” komutunu seçin.
•
-uninstall seçeneğini içeren AIR yükleyici ikilisini çalıştırın
• AIR paketlerini (adobeairv.n ve adobecerts) paket yöneticinizle kaldırın.
AIR örnek uygulamalarını yükleme ve çalıştırma
AIR özellikleri gösteren bazı örnek uygulamalar mevcuttur. Aşağıdaki talimatları kullanarak onlara erişebilir ve onları
yükleyebilirsiniz:
1 AIR örnek uygulamalarını indirin ve çalıştırın. Kaynak kodun yanı sıra derlenen uygulamalar da kullanılabilir.
2 Örnek bir uygulamayı indirmek ve çalıştırmak için, örnek uygulamanın Şimdi Yükle düğmesini tıklatın.
Uygulamayı yüklemeniz ve çalıştırmanız istenir.
3 Örnek uygulamaları indirmeyi ve sonra çalıştırmayı seçerseniz, indirme linklerini seçin. AIR uygulamalarını
istediğiniz zaman şu şekillerde çalıştırabilirsiniz:
• Windows'ta masaüstündeki uygulama simgesini çift tıklatarak veya Windows Başlat menüsünden seçerek.
• Mac OS'de varsayılan olarak kullanıcı dizininizin Uygulamalar klasöründe yüklü olan uygulama simgesini çift
tıklatarak (örneğin Macintosh'ta HD/Users/JoeUser/Applications/).
• Linux'ta masaüstündeki uygulama simgesini çift tıklatarak veya Uygulamalar menüsünden seçerek. AIR
uygulamaları, /opt dizininin altında yer alan kendi klasörlerine yüklenir.
Not: Bu talimatların güncellemeleri için, şu adreste bulunan AIR sürüm notlarını kontrol edin:
http://www.adobe.com/go/learn_air_relnotes.
3
Bölüm 2: Flash CS3 uygulamasını Adobe
AIR için ayarlama
Adobe® Flash® CS3 Professional için Adobe® AIR™ Güncellemesi, Flash ile AIR uygulamaları geliştirmenizi sağlayan
öğeler ekleyerek Flash geliştirme ortamını zenginleştirir. Flash içinde AIR uygulama dosyaları oluşturmanıza, test
etmenize ve bu dosyaların hataları ayıklamanıza olanak tanır.
Adobe® Flash® CS4 Professional, AIR uygulamaları oluşturma işlemi için yerleşik desteğe sahiptir. Daha fazla bilgi için,
Flash Uygulamasını Kullanma bölümündeki Adobe AIR için Yayınlama konusunu inceleyin.
Flash CS3 için Adobe AIR Güncellemesi, AIR 1.0 ve 1.1 ve Flash Player 9.x uygulamalarını destekler. AIR 1.5 ve Flash
Player 10 ile uygulama geliştirmek için Flash CS4 gereklidir.
Flash CS3 için Adobe AIR Güncellemesi'ne yönelik
sistem gereksinimleri
AIR uygulamaları geliştirmek ve çalıştırmak üzere Flash CS3 uygulamasını kullanabilmek için aşağıdaki yazılımları
yüklemiş olmanız gerekir:
• Flash CS3 Professional
Flash CS3 Professional uygulamasına sahip değilseniz Adobe web sitesinden satın alabilirsiniz:
http://www.adobe.com/products/flash
• Adobe AIR
Adobe AIR uygulamasını yükleme ile ilgili bilgiler için bkz. “Adobe AIR yüklemesi” sayfa 1.
• Flash CS3 için Adobe AIR güncellemesi
Daha önce Flash CS3 için Adobe AIR güncellemesi yüklediyseniz Flash CS3 için Adobe AIR güncellemesini kaldırma
bölümündeki adımları izleyerek bu uygulamayı kaldırın. Daha önce Flash CS3 için Adobe AIR güncellemesi
yüklemediyseniz, “Flash için Adobe AIR güncellemesi yükleme CS3” sayfa 3 bölümüne geçin.
Flash için Adobe AIR güncellemesi yükleme CS3
Flash CS3 için Adobe AIR güncellemesini yüklemeden önce Flash uygulamasını ve açık olan tarayıcı pencerelerini
kapatın.
• Flash CS3 için Adobe AIR güncellemesi uygulamasını indirin.
• Güncellemeyi indirdikten sonra güncelleme yama dosyasını çift tıklatıp yükleyin.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 4
Flash CS3 uygulamasını Adobe AIR için ayarlama
Flash CS3 için Adobe AIR güncellemesini kaldırma
Flash CS3 için Adobe AIR güncellemesini daha önceden yüklediyseniz, yeni Flash CS3 için Adobe AIR güncellemesini
yüklemeden önce aşağıdaki adımları takip ederek eskisini kaldırın.
1 Aşağıdaki klasörü silin:
(Windows) HD:\Program Files\Adobe\Adobe Flash CS3\AIK
(Mac) HD:/Applications/Adobe Flash CS3/AIK
2 Aşağıdaki konumu açın:
(Windows) HD:\Program Files\Adobe\Adobe Flash CS3\<dil>\First Run\Commands\
(Mac) HD:/Applications/Adobe Flash CS3/First Run/Commands
ve aşağıdaki dosyaları/klasörleri silin:
• AIR klasörü
• AIR - Application and Installer Settings.jsfl
• AIR - Create AIR File.jsfl
3 Aşağıdaki dosyayı silin:
(Windows) HD:\Program Files\Adobe\Adobe Flash CS3\<dil>\Configuration\External Libraries\FLAir.dll
(Mac) HD:/Applications/Adobe Flash CS3/Configuration/External Libraries/FLAir.bundle.
4 Aşağıdaki dosyayı silin:
(Windows) HD:\Program Files\Adobe\Adobe Flash CS3\<dil>\Configuration\Players\AdobeAIR1_0.xml
(Mac) HD:/Applications/Adobe Flash CS3/Configuration/Players/ AdobeAIR1_0.xml
5 Aşağıdaki konumu açın:
(Windows) HD:\Document and Settings\<kullanıcı adı>\Local Settings\Application Data\Adobe\Flash
CS3\<dil>\Configuration\Commands\
(Mac) HD:/Users/<username>/Library/Application Support/Adobe/Flash CS3/<dil>/Configuration/Commands/
ve aşağıdaki dosyaları/klasörleri silin:
• AIR klasörü
• AIR - Application and Installer Settings.jsfl
• AIR - Create AIR File.jsfl
Not: Windows işletim sisteminde belirtilen konumu göremiyorsanız klasör seçeneklerinden "Gizli dosyaları göster"
seçeneğini işaretleyin.
Flash CS3 uygulamasına yönelik AIR eklemeleri
Adobe AIR güncellemesini yükledikten sonra, Flash içerisinde aşağıdaki değişiklikleri görebilirsiniz:
• Yayınlama Ayarları iletişim kutusunda (Dosya -> Yayınlama Ayarları) Flash sekmesi altında bulunan Sürüm
menüsüne Adobe AIR 1.0 için yeni bir giriş eklenmiştir.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 5
Flash CS3 uygulamasını Adobe AIR için ayarlama
• Karşılama ekranı güncellenmiş, bir Flash Dosyası (Adobe AIR) oluşturmak için kullanılabilecek olan yeni bir giriş
eklenmiştir.
(Windows) HD:\Program Files\Adobe\Adobe Flash CS3\tr\FirstRun\StartPage
(Windows) HD:\Program Files\Adobe\Adobe Flash CS3\tr\FirstRun\StartPage\resources
Not: Macintosh bilgisayarlarda Karşılama ekranında Flash Dosyası (Adobe AIR) görünmüyorsa, aşağıdaki klasörü
silin ve Flash uygulamasını yeniden başlatın:
HD:/Users/<kullanıcı adı>/Libraries/Application Support/Adobe/Flash CS3/<dil>/Configuration/StartPage
• ActionScript 3.0/Classes klasörü içindeki tüm ActionScript 3.0 API'lerini ve Adobe AIR API'lerini içeren yeni
playerglobal.swc dosyası eklenmiştir.
(Windows) HD:\Program Files\Adobe\Adobe Flash CS3\tr\Configuration\ActionScript 3.0 Classes
(Mac) HD:/Applications/Adobe Flash CS3/Configuration/ActionScript 3.0/Classes/
• Yeni jsfl dosyaları (AIR - Application and Installer Settings.jsfl, AIR - Publish AIR File.jsfl) eklenmiştir.
(Windows) HD:\Program Files\Adobe\Adobe Flash CS3\tr\FirstRun\Commands
(Mac) HD:/Applications/Adobe Flash CS3/First Run/Commands/
• Adobe AIR Yazılım Geliştirme Kiti (AIK) eklenmiştir.
(Windows) HD:\Program Files\Adobe\Adobe Flash CS3\AIK
• Harici kitaplık eklenmiştir.
(Windows) HD:\Program Files\Adobe\Adobe Flash CS3\tr\Configuration\External Libraries
(Mac) HD:/Applications/Adobe Flash CS3/Configuration/External Libraries/
• Hedef yapılandırma dosyası eklenmiştir.
(Windows) HD:\Program Files\Adobe\Adobe Flash CS3\tr\Configuration\Players\
(Mac) HD:/Applications/Adobe Flash CS3/Configuration/Players
6
Bölüm 3: Adobe AIR'e Giriş
Adobe® AIR™, masaüstünde Zengin Internet Uygulamaları (RIA'lar) oluşturmak ve konuşlandırmak için var olan web
geliştirme yeteneklerinizi (Adobe® Flash® CS3 Professional, Adobe® Flash® CS4 Professional, Adobe® Flex™, Adobe®
ActionScript® 3.0, HTML, JavaScript®, Ajax) güçlendirmenize olanak veren işletim sistemleri arası bir çalışma
zamanıdır.
Adobe AIR'i kullanmaya başlama hakkında daha fazla bilgiyi Adobe AIR Geliştirici Bağlantısı'nda bulabilirsiniz
(http://www.adobe.com/devnet/air/).
AIR, kullanımını en pratik bulduğunuz araçları ve yaklaşımları geliştirmek için alışkın olduğunuz ortamlarda
çalışmanızı ve Flash, Flex, HTML, JavaScript ve Ajax uygulamalarını destekleyerek ihtiyaçlarınızı karşılayacak en iyi
deneyimi yaşamanızı sağlar.
Örneğin aşağıdaki teknolojilerin biri veya bir kombinasyonu kullanılarak uygulamalar geliştirilebilir:
• Flash / Flex / ActionScript
• HTML / JavaScript / CSS / Ajax
• PDF herhangi bir uygulamayla geliştirilebilir
Bunun sonucunda AIR uygulamaları şu şekillerde kullanılabilir:
• Flash veya Flex'e dayalı olarak: Kök içeriği Flash/Flex (SWF) olan uygulama
• HTML veya PDF'yle beraber Flash veya Flex'e dayalı olarak. HTML (HTML, JS, CSS) veya PDF içeriğiyle beraber
kök içeriği Flash/Flex (SWF) olan uygulamalar
• HTML tabanlı. Kök içeriği HTML, JS, CSS olan uygulama
• Flash/Flex veya PDF'yle beraber HTML tabanlı. Flash/Flex (SWF) veya PDF içeriğiyle beraber kök içeriği HTML
olan uygulamalar
Kullanıcılar AIR uygulamalarıyla etkileşime, yerel masaüstü uygulamalarıyla geçtikleri gibi geçerler. Kullanıcının
bilgisayarına çalışma zamanı yüklenir, ardından AIR uygulamaları yüklenir ve diğer masaüstü uygulamaları gibi
çalışır.
Çalışma zamanı, uygulamaların konuşlandırılması için tutarlı bir işletim sistemleri arası platform ve çerçeve sağlar ve
böylece masaüstleri arasında tutarlı işlevsellik ve etkileşim sağlayarak tarayıcılar arası testi ortadan kaldırır. Belirli bir
işletim sistemi için geliştirme yapmak yerine, çalışma zamanını hedef aldığınızda şu gibi faydalardan yararlanırsınız:
• AIR için geliştirilen uygulamalar, size ek bir iş yükü getirmeden birden çok işletim sistemi arasında çalışır. Çalışma
zamanı, AIR tarafından desteklenen tüm işletim sistemlerinde tutarlı ve tahmin edilebilir sunumlar ve etkileşimler
sağlar.
• Var olan web teknolojilerini ve tasarım modellerini geliştirmeniz ve geleneksel masaüstü geliştirme teknolojilerini
veya yerel kod karmaşıklığını öğrenmeden web tabanlı uygulamalarınızı masaüstüne genişletebilmeniz sağlanarak
uygulamalar daha hızlı oluşturulabilir.
• Uygulama geliştirme, C ve C++ gibi düşük düzeyli diller kullanmaktan daha kolaydır. Her işletim sistemi için farklı
olan, karmaşık, düşük düzey API'leri öğrenmeniz gerekmez.
AIR için uygulama geliştirirken, zengin bir çerçeve ve API kümesi geliştirebilirsiniz:
• Çalışma zamanı ve AIR çerçevesi tarafından sağlanan AIR'e özgü API'ler
• SWF dosyalarında ve Flex çerçevesinde kullanılan ActionScript API'leri (bunun yanında diğer ActionScript tabanlı
kitaplıklar ve çerçeveler)
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 7
Adobe AIR'e Giriş
• HTML, CSS ve JavaScript
• Çoğu Ajax çerçevesi
AIR, uygulamaların oluşturulma, konuşlandırılma ve deneyim edilme şekillerini ciddi bir şekilde değiştirir. Daha
yaratıcı bir kontrole sahip olursunuz ve geleneksel masaüstü geliştirme teknolojilerini öğrenmeden Flash, Flex, HTML
ve Ajax tabanlı uygulamalarınızı masaüstüne genişletebilirsiniz.
AIR 1.1'deki yenilikler
Adobe AIR 1.1, aşağıdaki yeni özellikleri sunar:
• Yükleme ve diğer çalışma zamanı iletişim kutuları şu dillere çevrildi:
• Brezilya Portekizcesi
• Çince (Geleneksel ve Basitleştirilmiş)
• Fransızca
• Almanca
• İtalyanca
• Japonca
• Korece
• Rusça
• Fransızca
• İspanyolca
• Çift baytlı diller için klavye girişini de içeren uluslararası duruma getirilmiş uygulamaların oluşturulması için
destek. Bkz. “AIR uygulamalarını yerelleştirme” sayfa 328.
• Uygulama tanımlayıcı dosyasındaki ad ve açıklama niteliklerinin yerelleştirilmesi için destek.
• Hata mesajlarının yerelleştirilmesi için destek, SQLite veritabanındaki databaseSQLError.detailID ve
SQLError.detailArguments gibi.
• İşletim sistemi tarafından ayarlandığı biçimde tercih edilen kullanıcı arabirimi dillerinin bir dizisini almak için
Capabilities.languages özellik eki.
• Bağlam menüleri ve Mac menü çubuğu gibi HTML düğme etiketleri ve varsayılan menüler, desteklenen tüm
dillere çevrildi.
• Kendinden imzalı bir uygulamadan yetkili sertifikasına (CA) bağlanan bir uygulamaya sertifika taşıma için destek.
• Microsoft Windows XP Tablet PC Edition için ve 64 bit Windows Vista® Home Premium, Business, Ultimate veya
Enterprise sürümleri için destek.
• Bir diskte bulunan kullanılabilir disk alanını elde etmek için File.spaceAvailable API eki.
• Pencerenin mevcut işletim sistemi tarafından saydam olarak çizilip çizilemeyeceğini belirlemek için
NativeWindow.supportsTransparency özellik eki.
AIR 1.1 sürümü hakkında daha fazla bilgi için, bkz. Adobe AIR 1.1 Sürüm Notları
(http://www.adobe.com/go/learn_air_relnotes_tr).
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 8
Adobe AIR'e Giriş
AIR 1.5'teki yenilikler
Adobe 1.5, aşağıdaki yeni özellikleri sunar:
• Aşağıdaki Flash Player 10 özellikleri için destek.
• Özel Filtreler ve Efektler
• Gelişmiş Çizim API'si
• Dinamik Ses Oluşturma
• Vektör Veri Türü
• Gelişmiş dosya yükleme ve indirme API'leri
• Gerçek Zamanlı Ortam Akış Protokolü (RTMFP)
• 3 Boyutlu Efektler
• Gelişmiş Metin Desteği
• Renk Yönetimi
• Metin Motoru
• Dinamik Akış
• Speex Ses Codec Bileşeni
Bu özelliklerin ayrıntıları hakkında daha fazla bilgi için bkz. http://www.adobe.com/products/flashplayer/features/.
• AIR 1.5 ve diğer çalışma zamanı iletişim kutularında desteklenen ek diller: Çekçe, Felemenkçe, İsveççe, Türkçe,
Lehçe.
• Veritabanı şifreleme.
Veritabanı dosyaları AIR 1.5'te şifrelenebilir. Meta verileri de içeren tüm veritabanı içeriği, verilerin kendisini
şifreleyen AIR uygulaması dışında okunamaması için şifrelenebilir. Bu özellik, geliştiricinin veritabanı dosyalarını
şifrelemesini, bu dosyaların şifrelerini çözmesini ve yeniden şifrelemesini sağlar. Bkz. “Şifreli verileri saklama”
sayfa 206.
• Adobe AIR tarafından kullanılan WebKit sürümü güncellendi ve artık SquirrelFish JavaScript yorumlayıcısı için
destek içeriyor.
• Verilerin veya bilginin bütünlüğünü ve imzalayan kimliğini doğrulamaya yardımcı olmak üzere kullanılabilen yeni
XML imza doğrulama API'leri. Bkz. XML imza doğrulama.
AIR 1.5 sürümü hakkında daha fazla bilgi için, bkz. Adobe AIR 1.5 Sürüm Notları
(http://www.adobe.com/go/learn_air_relnotes_tr).
9
Bölüm 4: AIR Kaynaklarını bulma
Adobe® AIR™ uygulamalarının geliştirilmesi hakkında daha fazla bilgi için aşağıdaki kaynaklara bakınız:
Kaynak
Konum
ActionScript 3.0'ı Programlama
http://www.adobe.com/go/learn_fl_cs4_programmingAS3_tr
ActionScript 3.0 Dil ve Bileşen Başvurusu (AIR dahil)
http://www.adobe.com/go/learn_flashcs4_langref_tr
Flash için Adobe AIR Hızlı Başlangıçları
http://www.adobe.com/go/learn_air_flash_qs_tr
Flash'ı Kullanma
http://www.adobe.com/go/learn_fl_cs4_using_tr
ActionScript 3.0 Bileşenlerini Kullanma
http://www.adobe.com/go/learn_fl_cs4_as3components_tr
Adobe ve topluluk uzmanlarına ait makaleler, örnekler ve sunumları http://www.adobe.com/devnet/air/ linklerindeki
Adobe AIR Geliştirici Bağlantısı'nda bulabilirsiniz. Buradan Adobe AIR ve ilişkili yazılımları da indirebilirsiniz.
Flash geliştiricilerine özgü bir bölümü http://www.adobe.com/devnet/air/flash/ linklerinde bulabilirsiniz.
Ürününüze ilişkin sorun giderme bilgilerini bulmak ve ücretli - ücretsiz teknik destek seçeneklerini öğrenmek için
www.adobe.com/support adresindeki Adobe Support web sitesini ziyaret edin. Adobe Press kitaplarına, çeşitli eğitim
kaynaklarına, Adobe yazılım sertifikası programlarına ve daha fazlasına erişim için Training (Eğitim) bağlantısını
izleyin.
10
Bölüm 5: Flash CS3 veya CS4 kullanarak ilk
AIR uygulamanızı oluşturma
Adobe®AIR™ uygulamasının nasıl çalıştığını hızlı ve uygulamalı olarak görmek için bu başlık altındaki talimatları takip
edin ve Adobe® Flash® CS3 Professional uygulamasını kullanarak basit bir "Hello World" AIR uygulaması oluşturun ve
paketleyin.
Daha önce yapmadıysanız Flash CS3 için Adobe AIR güncellemesini indirin ve yükleyin. Flash CS3 için Adobe AIR
uygulamasını yükleme ile ilgili daha fazla bilgi için “Flash CS3 uygulamasını Adobe AIR için ayarlama” sayfa 3
bölümünü inceleyin.
Adobe® Flash® CS4 Professional kullanıyorsanız, Adobe AIR desteği yerleşiktir, bu nedenle çalışmaya başlamak için
herhangi bir şeyi yüklemenize gerek yoktur.
Flash içinde Hello World uygulamasını oluşturma
Flash içinde bir Adobe AIR uygulaması oluşturma, sıradan bir FLA dosyası oluşturmaya benzer. Aradaki fark,
Karşılama ekranından başlayarak bir Flash dosyası (Adobe AIR) oluşturmanız ve sonunda uygulama ve yükleyici
ayarlarını oluşturup AIR uygulamanızı yüklemenizdir. Aşağıdaki adımlar size Flash CS3 veya Flash CS4 kullanarak
nasıl basit bir Hello World uygulaması oluşturulacağını gösterir.
Hello World uygulamasını oluşturmak için
1 Flash uygulamasını başlatın.
2 Karşılama Ekranı'nda Adobe AIR yayınlama ayarları ile boş bir FLA dosyası oluşturmak için Flash Dosyası (Adobe
AIR) seçeneğini tıklatın.
3 Flash CS3 ile Adobe AIR için Geliştirme İşlemi özet iletişim kutusuna yanıt vermek için Tamam düğmesini tıklatın.
Bu iletişim kutusunun ilk açılışı birkaç saniye sürebilir. (Bu iletişim kutusu Flash CS4 uygulamasında
görüntülenmez.)
4 Araçlar panelinde Metin aracını seçin ve Sahne Alanı'nın ortasında statik bir metin alanı (varsayılan) oluşturun. 15
- 20 karakter alacak şekilde genişletin.
5 Metin alanına "Hello World" metnini yazın.
6 Dosyayı bir ad vererek (örneğin helloAIR) kaydedin.
Uygulamayı test etme
1 Uygulamayı Adobe AIR'de test etmek için Ctrl + Enter tuşlarına basın veya Kontrol Et -> Filmi Test Et'i seçin.
2 Film Hatalarını Ayıkla özelliğini kullanmak için ilk olarak uygulamaya ActionScript kodu ekleyin. Aşağıdaki gibi
bir izleme ifadesi ekleyerek bunu hızlı bir şekilde deneyebilirsiniz:
trace("Running AIR application using Debug Movie");
3 Uygulamayı Film Hatalarını Ayıkla özelliği ile çalıştırmak için Ctrl + Shift + Enter tuşlarına basın veya Kontrol Et-
> Film Hatalarını Ayıkla'yı seçin.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 11
Flash CS3 veya CS4 kullanarak ilk AIR uygulamanızı oluşturma
4 AIR - Uygulama & Yükleyici Ayarları iletişim kutusunu açmak için Komutlar > AIR - Uygulama & Yükleyici
Ayarları öğesini seçin. Flash CS4'te Dosya > AIR Ayarları'nı seçerek bu iletişim kutusunu açabilirsiniz.
5 Adobe AIR paketini kendinden imzalı bir dijital sertifika ile imzalayın:
a Dijital İmza iletişim kutusunu açmak için Dijital İmza istemine yönelik Ayarla… düğmesini tıklatın.
b Kendinden İmzalı Dijital Sertifika Oluştur iletişim kutusunu açmak için Oluştur... düğmesini tıklatın.
c Yayıncı adı, Birim, Kurum adı, E-posta, Ülke, Şifre ve Şifreyi Doğrulayın bilgilerini tamamlayın.
d Sertifika türünü belirleyin. Sertifika Türü seçeneği güvenlik düzeyini belirlemenizi sağlar: 1024-RSA, 1024-bit
anahtar (daha az güvenli) kullanırken 2048-RSA, 2048-bit anahtar kullanır (daha güvenli).
e Farklı kaydet girişini tamamlayarak veya bir klasör konumuna göz atmak için Gözat... düğmesini tıklatarak
bilgiyi bir sertifika dosyası içine kaydedin. (Örneğin C:/Temp/mycert.pfx) Kaydetme işlemini tamamladığınızda
Tamam düğmesini tıklatın.
f
Flash Dijital İmza İletişim Kutusuna geri döner. Oluşturduğunuz kendinden imzalı sertifikanın yolu ve dosya
adı Sertifika metin kutusunda görüntülenir. Görüntülenmiyorsa, yol ve dosya adını girin veya Gözat düğmesini
tıklatarak dosyayı bulup seçin.
g Dijital İmza iletişim kutusu Şifre metin alanına c adımında atadığınız şifreyi girin ve Tamam düğmesini tıklatın.
Adobe AIR uygulamalarınızı imzalama ile ilgili daha fazla bilgi için “Uygulamanızı imzalama” sayfa 21
bölümünü inceleyin.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 12
Flash CS3 veya CS4 kullanarak ilk AIR uygulamanızı oluşturma
6 Uygulama ve yükleyici dosyasını oluşturmak için AIR Dosyasını Yayınla düğmesini tıklatın. AIR dosyasını
oluşturmadan önce SWF dosyasını ve application.xml dosyalarını oluşturmak için Filmi Test Et veya Film
Hatalarını Ayıkla eylemlerini gerçekleştirmeniz gerekir.
7 Uygulamayı yüklemek için, uygulamanızı kaydettiğiniz klasörün içinde bulunan AIR dosyasını (application.air) çift
tıklatın.
8 Uygulama Yüklemesi iletişim kutusunda Yükle düğmesini tıklatın.
9 Yükleme Tercihlerini ve Konum ayarlarını inceledikten sonra "Yüklemeden sonra uygulamayı başlat" onay
kutusunun işaretli olduğundan emin olun. Ardından Devam düğmesini tıklatın.
10 Yükleme Tamamlandı mesajı görüntülendiğinde Son düğmesini tıklatın.
Hello World uygulaması aşağıdaki resimde gösterildiği gibi görünür:
Bir FLA dosyasını Adobe AIR uygulamasına çevirme
Var olan bir FLA dosyasını da AIR uygulamasına dönüştürebilirsiniz. Daha fazla bilgi için bkz. “Adobe AIR yayınlama
ayarlarını belirleme” sayfa 13. Flash CS4 kullanıyorsanız, Flash Uygulamasını Kullanma bölümündeki Adobe AIR için
Yayınlama konusunu inceleyin.
13
Bölüm 6: Flash CS3 Professional için
Adobe AIR Güncellemesi
Adobe® Flash® CS3 Professional için Adobe® AIR™ güncellemesi, geliştirme ortamını zenginleştirerek Flash ile Adobe
AIR uygulamaları oluşturmanızı, hatalarını ayıklamanızı ve paketlemenizi sağlar. Bir Adobe AIR uygulaması
oluşturma süreci; bir Adobe AIR FLA dosyası oluşturma, uygun yayınlama ayarlarını yapma, uygulamayı geliştirme
ve uygulamayı konuşlandırmak için uygulama ve yükleyici dosyalarını oluşturma adımlarını içerir.
Adobe® Flash® CS4 Professional kullanıyorsanız, AIR uygulamaları oluşturma konusunda daha fazla bilgi için Flash
Uygulamasını Kullanma bölümündeki Adobe AIR için Yayınlama konusunu inceleyin.
Uygulamanız içerisinde kullanabileceğiniz Adobe AIR ActionScript®3.0 API'leri hakkında bilgi için ActionScript 3.0
Dil ve Bileşenler Başvurusu'nu inceleyin.
Adobe AIR ActionScript API'lerinin listesi için bkz. “Adobe AIR'e özgü işlevler” sayfa 52.
Not: air.net paketinde sınıf kullanmak için ilk olarak ServiceMonitorShim bileşenini Bileşenler panelinden Kitaplık
paneline sürükleyin ve ActionScript 3.0 kodunuzun içerisine aşağıdaki import ifadesini ekleyin:
import air.net.*;
Bir Adobe AIR dosyası oluşturma
Flash Karşılama ekranını kullanarak bir Flash Dosyası (Adobe AIR) oluşturabilir veya bir Flash Dosyası (ActionScript
3.0) oluşturup bunu Yayınlama Ayarları iletişim kutusundan bir Adobe AIR dosyasına dönüştürebilirsiniz. Ancak
Yeni Belge iletişim kutusunu kullanarak (Dosya > Yeni) bir Adobe AIR dosyası oluşturamazsınız. Bir FLA dosyasını
Adobe AIR dosyasına dönüştürmeyle ilgili bilgiler için bkz. “Adobe AIR yayınlama ayarlarını belirleme” sayfa 13.
1 Flash uygulamasını başlatın ya da Flash uygulamasını zaten başlattıysanız, açık pencereleri kapatarak Karşılama
ekranına geri dönün.
Not: Flash Karşılama ekranını devre dışı bıraktıysanız Düzen > Tercihler'i seçip Genel kategorisindeki Başlangıç
açılır menüsünde Karşılama Ekranı'nı işaretleyerek yeniden görüntülenmesini sağlayabilirsiniz.
2 Karşılama Ekranı'nda, Flash Dosyası'nı (Adobe AIR) tıklatın.
Adobe AIR uygulama ayarlarına ve Yardım belgelerine nasıl erişeceğinizi bildiren bir uyarı mesajı açılır. Bir Daha
Gösterme seçeneğini işaretleyerek bu uyarı mesajının gelecekte bir daha gösterilmemesini sağlayabilirsiniz, ancak
bunu yaparsanız ileride tekrar gösterilmesini sağlamanın hiçbir yolu yoktur.
Adobe AIR yayınlama ayarlarını belirleme
Bir AIR dosyasının ayarlarını incelemek veya değiştirmek ve bir Flash Dosyası (ActionScript 3.0) belgesini Flash
Dosyası (Adobe AIR) belgesine dönüştürmek için Flash yayınlama ayarlarını kullanın.
Adobe AIR yayınlama ayarlarını görüntüleme
1 Flash Karşılama ekranında bir Flash Dosyası (Adobe AIR) belgesi açın.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 14
Flash CS3 Professional için Adobe AIR Güncellemesi
2 Dosya > Yayınlama Ayarları'nı seçin ve Flash sekmesini tıklatarak Adobe AIR yayınlama ayarlarını açın.
Bir Adobe AIR belgesi açtığınızda Sürüm menüsünde Adobe AIR 1.0 otomatik olarak seçilidir. ActionScript
sürümü otomatik olarak ActionScript 3.0'a ayarlanmıştır. Yerel oynatma güvenliği ayarı AIR SWF dosyası ile ilgili
olmadığından silik biçimde görüntülenir.
Açtığınız bir Flash FLA dosyasını yayınlama ayarlarını değiştirerek bir Flash AIR dosyasına dönüştürebilirsiniz.
Yayınlama Ayarları iletişim kutusunu kullanarak bir Flash FLA dosyasını Flash AIR dosyasına dönüştürme
1 Şunlardan birini yapın:
• Varolan bir FLA dosyasını açın.
• Bir FLA dosyası oluşturmak için Karşılama ekranını kullanın veya Dosya > Yeni seçin.
2 Dosya > Yayınlama Ayarları'nı seçin.
3 Flash sekmesindeki Sürüm açılır menüsünden Adobe AIR 1.0'ı seçin.
ActionScript sürümü girişi devre dışıdır çünkü bir AIR dosyası için yalnızca ActionScript 3.0 seçilebilir.
FLA dosyası ve Adobe AIR dosyası için kalan varsayılan seçenekler için aynıdır.
4 Yayınla düğmesini tıklattıktan sonra Tamam düğmesini tıklatarak Yayınlama Ayarları iletişim kutusunu kapatın.
Seçim aracı seçildiğinde Özellik denetçisi artık Player hedefinin Adobe AIR 1 olduğunu gösterir.
Not: Adobe AIR 1.0 profilini seçtiğinizde, Flash otomatik olarak Classpath ortam değişkenine AIR playerglobal.swc
dosyasının konumunu ekler. AIR playerglobal.swc dosyası ActionScript AIR API'lerini kullanmanızı sağlar. Ancak
Adobe AIR 1'den Adobe® Flash® Player 9'a geçtiğinizde Flash otomatik olarak varsayılan profile geri dönmez veya
Classpath ayarını Flash Player 9 için playerglobal.swc dosyasını kullanacak şekilde değiştirmez. Yayınlama ayarını
Adobe AIR 1 yerine Flash Player 9 olarak değiştirirseniz, yayınlama profilini de Varsayılan olarak değiştirmeniz
gerekir.
Yayınlama Ayarları iletişim kutusu ile ilgili daha fazla bilgi için www.adobe.com/go/learn_fl_using_tr adresindeki
Flash Uygulamasını Kullanma başlığına bakın.
Komutlar menüsünü kullanarak bir Flash FLA dosyasını Flash AIR uygulamasına dönüştürme
1 Flash FLA dosyanızı açın.
2 Yeni bir Flash Dosyası (ActionScript 3.0) açıyorsanız bu dosyayı kaydedin. Kaydetmemeniz halinde bir sonraki
adımda bir uyarı mesajı görüntülenir.
3 Komutlar > AIR - Uygulama ve Yükleyici Ayarları'nı seçin.
Dosyayı Adobe AIR yayınlama ayarlarına dönüştürmeyi isteyip istemediğinizi soran bir mesaj görüntülenir.
4 FLA dosyasını Adobe AIR yayınlama ayarlarına dönüştürmek için Tamam'ı tıklatın. AIR - Uygulama ve Yükleyici
Ayarları iletişim kutusu açılır.
AIR - Uygulama ve Yükleyici Ayarları iletişim kutusu hakkında bilgi için bkz. “AIR uygulaması ve yükleme
dosyaları oluşturma” sayfa 15.
Dönüştürdüğünüz AIR FLA dosyasında Filmi Test Et, Film Hatalarını Ayıkla ve AIR Dosyası Oluştur komutlarını
kullanabilirsiniz.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 15
Flash CS3 Professional için Adobe AIR Güncellemesi
Bir Adobe AIR uygulamasının önizlemesini görüntüleme
AIR uygulama penceresinde açılacağı şekilde bir Flash AIR SWF dosyasının önizlemesini görüntüleyebilirsiniz.
Uygulamayı paketleyip yüklemeden önce uygulamanın görsel öğelerinin nasıl görüneceğini görmek istediğinizde
önizleme görüntülemek işinize yarayacaktır.
1 Yayınlama ayarlarını bir Adobe AIR uygulamasına göre yaptığınızdan emin olun. Daha fazla bilgi için bkz. “Adobe
AIR yayınlama ayarlarını belirleme” sayfa 13.
2 Kontrol > Filmi Test Et'i seçin veya Ctrl + Enter tuşlarına basın.
Uygulama ayarlarını AIR - Uygulama ve Yükleyici Ayarları iletişim kutusunu kullanarak yapmamanız halinde,
Flash sizin yerinize SWF dosyasının yazıldığı klasörün içinde bir varsayılan uygulama tanımlayıcı dosyası (swfadıapp.xml) oluşturur. AIR - Uygulama ve Yükleyici Ayarları iletişim kutusunu kullanarak uygulama ayarlarını
yapmanız halinde uygulama tanımlayıcı dosyası yaptığınız bu ayarları gösterir.
Bir Adobe AIR uygulamasının hatalarını ayıklama
Adobe AIR SWF dosyasının hataları, uzaktan hata ayıklama durumu dışında bir Flash Player 9 ActionScript 3.0 SWF
dosyası gibi ayıklanabilir.
1 Adobe AIR yayınlama ayarlarını yaptığınızdan emin olun.
2 Eylemler paneline (Pencere > Eylemler) ActionScript kodu ekleyin. Test etmek için Eylemler paneline, Zaman
Çizelgesi'nin ilk karesine aşağıdaki gibi bir trace() ifadesi ekleyebilirsiniz:
trace("My application is running");
3 Hata Ayıkla > Film Hatalarını Ayıkla'yı seçin veya Ctrl + Shift + Enter tuşlarına basın.
Flash, ActionScript hata ayıklayıcıyı başlatır ve SWF dosyasını hata ayıklama bilgileriyle birlikte dışa aktarır.
Uygulama ayarlarını AIR - Uygulama ve Yükleyici Ayarları iletişim kutusunu kullanarak yapmamanız halinde,
Flash sizin yerinize SWF dosyasının yazıldığı klasörün içinde bir varsayılan uygulama tanımlayıcı dosyası (swfadıapp.xml) oluşturur. AIR - Uygulama ve Yükleyici Ayarlarını kullanarak uygulama ayarlarını yapmanız halinde
uygulama tanımlama dosyası yaptığınız bu ayarları gösterir.
Uygulamanızın hatalarını ayıklamak için Hata Ayıkla > Film Hatalarını Ayıkla'yı seçtiğinizde veya Ctrl + Shift +
Enter tuşlarına bastığınızda Flash, uygulamanızın ActionScript kodu içerip içermediğini belirten bir uyarı
görüntüler.
AIR uygulaması ve yükleme dosyaları oluşturma
Uygulamanızı tamamladıktan sonra konuşlandırmak için AIR uygulamasını ve yükleyici dosyalarını oluşturun.
Adobe AIR Flash Komutlar menüsüne iki yeni öğe ekler: AIR - Uygulama ve Yükleyici Ayarları ve AIR - AIR Dosyası
Oluştur. AIR uygulamasını ve yükleyici ayarlarını oluşturduktan sonra varolan ayarlarla AIR (.air) dosyasını yeniden
oluşturmak için AIR - AIR Dosyası Oluştur öğesini kullanabilirsiniz.
Adobe AIR uygulama ve yükleyici dosyalarını oluşturma
1 Flash içinde Adobe AIR uygulamanızı oluşturan sayfayı veya sayfa dizisini açın.
2 AIR - Uygulama ve Yükleyici Ayarları iletişim kutusunu açmadan önce Adobe AIR FLA dosyasını kaydedin.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 16
Flash CS3 Professional için Adobe AIR Güncellemesi
3 Komutlar > AIR - Uygulama ve Yükleyici Ayarları'nı seçin.
4 AIR - Uygulama ve Yükleyici Ayarları iletişim kutusunda gerekli alanları doldurduktan sonra AIR Dosyasını
Yayınla düğmesini tıklatın.
AIR Dosyasını Yayınla düğmesini tıklattığınızda şu öğeler paketlenir: FLA dosyası, SWF dosyası, uygulama
tanımlayıcı dosyası, uygulama simge dosyaları ve Eklenen Dosyalar metin kutusunda listelenen dosyalar. Daha
önce dijital sertifika oluşturmadıysanız, AIR Dosyasını Yayınla düğmesini tıklattığınızda Flash, Dijital İmza iletişim
kutusunu görüntüler.
AIR - Uygulama ve Yükleyici Ayarları iletişim kutusu iki bölüme ayrılmıştır: Uygulama Ayarları ve Yükleyici Ayarları.
Bu ayarlarla ilgili daha fazla bilgi için aşağıdaki bölümleri inceleyin.
Uygulama ayarları
AIR - Uygulama ve Yükleyici Ayarları iletişim kutusunun Uygulama ayarları bölümünde aşağıdaki seçenekler yer alır:
Dosya Adı Uygulamanın ana dosyasının adı. Varsayılan olarak SWF dosyasının adını alır.
Ad Yükleyici tarafından uygulama dosya adını ve uygulama klasörünü oluşturmak için kullanılan ad. Bu adın
yalnızca, dosya adları veya klasör adları için geçerli olan karakterleri içermesi gerekir. Varsayılan olarak SWF
dosyasının adını alır.
Sürüm İsteğe bağlı. Uygulamanız için bir sürüm numarası belirtir. Varsayılan olarak boştur.
Kimlik Uygulamanıza benzersiz bir kimlik ile tanımlar. İsterseniz varsayılan kimliği değiştirebilirsiniz. Kimlikte
boşluk veya özel karakter kullanmayın. Geçerli karakterler: 0-9, a-z, A-Z, . (nokta) ve - (tire), 1 ila 212 karakter
uzunluğunda. Varsayılan olarak şu şekildedir: com.adobe.example.application_name.
Açıklama İsteğe bağlı. Kullanıcı uygulamayı yüklediğinde görüntülenecek bir uygulama açıklaması girmenize olanak
tanır. Varsayılan olarak boştur.
Telif Hakkı İsteğe bağlı. Kullanıcı uygulamayı yüklediğinde görüntülenecek bir telif hakkı bildirimi girmenize olanak
tanır.
Pencere Stili Kullanıcı uygulamayı bilgisayarında çalıştırdığında kullanıcı arabiriminde kullanılacak pencere stilini
(veya kenarlığını) belirtir. İşletim sisteminin kullandığı görsel stile başvuran Sistem Kenarlığı seçeneğini
belirleyebilirsiniz. Ayrıca Özel Kenarlık (opak) veya Özel Kenarlık (saydam) seçeneğini de belirleyebilirsiniz.
Uygulamanızı sistem kenarlığı olmadan görüntülemek için Hiçbiri seçeneğini belirleyin. Sistem Kenarlığı seçeneği
uygulamayı işletim sistemi standardı pencere kontrolü ile çevreler. Özel Kenarlık (opak) seçeneği standart sistem
kenarlığını kaldırarak kendi uygulamanıza özel bir kenarlık oluşturmanıza olanak tanır. (Özel kenarlık doğrudan FLA
dosyası içinde oluşturulur.) Özel Kenarlık (saydam) seçeneği de Özel Kenarlık (opak) gibidir, ancak sayfa kenarlarına
saydamlık ekler. Bu saydamlık kare veya dikdörtgen şeklinde olmayan uygulama pencerelerinin kullanılabilmesini
sağlar.
Simge İsteğe bağlı. Uygulama için bir simge belirtmenize olanak verir. Uygulama kurulduktan ve Adobe AIR'de
çalıştırıldıktan sonra bu simge gösterilir. Simgenin farklı boyutlarda görüntülenebilmesini sağlamak için dört farklı
boyut (128, 48, 32 ve 16 piksel) belirtebilirsiniz. Örneğin simge, dosya tarayıcısında küçük resim, ayrıntı ve döşeme
görünümlerinde görüntülenebilir. Ayrıca masaüstü simgesi olarak ve AIR uygulama penceresinin başlığında da
görüntülenebileceği gibi başka yerlerde de kullanılabilir.
Herhangi bir simge dosyası belirtilmemesi halinde simge görüntüsü için varsayılan örnek AIR uygulama simgesi
kullanılır.
Bir simge belirtmek için AIR - Uygulama ve Yükleyici Ayarları iletişim kutusunda Simge Görüntüsü Seç düğmesini
tıklatın. Açılan Simge görüntüleri iletişim kutusunda, simge boyutlarından her biri için klasörü tıklatın ve kullanılacak
simge dosyasını seçin. Dosyalar PNG (Portable Network Graphics - Taşınabilir Ağ Grafiği) formatında olmalıdır.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 17
Flash CS3 Professional için Adobe AIR Güncellemesi
Aşağıdaki resimde varsayılan Adobe AIR uygulama simgelerini görüntüleyen Simge Görüntüleri iletişim kutusu
gösterilmektedir.
Farklı boyutlarda uygulama simgesi görüntüsü belirtme
Belirttiğiniz görüntünün boyutları istenen ölçülerde olmalıdır (128x128, 48x48, 32x32 veya 16x16). Simge
boyutlarından herhangi birine uygun bir görüntü belirtmemeniz halinde Adobe AIR verilen görüntülerden birini
ölçekleyerek eksik simge görüntüsünün yerine koyar.
Gelişmiş Ayarlar
AIR - Uygulama ve Yükleyici Ayarları iletişim kutusunda bulunan Ayarlar düğmesi uygulama tanımlayıcı dosyası için
gelişmiş ayarlar belirlemenize olanak tanır. Ayarlar düğmesini tıklattığınızda Gelişmiş Ayarlar iletişim kutusu
görüntülenir.
Gelişmiş Ayarlar iletişim kutusu uygulamanın işlemesi gereken ilişkilendirilmiş dosya türlerini belirtmenize olanak
tanır. Örneğin uygulamanızın HTML dosyalarını işleme konusunda ana uygulama olmasını istiyorsanız bunu
İlişkilendirilmiş Dosya Türleri metin kutusunda belirtmeniz gerekir.
Ayrıca uygulamanın aşağıda gösterilen kısımları için de ayar belirtebilirsiniz:
• Başlangıç penceresinin boyutu ve yerleşimi
• Uygulamanın yükleneceği klasör
• Uygulamanın yerleştirileceği Program menü klasörü.
İletişim kutusu şu seçenekleri içerir:
İlişkilendirilmiş dosya türleri AIR uygulamasının işlediği ilişkilendirilmiş dosya türlerini belirmenizi sağlar. Metin
kutusuna yeni bir dosya türü eklemek için Artı (+) düğmesini tıklatın. Artı düğmesini tıklattığınızda Dosya Türü
Ayarları iletişim kutusu açılır. Eksi (-) düğmesini tıklattığınızda metin kutusunda seçili olan öğe kaldırılır. Kalem
düğmesini tıklattığınızda Dosya Türü Ayarları iletişim kutusu açılır ve metin kutusunda seçtiğiniz öğeyi
düzenlemenizi sağlar. Varsayılan olarak Eksi (-) ve Kalem düğmeleri silik biçimde görüntülenir. Metin kutusunda bir
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 18
Flash CS3 Professional için Adobe AIR Güncellemesi
öğe seçtiğinizde Eksi (-) ve Kalem düğmeleri etkinleşerek seçtiğiniz öğeyi kaldırmanızı veya düzenlemenizi sağlar.
Metin kutusundaki varsayılan değeri Hiçbiri'dir.
İlişkilendirilmiş dosya türleri için dosya türü ayarları ile ilgili daha fazla bilgi için, bkz. “Dosya türü ayarları” sayfa 18.
Başlangıç penceresi ayarları Başlangıç uygulama penceresi için boyut ve yerleşim ayarlarını belirtmenizi sağlar.
• Genişlik: Pencerenin başlangıç genişliğini piksel cinsinden belirtir. Bu değer varsayılan olarak boş bırakılmıştır.
• Yükseklik: Pencerenin başlangıç yüksekliğini piksel cinsinden belirtir. Bu değer varsayılan olarak boş bırakılmıştır.
• X: Pencerenin başlangıç yatay konumunu piksel cinsinden belirtir. Bu değer varsayılan olarak boş bırakılmıştır.
• Y: Pencerenin başlangıç dikey konumunu piksel cinsinden belirtir. Bu değer varsayılan olarak boş bırakılmıştır.
• Maksimum Genişlik ve Maksimum Yükseklik: Pencerenin maksimum boyutunu piksel cinsinden belirtir. Bu
değerler varsayılan olarak boş bırakılmıştır.
• Minimum Genişlik ve Minimum Yükseklik: Pencerenin minimum boyutunu piksel cinsinden belirtir. Bu değerler
varsayılan olarak boş bırakılmıştır.
• Büyütülebilir: Kullanıcının pencereyi büyütüp büyütemeyeceğini belirtmenizi sağlar. Bu seçenek varsayılan olarak
seçilidir (veya true değeri verilmiştir).
• Küçültülebilir: Kullanıcının pencereyi küçültüp küçültemeyeceğini belirtmenizi sağlar. Bu seçenek varsayılan
olarak seçilidir (veya true değeri verilmiştir).
• Yeniden Boyutlandırılabilir: Kullanıcının pencereyi yeniden boyutlandırıp boyutlandıramayacağını belirtmenizi
sağlar. Bu seçenek belirlenmezse; Maksimum Genişlik, Maksimum Yükseklik, Minimum Genişlik ve Minimum
Yükseklik seçenekleri silik biçimde görüntülenir. Bu seçenek varsayılan olarak seçilidir (veya true değeri
verilmiştir).
• Görünür: Uygulama penceresinin başlangıçta görünür olup olmayacağını belirtmenizi sağlar. Bu seçenek
varsayılan olarak seçilidir (veya true değeri verilmiştir).
Diğer Ayarlar Yükleme ile ilgili aşağıdaki ek bilgileri belirtmenizi sağlar:
• Yükleme Klasörü: Uygulamanın yüklendiği klasörü belirtir.
• Program Menü Klasörü: Uygulama için program menü klasörü adını belirtir.
• Özel Güncelleme Kullanıcı Arabirimi: Bir kullanıcının zaten yüklenmiş olan bir uygulamanın AIR dosyasını
açtığında ne olacağını belirtir. Varsayılan olarak AIR, kullanıcının yüklenmiş olan sürümü AIR dosyası içinde
bulunan sürümle güncelleştirmesini sağlayan bir iletişim kutusu görüntüler. Kullanıcının bu kararı vermesini
istemiyor ve uygulamanın güncellemeleri üzerinde tam denetime sahip olmasını istiyorsanız bu seçeneği belirleyin.
Bu seçenek varsayılan davranışı geçersiz kılar ve uygulama kendi güncellemeleri üzerinde denetime sahip olur.
Bir AIR uygulamasını programsal olarak güncellemek konusunda bilgi için bkz. “AIR uygulamalarını güncelleme”
sayfa 313.
Dosya türü ayarları
Uygulama için ilişkilendirilmiş dosya türlerinde ekleme veya düzenleme yapmak için Gelişmiş Ayarlar iletişim
kutusundaki Artı (+) veya Kalem düğmesini tıklattığınızda Flash, Dosya Türü Ayarları iletişim kutusunu görüntüler.
Bu iletişim kutusundaki iki gerekli alan Ad ve Uzantı alanlarıdır. Tamam'ı tıklattığınızda bu alanlardan herhangi birisi
boşsa Flash bir hata iletişim kutusu görüntüler.
İlişkilendirilmiş bir dosya türü için aşağıdaki ayarları belirtebilirsiniz:
Ad Dosya türünün adı (ör: Köprü Metni İşaretleme Dili, Metin Dosyası veya Örnek).
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 19
Flash CS3 Professional için Adobe AIR Güncellemesi
Uzantı Boşluksuz ve en fazla 39 temel alfanümerik karakterden (A-Za-z0-9) oluşan dosya adı uzantısı (örneğin html,
txt veya xmpl).
Açıklama İsteğe bağlı. Dosya türü açıklaması (örneğin Adobe Video Dosyası).
İçerik türü İsteğe bağlı. Dosya için MIME türünü belirtir.
Dosya Türü Simge Ayarları İsteğe bağlı. Dosya türü ile ilişkilendirilmiş bir simge belirtmenizi sağlar. Simgenin farklı
boyutlarda görüntülenebilmesini sağlamak için dört farklı boyut (128x128, 48x48, 32x32 ve 16x16) belirtebilirsiniz.
Örneğin simge, dosya tarayıcısında küçük resim, ayrıntı ve döşeme görünümlerinde görüntülenebilir.
Belirttiğiniz görüntünün belirttiğiniz boyutta olması gerekir. Boyutlardan herhangi biri için bir dosya
belirtmediğinizde AIR en yakın boyuttaki görüntüyü kullanır ve eksik olanın boyutlarına uyacak şekilde ölçekler.
Bir simge belirtmek için simge boyutu klasörünü tıklatıp kullanılacak simge dosyasını seçin ya da istemin yanındaki
metin kutusuna simge dosyasının yolunu ve dosya adını girin. Simge dosyası PNG formatında olmalıdır.
Yeni bir dosya türü oluşturulduktan sonra Gelişmiş Ayarlar iletişim kutusundaki Dosya Türü liste kutusunda
gösterilir.
Uygulama tanımlayıcı dosyası ayarları
Belirttiğiniz uygulama ayarları uygulama_adi-app.xml dosyasına kaydedilir. Ancak Flash uygulamasına özel bir
uygulama tanımlayıcı dosyası kullanmak istediğinizi belirtme seçeneğiniz de vardır.
Özel Uygulama Tanımlayıcı Dosyası Kullan Özel bir uygulama tanımlayıcı dosyası kullanmanızı sağlar. Özel
Uygulama Tanımlayıcı Dosyası Kullan seçeneğini belirlediğinizde iletişim kutusunun Uygulama Ayarları bölümü silik
biçimde görüntülenir. Özel uygulama tanımlayıcı dosyasının konumunu, Özel Uygulama Tanımlayıcı Dosyası Kullan
düğmesinin altında bulunan metin alanına girerek veya klasör simgesini tıklatıp dosyanın konumuna gözatarak
belirtebilirsiniz. Uygulama tanımlayıcı dosyası ile ilgili daha fazla bilgi için bkz. “Özel bir uygulama tanımlayıcı dosyası
oluşturma” sayfa 20.
Yükleyici ayarları
AIR - Uygulama ve Yükleyici Ayarları iletişim kutusunun ikinci kısmı uygulamayı yükleme ile ilgili ayarları içerir.
Dijital İmza Tüm Adobe AIR uygulamalarının başka bir sisteme yüklenebilmesi için imzalanmış olması gerekir. Bir
Flash Adobe AIR uygulamasına dijital imza atamak ile ilgili bilgi için bkz. “Uygulamanızı imzalama” sayfa 21.
Hedef AIR dosyasının kaydedileceği yeri belirtir. Varsayılan konum FLA dosyasını kaydettiğiniz dizindir. Farklı bir
konum seçmek için klasör simgesini tıklatın. Varsayılan paket adı .air dosya adı uzantısına sahip olan uygulama adıdır.
Eklenen Dosyalar/Klasörler Uygulamanıza eklenecek diğer dosya ve klasörleri belirtir. Dosya eklemek için Artı (+)
düğmesini, klasör eklemek için ise klasör düğmesini tıklatın. Listenizde bulunan bir dosyayı veya klasörü silmek için
silmek istediğiniz dosyayı veya klasörü seçtikten sonra Eksi (-) düğmesini tıklatın.
Varsayılan olarak uygulama tanımlayıcı dosyası ve ana SWF dosyası paket listesine otomatik olarak eklenir. Paket
listesi Adobe AIR FLA dosyasını henüz yayınlamamış olsanız dahi bu dosyaları gösterir. Paket listesi dosyaları ve
klasörleri düz bir yapıda gösterir. Bir klasör içindeki dosyalar listelenmez ve dosyaların tam yol adları gösterilir, ancak
gerektiği zaman kısaltılır.
Simge dosyaları listeye dahil edilmez. Flash uygulaması dosyaları paketlediğinde simge dosyalarını SWF dosyasının
konumuna göre geçici bir klasöre kopyalar. Flash uygulaması paketleme tamamlandıktan sonra klasörü siler.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 20
Flash CS3 Professional için Adobe AIR Güncellemesi
Uygulama ve yükleyici dosyalarının oluşturulamaması
Uygulama ve yükleyici dosyaları aşağıdaki durumlarda oluşturulamaz:
• Uygulama kimliği dizesinin uzunluğunun hatalı olması veya kullanılan karakterlerin geçersiz olması durumunda.
Uygulama kimliği dizesi 1 ila 212 karakterden oluşabilir ve aşağıdaki karakterleri içerebilir: 0-9, a-z, A-Z, . (nokta),
- (tire).
• Yükleyici listesinde bulunan dosyaların var olmaması durumunda.
• Özel simge dosyalarının boyutlarının hatalı olması durumunda.
• AIR hedef klasörünün yazma erişimine sahip olmaması durumunda.
• Uygulamayı imzalamamış olmanız veya daha sonra imzalanacak bir Adobe AIRI uygulaması olduğunu
belirtmemiş olmanız durumunda.
Özel bir uygulama tanımlayıcı dosyası oluşturma
Uygulama tanımlayıcı dosyası bir metin düzenleyici ile düzenleyebileceğiniz bir XML dosyasıdır. Özel bir uygulama
tanımlayıcı dosyası oluşturmak için istediğiniz değerleri belirtmek için değerleri düzenleyin. Varsayılan değerler şu
şekildedir:
• id = com.adobe.example.swfadı
• fileName = swfadı
• name = swfadı
• version = 1.0
• description = blank
• copyright = blank
• initialWindow
• title = name
• content = swfadı.swf
• systemChrome = standard, type = normal
• transparent = false
• visible = true
• icon
• image128x128 = icons/AIRApp_128.png
• image48x48 = icons/AIRApp_48.png
• image32x32 = icons/AIRApp_32.png
• image16x16 = icons/AIRApp_16.png
• customUpdateUI = false
• allowBrowserInvocation = false
Uygulama tanımlayıcı dosyası ile ilgili daha fazla bilgi için, bkz. “AIR uygulamasının özelliklerini ayarlama”
sayfa 42.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 21
Flash CS3 Professional için Adobe AIR Güncellemesi
Uygulamanızı imzalama
Tüm Adobe AIR uygulamalarının başka bir sisteme yüklenebilmesi için imzalanmış olması gerekir. Ancak Flash
uygulamanın daha sonra imzalanabilmesi için imzalanmamış Adobe AIR yükleyici dosyaları oluşturmanıza da olanak
tanır. Bu imzalanmamış Adobe AIR yükleyici dosyalarına AIRI paketi adı verilir. Bu özellik sertifika başka bir
bilgisayarda olduğunda veya imzalama işlemi uygulama geliştirme işleminden ayrı olarak yapıldığı durumlarda
kullanılmaya yöneliktir.
Bir kök sertifika yetkilisinden önceden satın alınmış dijital bir sertifika ile bir Adobe AIR uygulamasını imzalama
1 AIR - Uygulama ve Yükleyici Ayarları iletişim kutusunda bulunan Dijital İmza Ayarla düğmesini tıklatın. Dijital
İmza iletişim kutusu açılır.
İletişim kutusunda Adobe AIR uygulamanızı dijital bir sertifika ile imzalamanızı veya bir AIRI paketi hazırlamanızı
sağlayan iki seçenek düğmesi bulunur. AIR uygulamanızı imzalarsanız, bir kök sertifika yetkilisi tarafından verilmiş
olan bir dijital sertifikayı kullanabilir veya kendinden imzalı bir sertifika oluşturabilirsiniz. Kendinden imzalı bir
sertifika oluşturmak kolaydır, ancak bir kök sertifika yetkilisi tarafından verilen bir sertifika kadar güvenilir
değildir.
Bir AIR uygulamasını imzalamak için kullanılan Dijital İmza iletişim kutusu
2 Açılır menüden bir sertifika dosyası seçin veya bir sertifika dosyasını bulmak için Gözat düğmesini tıklatın.
3 Sertifikayı seçin.
4 Bir şifre girin.
5 Tamam'ı tıklatın.
AIR uygulamanızı imzalama hakkında daha fazla bilgi için bkz. “AIR dosyasını dijital olarak imzalama” sayfa 307.
Kendinden imzalı bir dijital sertifika oluşturma
1 Oluştur düğmesini tıklatın. Kendinden İmzalı Dijital Sertifika iletişim kutusu açılır.
2 Yayıncı adı, Birim, Kurum adı, Ülke, Şifre ve Şifreyi Onaylayın bilgilerini tamamlayın.
3 Sertifika türünü belirtin.
Tür seçeneği sertifikanın sahip olacağı güvenlik düzeyini belirlemenizi sağlar: 1024-RSA, 1024-bit anahtar (daha az
güvenli) kullanırken 2048-rsa, 2048-bit anahtar kullanır (daha güvenli).
4 Farklı Kaydet girişini tamamlayarak veya bir klasör konumuna göz atmak için Gözat düğmesini tıklatarak bilgiyi
bir sertifika dosyası içine kaydedin.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 22
Flash CS3 Professional için Adobe AIR Güncellemesi
5 Tamam'ı tıklatın.
6 Dijital İmza iletişim kutusunda bu yordamın ikinci adımında atadığınız şifreyi girin ve Tamam'ı tıklatın.
Bir dijital sertifika belirledikten sonra, Ayarla düğmesi Değiştir düğmesine dönüşür.
Bu oturum için kullandığınız şifrenin Flash uygulaması tarafından hatırlanmasını istiyorsanız Bu Oturum için Şifreyi
Anımsa seçeneğini tıklatın.
Tamam'ı tıklattığınızda Zaman Damgası seçeneği belirlenmemişse dijital sertifikanın süresi dolduğunda uygulamanın
yüklenmeyeceğini belirten bir uyarı iletişim kutusu açılır. Bu uyarıya yanıt olarak Evet seçeneğini tıklatırsanız zaman
bilgisi devre dışı bırakılır. Hayır seçeneğini tıklatırsanız Zaman Damgası seçeneği otomatik olarak seçilir ve zaman
damgası özelliği etkin hale gelir.
Kendinden imzalı bir dijital sertifika oluşturma ile ilgili daha fazla bilgi için, bkz. “AIR dosyasını dijital olarak
imzalama” sayfa 307.
Ayrıca dijital imza kullanmadan bir AIR Intermediate (AIRI) uygulaması da oluşturabilirsiniz. Ancak siz dijital imza
ekleyene kadar hiçbir kullanıcı uygulamayı masaüstüne yükleyemez.
Daha sonra imzalanacak bir AIRI paketi oluşturma
❖ Dijital İmza iletişim kutusunda Daha Sonra İmzalanacak Bir AIRI Paketi Hazırla'yı seçin ve Tamam'ı tıklatın.
Dijital imza durumu daha sonra imzalanacak bir AIRI paketi hazırlamayı seçtiğinizi gösterecek şekilde değişir ve
Ayarla düğmesi de Değiştir düğmesine dönüşür.
23
Bölüm 7: AIR güvenliği
Bu başlık, AIR uygulamasını geliştirirken dikkate almanız gereken güvenlik sorunlarını tartışır.
AIR güvenlik temelleri
AIR uygulamaları, yerel uygulamalardaki kullanıcı ayrıcalıklarının aynılarıyla çalışır. Bu ayrıcalıklar genellikle
dosyaları okuma ve yazma, uygulamaları başlatma, ekranda çizim yapma ve ağla iletişim kurma gibi işletim sistemi
özelliklerine kapsamlı erişim sağlar. Yerel uygulamalarda geçerli olan kullanıcıya özgü ayrıcalıklar gibi işletim sistemi
kısıtlamaları, aynı şekilde AIR uygulamalarında da geçerlidir.
Adobe® AIR™ güvenlik modeli, Adobe® Flash® Player güvenlik modelinin evrilmiş bir hali olsa da, güvenlik sözleşmesi
tarayıcıdaki içeriğe uygulanan güvenlik sözleşmesinden farklıdır. Bu sözleşme, geliştiricilere tarayıcı tabanlı
uygulamalar için alışılmadık özgürlükler ile zengin deneyimler sağlayan kapsamlı işlevlerin güvenli yollarını sunar.
Çalışma zamanının bellek yönetimi sağlayabilmesi için, AIR uygulamaları, derlenmiş bayt kodu (SWF içeriği) veya
yorumlanmış komut dosyası (JavaScript, HTML) kullanılarak yazılır. Bu, AIR uygulamalarının arabellek taşması ve
bellek bozulması gibi bellek yönetimiyle ilişkili güvenlik açıklarından etkilenme olasılığını en aza indirir. Bunlar, yerel
kodda yazılan masaüstü uygulamalarını etkileyen en yaygın güvenlik açıklarından bazılarıdır.
Yükleme ve güncellemeler
AIR uygulamaları, air uzantısını kullanan AIR yükleyici dosyaları yoluyla dağıtılır. Adobe AIR yüklendiğinde ve bir
AIR yükleyici dosyası açıldığında, çalışma zamanı yükleme işlemini yönetir.
Not: Geliştiriciler bir sürüm, uygulama adı ve yayıncı kaynağı belirtebilir, ancak ilk uygulama yükleme iş akışının
kendisi değiştirilemez. Tüm AIR uygulamaları çalışma zamanı tarafından yönetilen güvenli, düzene koyulmuş ve tutarlı
bir yükleme yordamını paylaştığından, bu kısıtlama kullanıcılar için avantajlıdır. Uygulama özelleştirmesi gerekliyse,
uygulama ilk yürütüldüğünde sağlanabilir.
Çalışma zamanı yükleme konumu
SWF dosyalarının Flash Player tarayıcı eklentisinin yüklenmesini gerektirdiği gibi, AIR uygulamaları da kullanıcının
bilgisayarında önce çalışma zamanının yüklenmesini gerektirir.
Çalışma zamanı, kullanıcının bilgisayarında aşağıdaki konuma yüklenir:
• Mac OS: /Library/Frameworks/
• Windows: C:\Program
• Linux: /opt/Adobe
Files\Common Files\Adobe AIR
AIR/
Mac OS'de uygulamanın güncellenmiş bir sürümünü yüklemek için, kullanıcının uygulama dizinine yükemek için
yeterli sistem ayrıcalıklarına sahip olması gerekir. Windows ve Linux'ta, kullanıcı yönetici ayrıcalıklarına sahip
olmalıdır.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 24
AIR güvenliği
Çalışma zamanı iki şekilde yüklenebilir: kesintisiz yükleme özelliğini kullanarak (doğrudan bir web tarayıcısından
yükleme) veya elle yükleme yoluyla. Daha fazla bilgi için bkz. “AIR uygulamalarını Dağıtma, Yükleme ve Çalıştırma”
sayfa 298.
Kesintisiz yükleme (çalışma zamanı ve uygulama)
Kesintisiz yükleme özelliği, geliştiricilere Adobe AIR'i henüz yüklememiş kullanıcılar için düzenlenmiş bir yükleme
deneyimi sağlar. Kesintisiz yükleme yönteminde geliştirici, yüklemeye ilişkin uygulamayı sunan bir SWF dosyası
oluşturur. Kullanıcı uygulamayı yüklemek için SWF dosyasını tıklattığında, SWF dosyası çalışma zamanını saptamaya
çalışır. Çalışma zamanı saptanamazsa, yüklenir ve hemen geliştirici uygulamasına ilişkin yükleme işlemiyle
etkinleştirilir.
Elle yükleme
Alternatif olarak, kullanıcı AIR dosyasını açmadan önce çalışma zamanını elle indirip yükleyebilir. Daha sonra
geliştirici AIR dosyasını farklı şekillerde dağıtabilir (örneğin, e-posta veya bir web sitesindeki HTML linki yoluyla).
AIR dosyası açıldığında, çalışma zamanı uygulama yüklemesini işlemeye başlar.
Bu işlem hakkında daha fazla bilgi için bkz. “AIR uygulamalarını Dağıtma, Yükleme ve Çalıştırma” sayfa 298
Uygulama yükleme akışı
AIR güvenlik modeli, kullanıcıların AIR uygulamasının yüklenip yüklenmeyeceğine karar vermelerine olanak tanır.
AIR yükleme deneyimi, kullanıcıların güvenle ilgili bu kararı daha kolay vermelerini sağlayan yerel uygulama yükleme
teknolojilerinin üzerinde çeşitli iyileştirmeler sağlar.
• Çalışma zamanı, AIR uygulaması bir web tarayıcısındaki linkten yüklendiğinde bile, tüm işletim sistemlerinde
tutarlı bir yükleme deneyimi sağlar. Çoğu yerel uygulama yükleme deneyimi, güvenlik bilgisi sağlıyorsa bile, bunu
tarayıcıya veya diğer uygulamalara bağlı olarak sağlar.
• AIR uygulaması yükleme deneyimi, uygulamanın kaynağını ve uygulamanın hangi ayrıcalıkları kullanabileceğine
ilişkin bilgiyi tanımlar (kullanıcı yüklemenin ilerlemesine izin verirse).
• Çalışma zamanı, AIR uygulamasının yükleme işlemini yönetir. AIR uygulaması, çalışma zamanının kullandığı
yükleme işlemini değiştiremez.
Genellikle, kullanıcılar güvenmedikleri veya doğrulanamayan bir kaynaktan gelen masaüstü uygulamalarını
yüklememelidir. Yerel uygulamalara ilişkin güvenlik kanıtının zorluğu, diğer yüklenebilir uygulamalar için olduğu
gibi, AIR uygulamaları için de aynı şekilde geçerlidir.
Uygulama hedefi
Yükleme dizini, aşağıdaki seçeneklerden biri kullanılarak ayarlanabilir:
1 Kullanıcı, yükleme sırasında hedefi özelleştirebilir. Uygulama, kullanıcının belirttiği yere yüklenir.
2 Kullanıcı yükleme hedefini değiştirmezse, uygulama çalışma zamanı tarafından belirlenen varsayılan yola yüklenir:
• Mac OS: ~/Applications/
• Windows XP ve öncesi: C:\Program
• Windows Vista: ~/Apps/
• Linux: /opt/
Files\
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 25
AIR güvenliği
Geliştirici uygulama tanımlayıcı dosyasında bir installFolder ayarı belirlerse, uygulama bu dizinin bir alt yoluna
yüklenir.
AIR dosya sistemi
AIR uygulamaları için yükleme işlemi, geliştiricinin AIR yükleyici dosyasına dahil ettiği tüm dosyaları kullanıcının
yerel bilgisayarına kopyalar. Yüklenen uygulama şunlardan oluşur:
• Windows: AIR yükleyici dosyasında bulunan tüm dosyaları içeren bir dizin. Çalışma zamanı AIR uygulamasının
yüklenmesi sırasında bir exe dosyası da oluşturur.
• Linux: AIR yükleyici dosyasında bulunan tüm dosyaları içeren bir dizin. Çalışma zamanı AIR uygulamasının
yüklenmesi sırasında bir bin dosyası da oluşturur.
• Mac OS: AIR yükleyici dosyasının tüm içeriğini içeren bir app dosyası. Bu, Finder'daki "Paket İçeriğini Göster"
seçeneği kullanılarak denetlenebilir. Çalışma zamanı, bu app dosyasını AIR uygulaması yüklemesinin bir parçası
olarak oluşturur.
AIR uygulaması şu şekilde çalıştırılır:
• Windows: Yükleme klasöründeki .exe dosyasını veya bu dosyaya karşılık gelen bir kısayolu çalıştırarak (Başlangıç
Menüsü veya masaüstündeki bir kısayol gibi).
• Linux: Yükleme klasöründeki .bin dosyasını başlatarak, uygulamayı Uygulamalar menüsünden seçerek veya bir
takma addan ya da masaüstü kısayolundan çalıştırarak.
• Mac OS: .app dosyasını veya bunu işaret eden bir takma adı çalıştırarak.
Uygulama dosya sistemi, uygulama işleviyle ilişkili alt dizinler de içerir. Örneğin, şifrelenmiş yerel depoya yazılmış
bilgi, uygulamanın uygulama kimliğine göre adlandırılan dizindeki bir alt dizine kaydedilir.
AIR uygulama depolaması
AIR uygulamaları, kullanıcının sabit sürücüsündeki herhangi bir konuma yazma ayrıcalığına sahiptir; ancak,
geliştiriciler uygulamalarına ilişkin yerel depo için app-storage:/ yolunu kullanmaya teşvik edilir. Uygulamadan
app-storage:/ konumuna yazılan dosyalar, kullanıcının işletim sistemine bağlı standart bir konumda
konumlandırılır.
• Mac OS'de: <appData> kullanıcının “tercihler klasörü”, tipik olarak /Users/<user>/Library/Preferences
olduğunda, uygulamanın depolama dizini <appData>/<appId>/Local Store/ olur.
• Windows'ta: <appData> kullanıcının CSIDL_APPDATA “Özel Klasör”ü, tipik olarak
C:\Documents and
Settings\<user>\Application Data olduğunda, uygulamanın depolama dizini <appData>\<appId>\Local
Store\ olur.
• Linux'ta: <appData>, /home/<user>/.appdata olduğunda <appData>/<appID>/Local
Store/ olur.
Uygulama depolama dizinine air.File.applicationStorageDirectory özelliği yoluyla erişebilirsiniz.
İçindekilere File sınıfının resolvePath() yöntemini kullanarak erişebilirsiniz. Ayrıntılar için bkz. “Dosya sistemiyle
çalışma” sayfa 102.
Adobe AIR'i güncelleme
Kullanıcı, çalışma zamanının güncellenmiş bir versiyonunu gerektiren bir AIR uygulaması yüklediğinde, çalışma
zamanı otomatik olarak gerekli çalışma zamanı güncellemesini yükler.
Kullanıcı, çalışma zamanını güncellemek için bilgisayara ilişkin yönetici ayrıcalıklarına sahip olmalıdır.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 26
AIR güvenliği
AIR uygulamalarını güncelleme
Yazılım güncellemelerinin geliştirilmesi ve konuşlandırılması, yerel kod uygulamalarının karşılaştığı en büyük
güvenlik sorunlarından biridir. AIR API, bu sorunu gidermek için bir mekanizma sağlar: başlatmadan sonra bir AIR
dosyası için uzak konumu kontrol etmek üzere Updater.update() yöntemi çağrılabilir. Güncelleme gerekliyse, AIR
dosyası indirilir, yüklenir ve uygulama yeniden başlatılır. Geliştiriciler bu sınıfı yalnızca yeni işlevler sağlamak için
değil, olası güvenlik açıklarına yanıt vermek için de kullanabilirler.
Not: Geliştiriciler, uygulama tanımlayıcı dosyasının version özelliğini ayarlayarak uygulamanın sürümünü
belirleyebilirler. AIR, sürüm dizesini hiçbir şekilde yorumlamaz. Bu nedenle, “3.0” sürümü “2.0 sürümünden daha yeni
bir sürüm olarak varsayılmaz.” Anlamlı bir sürüm oluşturma tutmak geliştiriciye bağlıdır. Ayrıntılar için bkz.
“Uygulama tanımlayıcı dosyasında özellikleri tanımlama” sayfa 43.
AIR uygulamasını kaldırma
Kullanıcı bir AIR uygulamasını kaldırabilir:
• Windows'ta: Uygulamayı kaldırmak için Program Ekle/Kaldır panelini kullanma.
• Mac OS'de: App dosyasını yükleme konumundan silme.
AIR uygulamasının kaldırılması, uygulama dizinindeki tüm dosyaları kaldırır. Ancak, uygulamanın uygulama
dizininin dışına yazmış olabileceği dosyaları kaldırmaz. AIR uygulamalarının kaldırılması, AIR uygulamasının
uygulama dizininin dışındaki dosyalarda yaptığı değişiklikleri geri almaz.
Adobe AIR'i kaldırma
AIR şu şekilde kaldırılabilir:
• Windows'ta: Denetim Masası'ndan Program Ekle/Kaldır'ı çalıştırdıktan sonra Adobe AIR'i ve daha sonra “Kaldır”ı
seçerek.
• Mac OS'de: Uygulamalar dizinindeki Adobe AIR Uninstaller uygulamasını çalıştırarak.
Yöneticiler için Windows kayıt defteri ayarları
Windows'ta, yöneticiler bilgisayarı AIR uygulamasını ve çalışma zamanı güncellemelerini engelleyecek (veya bunlara
izin verecek) şekilde yapılandırabilir. Bu ayarlar, Windows kayıt defterinde aşağıdaki anahtarın altında bulunur:
HKLM\Yazılım\Politikalar\Adobe\AIR. Bunlar, aşağıdakileri içerir:
Kayıt defteri ayarı
Açıklama
AppInstallDisabled
AIR uygulamasının yüklenebileceğini ve kaldırılabileceğini belirtir. “İzinli” için 0, “izinli değil” için 1 olarak
ayarlanır.
UntrustedAppInstallDisabled
Güvenilmeyen AIR uygulamalarının (güvenilir bir sertifika içermeyen uygulamalar) yüklenmesine izin
verildiğini belirtir (bkz. “AIR dosyasını dijital olarak imzalama” sayfa 307). “İzinli” için 0, “izinli değil” için 1
olarak ayarlanır.
UpdateDisabled
Çalışma zamanının arka plan görevi veya açık yüklemenin bir parçası olarak güncellenebileceğini belirtir.
“İzinli” için 0, “izinli değil” için 1 olarak ayarlanır.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 27
AIR güvenliği
Sanal alanlar
AIR, izinleri AIR uygulamasındaki dahili ve harici her bir dosyaya göre tanımlayan kapsamlı bir güvenlik mimarisi
sağlar. İzinler, dosyalara kaynaklarına göre verilir ve sanal alan adı verilen mantıksal güvenlik gruplamalarına atanır.
AIR uygulaması sanal alanları hakkında
Sanal alanların çalışma zamanı güvenlik modeli, uygulama sanal alanı eklemesini içeren Flash Player güvenlik
modelinden oluşur. Uygulama sanal alanında olmayan dosyalar, Flash Player güvenlik modeli tarafından belirtilenlere
benzer güvenlik kısıtlamaları içerir.
Çalışma zamanı, kodun erişebileceği verilerin aralığını ve yürütebileceği işlemleri tanımlamak için bu güvenlik sanal
alanlarını kullanır. Yerel güvenliği sağlamak için, her bir sanal alandaki dosyalar diğer sanal alandaki dosyalardan
ayrılır. Örneğin, harici bir İnternet URL'sinden AIR uygulamasına yüklenen bir SWF dosyası uzak bir sanal alana
yerleştirilir ve varsayılan olarak uygulama dizininde yer alan, uygulama sanal alanına atanmış dosyalara komut dosyası
oluşturma iznine sahip değildir.
Aşağıdaki tablo tüm sanal alan türlerini açıklar:
Sanal alan
Açıklama
application
Dosya uygulama dizininde yer alır ve tüm AIR ayrıcalıkları kümesiyle çalışır.
remote
Dosya, bir İnternet URL'sindendir ve Flash Player'daki uzak dosyalara uygulanan kurallara benzeyen etki
alanına dayalı sanal alan kurallarına göre çalışır. (Her ağ etki alanı için http://www.example.com and
https://foo.example.org gibi ayrı uzak sanal alanlar mevcuttur.)
local-trusted
Dosya, yerel bir dosyadır ve kullanıcı bu dosyayı Ayar Yöneticisi veya Flash Player yapılandırma dosyasını
kullanarak güvenilir olarak belirlemiştir. Dosya yerel veri kaynaklarını okuyabilir ve İnternet'le iletişim
kurabilir, ancak tüm AIR ayrıcalıkları kümesine sahip değildir.
local-with-networking
Dosya, ağ hedefiyle yayınlanmış yerel bir SWF dosyasıdır, ancak kullanıcı tarafından açık olarak
güvenilmez. Dosya, İnternet'le iletişim kurabilir, ancak yerel veri kaynaklarını okuyamaz. Bu sanal alan,
yalnızca SWF içeriği tarafından kullanılabilir.
local-with-filesystem
Dosya, ağ hedefiyle yayınlanmamış yerel bir komut dosyasıdır ve kullanıcı tarafından açık olarak
güvenilmez. Bu, güvenilmeyen JavaScript dosyaları içerir. Dosya yerel veri kaynaklarını okuyabilir, ancak
İnternet'le iletişim kuramaz.
Bu başlık, öncelikle uygulama sanal alanına ve uygulama sanal alanının AIR uygulamasındaki diğer sanal alanlarla
ilişkisine odaklanır. Diğer sanal alanlara atanan içeriği kullanan geliştiriciler, Flash Player güvenlik modeli hakkınaki
diğer belgeleri de okumalıdır. Bkz. ActionScript 3.0 Programlama
(http://www.adobe.com/go/flashcs4_prog_as3_security_tr) belgelerindeki Flash Player 9 Güvenlik beyaz sayfası
(http://www.adobe.com/go/fp9_0_security) veya Flash Player 10 Güvenlik beyaz sayfası
(http://www.adobe.com/go/fp10_0_security_tr) belgelerindeki “Flash Player Güvenliği” bölümü.
Uygulama sanal alanı
Uygulama yüklendiğinde, AIR yükleyici dosyasında bulunan tüm dosyalar kullanıcının bilgisayarında bir uygulama
dizinine yüklenir. Geliştiriciler, koddaki bu dizine app:/ URL şeması (bkz. “URL'lerde AIR URL şemalarını kullanma”
sayfa 293) yoluyla başburabilir. Uygulama dizin ağacındaki tüm dosyalar, uygulama çalıştığında uygulama sanal
alanına atanır. Uygulama sanal alanındaki içerik, yerel dosya sistemiyle etkileşim dahil, bir AIR uygulamasının
kullanabileceği tüm ayrıcalıklarla donatılmıştır.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 28
AIR güvenliği
Çoğu AIR uygulaması, uygulamayı çalıştırmak için yalnızca yerel olarak yüklenen bu dosyaları kullanır. Ancak, AIR
uygulamaları yalnızca uygulama dizinindeki dosyalarla kısıtlanmamıştır - tüm kaynaklardan tüm dosya türlerini
yükleyebilir. Bu, kullanıcı bilgisayarındaki yerel dosyaların yanı sıra, yerel ağda ve İnternet'te bulunan kullanılabilir
harici kaynaklardaki dosyaları da içerir. Dosya türünün güvenlik kısıtlamaları üzerinde etkisi yoktur; yüklenen HTML
dosyaları, aynı kaynaktan yüklenen SWF dosyalarıyla aynı güvenlik ayrıcalıklarına sahiptir.
Uygulama güvenlik sanal alanındaki içerik, diğer sanal alanlardaki içeriğin kullanımının engellendiği AIR API'lerine
erişebilir. Örneğin, uygulamaya ilişkin uygulama tanımlayıcı dosyasının içeriğini döndüren
air.NativeApplication.nativeApplication.applicationDescriptor özelliği, uygulama güvenlik sanal
alanındaki içerikle kısıtlanmıştır. Başka bir kısıtlanmış API örneği, yerel dosya sistemine okuma ve yazma için
yöntemler içeren FileStream sınıfıdır.
Yalnızca uygulama güvenlik sanal alanındaki içerik tarafından kullanılabilen ActionScript API'leri Adobe AIR için
ActionScript 3.0 Dil Başvurusu içinde AIR logosuyla gösterilir. Bu API'lerin diğer sanal alanlarda kullanılması, çalışma
zamanının SecurityError istisnası atmasına neden olur.
HTML içeriği (HTMLLoader nesnesindeki), tüm AIR JavaScript API'leri (AIRAliases.js dosyasının kullanımı
sırasında window.runtime özelliği veya air nesnesi yoluyla kullanılabilen) uygulama güvenlik sanal alanındaki içerik
tarafından kullanılabilir. Başka bir sanal alandaki HTML içeriği window.runtime özelliğine erişime sahip değildir, bu
nedenle bu içerik AIR API'lerine erişemez.
JavaScript ve HTML kısıtlamaları
Uygulama güvenlik sanal alanındaki HTML içeriği için, kod yüklendikten sonra dizeleri dinamik olarak yürütülebilir
koda dönüştürebilen API'lerin kullanımına ilişkin sınırlamalar mevcuttur. Bunun amacı, uygulamanın yanlışlıkla
uygulama dışı kaynaklardan (güvenli olmayabilecek ağ etki alanları gibi) kod yerleştirmesini (ve yürütmesini)
engellemektir. Bir örnek, eval() işlevi kullanımıdır. Ayrıntılar için bkz. “Farklı sanal alanlardaki içerik için kod
kısıtlamaları” sayfa 31.
ActionScript metin alanı içeriğindeki img etiketlerindeki kısıtlamalar
Olası kimlik avı saldırılarını önlemek için, uygulama güvenlik sanal alanında yer alan SWF içeriğindeki ActionScript
TextField nesnelerinde bulunan HTML içeriğinde img etiketleri yoksayılır.
Asfunction kısıtlamaları
Uygulama sanal alanındaki içerik, ActionScript 2.0 metin alanlarındaki HTML içeriğinde asfunction protokolünü
kullanamaz.
Etki alanları arası kalıcı önbelleğe erişim yok
Uygulama sanal alanındaki SWF içeriği, Flash Player 9 Update 3'e eklenmiş bir özellik olan etki alanları arası önbelleği
kullanamaz. Bu özellik, Flash Player'ın Adobe platform bileşen içeriğini kalıcı olarak önbelleğe almasını ve bu içeriği
talep üzerine yüklenen SWF içeriğinde yeniden kullanmasını sağlar. (İçeriğin birçok kez yüklenme ihtiyacını ortadan
kaldırır.)
Uygulama dışı sanal alanlardaki içeriğin ayrıcalıkları
Ağdan veya İnternet'ten yüklenen dosyalar, remote sanal alana atanır. Uygulama dizininin dışından yüklenen
dosyalar local-with-filesystem, local-with-networking veya local-trusted sanal alana atanır; bu dosyanın
nasıl oluşturulduğuna ve kullanıcının Flash Player Global Ayarları Yöneticisi yoluyla dosyaya açık olarak güvenip
güvenmediğine bağlıdır. Ayrıntılar için bkz.
http://www.macromedia.com/support/documentation/tr/flashplayer/help/settings_manager.html.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 29
AIR güvenliği
JavaScript ve HTML kısıtlamaları
Uygulama güvenlik sanal alanındaki içerikten farklı olarak, uygulama dışı bir güvenlik sanal alanında yer alan
JavaScript içeriği, dinamik olarak oluşturulan kodu yürütmek için her zaman eval() işlevini çağırabilir. Ancak,
uygulama dışı güvenlik sanal alanında JavaScript için kısıtlamalar mevcuttur. Bunlar:
• Uygulama dışı sanal alandaki JavaScript kodunun window.runtime nesnesine erişimi yoktur, ve aynı şekilde bu
kod AIR API'lerini yürütemez.
• Varsayılan olarak, uygulama dışı güvenlik sanal alanındaki içerik, isteği çağıran etki alanı dışındaki etki
alanlarından veri yüklemek için XMLHttpRequest çağrılarını kullanamaz. Ancak, uygulama kodu mevcut karede
veya iframe'de allowCrossdomainXHR niteliğini ayarlayarak uygulama dışı içeriğe bunu yapması için izin verebilir.
Daha fazla bilgi için bkz. “Farklı etki alanlarındaki içerikler arasında komut dosyası oluşturma” sayfa 34.
• JavaScript window.open() yönteminin çağrılmasına ilişkin kısıtlamalar mevcuttur. Ayrıntılar için bkz. “JavaScript
window.open() yönteminin çağrılmasına ilişkin kısıtlamalar” sayfa 34.
Ayrıntılar için bkz. “Farklı sanal alanlardaki içerik için kod kısıtlamaları” sayfa 31.
CSS, kare, iframe ve img öğelerinin yüklenmesine ilişkin kısıtlamalar
Uzak (ağ) güvenlik sanal alanlarındaki HTML içeriği uzak etki alanlarından (ağ URL'lerinden) yalnızca frame, iframe
ve img içeriği yükleyebilir.
Dosya sistemiyle yerel, ağ iletişimiyle yerel veya yerel-güvenilir sanal alanlardaki HTML içeriği yerel sanal alanlardan
(uygulamadan veya ağ URL'lerinden değil) yalnızca frame, iframe ve img içeriğini okuyabilir.
HTML güvenliği
Çalışma zamanı, HTML ve JavaScript'teki olası güvenlik açıklarının üstesinden gelmek için kurallar uygular ve
mekanizmalar sağlar. Uygulamanız temel olarak JavaScript'te yazılmış olduğunda veya HTML ve JavaScript içeriğini
SWF tabanlı bir uygulamaya yüklediğinizde aynı kurallar uygulanır. Uygulama sanal alanında ve uygulama dışı
güvenlik sanal alanındaki içerik (bkz. “Sanal alanlar” sayfa 27) farklı ayrıcalıklara sahiptir. Iframe'e veya kareye içerik
yüklenirken, çalışma zamanı, karedeki veya iframe'deki içeriğin uygulama güvenlik sanal alanındaki içerikle güvenli
biçimde iletişim kurmasını sağlayan güvenli bir sanal alan köprüsü mekanizması sağlar.
Bu başlık, AIR HTML güvenlik mimarisini ve uygulamanızı kurmak için iframe'lerin, çerçevelerin ve sanal alan
köprüsünün nasıl kullanılacağını açıklar.
Daha fazla bilgi için bkz. “Güvenlik ilişkili JavaScript hatalarını önleme” sayfa 225.
HTML tabanlı uygulamanızın yapılandırılmasına genel bakış
Çerçeveler ve iframe'ler, AIR'de HTML içeriğinin düzenlenmesi için uygun bir yapı sağlar. Çerçeveler, hem veri
kalıcılığını korumak hem de uzak içerikle güvenli bir şekilde çalışmak için yollar sağlar.
AIR'de HTML, normal, sayfa tabanlı düzenini koruduğundan, HTML içeriğinizin üst karesi farklı bir sayfaya
“geçtiğinde” HTML ortamı tamamen yenilenir. Kareleri ve iframe'leri, tarayıcıda çalışan bir web uygulaması için
yapacağınız gibi veri kalıcılığını korumak amacıyla kullanabilirsiniz. Üst karede ana uygulama nesnelerinizi
tanımladığınızda, bu nesneler karenin yeni bir sayfaya geçmesine izin vermediğiniz sürece korunur. Uygulamanın
geçici bölümlerini yüklemek ve görüntülemek için alt kareleri ve iframe'leri kullanın. (Veri kalıcılığını korumak için
karelerin yanı sıra veya karelerin yerine kullanılabilecek çeşitli yollar mevcuttur. Bunlar tanımlama bilgilerini, yerel
paylaşılan nesneleri, yerel dosya deposunu, şifrelenmiş dosya deposunu ve yerel veritabanı deposunu içerir.)
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 30
AIR güvenliği
AIR'de HTML yürütülebilir kod ve veriler arasındaki normal, bulanık çizgisini koruduğundan, AIR HTML ortamının
üst karesindeki içeriği uygulama sanal alanına yerleştirir. Sayfa load olayından sonra AIR, bir metin dizesini
yürütülebilir bir nesneye çevirebilecek eval() gibi işlemleri sınırlar. Bu kısıtlama, uygulama uzak içerik
yüklemediğinde bile uygulanır. HTML içeriğinin bu sınırlanmış işlemleri yürütebilmesi için, içeriği uygulama dışı bir
sanal alana yerleştirmek üzere kareleri ve iframe'leri kullanmalısınız. (eval() işlevine dayanan bazı JavaScript
uygulama çerçevelerinin kullanılması sırasında, içeriği sanal alanlı bir alt karede çalıştırmak gerekebilir.) Uygulama
sanal alanındaki JavaScript kısıtlamalarının tam listesi için bkz. “Farklı sanal alanlardaki içerik için kod kısıtlamaları”
sayfa 31.
AIR'de HTML uzak, büyük olasılıkla güvenli olmayan içerik yükleme özelliğini koruduğundan, AIR, bir etki
alanındaki içeriğin farklı bir etki alanındaki içerikle etkileşime girmesini engelleyen aynı kaynak politikasını uygular.
Uygulama içeriği ve farklı etki alanındaki içerik arasında etkileşime izin vermek için, üst ve alt kare arasında arabirim
olarak görev yapacak bir köprü kurabilirsiniz.
Üst-alt sanal alan ilişkisini kurma
AIR, HTML kare ve iframe öğelerine sandboxRoot ve documentRoot niteliklerini ekler. Bu nitelikler, uygulama
içeriğini başka bir etki alanından gelmiş gibi ele almanızı sağlar:
Nitelik
Açıklama
sandboxRoot
Kare içeriğinin yerleştirileceği sanal alan ve etki alanını belirlemek için
kullanılacak URL. URL şemasının kullanması gereken file:, http: veya
https:.
documentRoot
Kare içeriğinin yükleneceği kaynak URL. URL şemasının kullanması gereken
file:, app: veya app-storage:.
Aşağıdaki örnek, uygulamanın sanal alan alt dizinine yüklenen içeriği uzak sanal alanda ve www.example.com etki
alanında çalışacak biçimde eşler:
<iframe
src="ui.html"
sandboxRoot="http://www.example.com/local/"
documentRoot="app:/sandbox/">
</iframe>
Farklı sanal alanlarda veya etki alanlarında üst ve alt kareler arasında köprü kurma
AIR, her alt karenin window nesnesine childSandboxBridge ve parentSandboxBridge özelliklerini ekler. Bu
özellikler, üst ve alt kare arasında arabirim olarak görev yapacak köprüleri tanımlamanızı sağlar. Her köprü bir yöne
gider:
childSandboxBridge — childSandboxBridge özelliği alt karenin üst karedeki içeriğe bir arabirim göstermesini
sağlar. Arabirim göstermek için childSandbox özelliğini alt karedeki bir işleme veya nesneye ayarlarsınız. Böylece
nesneye veya işleve üst karedeki içerikten erişebilirsiniz. Aşağıdaki örnek, alt karede çalışan bir komut dosyasının bir
işlev ve bir özellik içeren nesneyi üst öğesine nasıl gösterdiğini açıklar:
var interface = {};
interface.calculatePrice = function(){
return .45 + 1.20;
}
interface.storeID = "abc"
window.childSandboxBridge = interface;
Bu alt içerik, "child" öğenin id öğesi atanmış bir iframe içindeyse, karenin childSandboxBridge özelliğini
okuyarak üst içerikten arabirime erişebilirsiniz:
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 31
AIR güvenliği
var childInterface = document.getElementById("child").childSandboxBridge;
air.trace(childInterface.calculatePrice()); //traces "1.65"
air.trace(childInterface.storeID)); //traces "abc"
parentSandboxBridge — parentSandboxBridge özelliği üst karenin alt karedeki içeriğe bir arabirim göstermesini
sağlar. Arabirim göstermek için alt karenin parentSandbox özelliğini üst karedeki bir işleve veya bir nesneye
ayarlarsınız. Böylece nesneye veya işleve alt karedeki içerikten erişebilirsiniz. Aşağıdaki örnek, üst karede çalışan bir
komut dosyasının saklama işlevi içeren bir nesneyi alt öğeye nasıl gösterdiğini açıklar:
var interface = {};
interface.save = function(text){
var saveFile = air.File("app-storage:/save.txt");
//write text to file
}
document.getElementById("child").parentSandboxBridge = interface;
Alt karedeki içerik, bu arabirimi kullanarak save.txt adlı dosyaya metin kaydedebilir. Ancak, dosya sistemine başka bir
erişimi olmayacaktır. Genellikle, uygulama içeriği diğer sanal alanlara olanaklı en dar arabirimi göstermelidir. Alt
içerik saklama işlevini aşağıdaki şekilde çağırabilir:
var textToSave = "A string.";
window.parentSandboxBridge.save(textToSave);
Alt içerik parentSandboxBridge nesnesinin bir özelliğini ayarlamaya çalıştığında, çalışma zamanı bir SecurityError
istisnası atar. Üst içerik childSandboxBridge nesnesinin bir özelliğini ayarlamaya çalıştığında, çalışma zamanı bir
SecurityError istisnası atar.
Farklı sanal alanlardaki içerik için kod kısıtlamaları
Bu “HTML güvenliği” sayfa 29 başlığında tartışıldığı gibi, çalışma zamanı HTML ve JavaScript'teki olası güvenlik
açıklarının üstesinden gelebilmek için kurallar uygular ve mekanizmalar sağlar. Bu başlık, bu kısıtlamaları listeler.
Kod, bu kısıtlanmış API'leri çağırmaya çalıştığında, çalışma zamanı “Uygulama güvenlik sanal alanındaki JavaScript
kodu için Adobe AIR çalışma zamanı güvenlik ihlali” mesajını içeren bir hata verir.
Daha fazla bilgi için bkz. “Güvenlik ilişkili JavaScript hatalarını önleme” sayfa 225.
JavaScript eval() işlevi ve benzer tekniklerin kullanımındaki kısıtlamalar
Uygulama güvenlik sanal alanındaki HTML içeriği için, kod yüklendiken sonra (body öğesinin onload olayı
gönderildikten ve onload işleyici işlevinin yürütülmesi tamamlandıktan sonra) dizeleri dinamik olarak yürütülebilir
koda dönüştürebilen API'lerin kullanımı için sınırlamalar mevcuttur. Bunun amacı, uygulamanın yanlışlıkla
uygulama dışı kaynaklardan (güvenli olmayabilecek ağ etki alanları gibi) kod yerleştirmesini (ve yürütmesini)
engellemektir.
Örneğin, uygulamanız DOM öğesinin innerHTML özelliğine yazmak için uzak bir kaynaktan dize verileri
kullanıyorsa, dize güvenli olmayan işlemler gerçekleştirebilecek yürütülebilir (JavaScript) kod içerebilir. Ancak, içerik
yüklenirken uzak dizelerin DOM'a eklenme riski yoktur.
JavaScript eval() işlevinin kullanımında bir kısıtlama vardır. Uygulama sanal alanındaki kod yüklendikten ve onload
olay işleyicisindeki işlemeden sonra eval() işlevini sınırlı biçimde kullanabilirsiniz. Aşağıdaki kurallar, kodun
uygulama güvenlik sanal alanından yüklenmesinden sonraeval() işlevinin kullanımı için geçerlidir:
• Değişmez içeren ifadeler izinli. Örneğin:
eval("null");
eval("3 + .14");
eval("'foo'");
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 32
AIR güvenliği
• Aşağıdaki gibi nesne değişmezleri izinlidir:
{ prop1: val1, prop2: val2 }
• Aşağıdaki gibi nesne değişmezi ayarlayıcı/alıcıları izinli değildir:
{ get prop1() { ... }, set prop1(v) { ... } }
• Aşağıdaki gibi dizi değişmezleri izinlidir:
[ val1, val2, val3 ]
• Aşağıdaki gibi özellik okumaları içeren ifadeler izinli değildir:
a.b.c
• İşlev başlatma izinli değil.
• İşlev tanımları izinli değil.
• Özellik ayarlama izinli değil.
• İşlev değişmezleri izinli değil.
Ancak, kod yüklenirken, onload olayından önce ve onload olay işleyici işlevinin yürütülmesi sırasında bu kısıtlamalar
uygulama güvenlik sanal alanındaki içeriğe uygulanmaz.
Örneğin, kod yüklendikten sonra istisna atan çalışma zamanı aşağıdaki kodla sonuçlanır:
eval("alert(44)");
eval("myFunction(44)");
eval("NativeApplication.applicationID");
Örneğin eval() işlevini çağırma sırasında yapılan gibi dinamik olarak oluşturulan kod, uygulama sanal alanında
izinliyse bir güvenlik riski ortaya çıkarır. Örneğin, bir uygulama yanlışlıkla ağ etki alanından yüklenmiş bir dizeyi
yürütebilir ve bu dize kötü amaçlı bir kod içerebilir. Örneğin, bu kod kullanıcının bilgisayarındaki dosyaları değiştiren
veya silen bir kod olabilir. Veya yerel dosyanın içeriğini güvenilir olmayan bir ağ etki alanına bildiren bir kod olabilir.
Dinamik kod oluşturma yolları şunlardır:
•
eval() işlevini çağırma.
• Uygulama dizininin dışındaki bir komut dosyasını yükleyen komut dosyası etiketleri eklemek için innerHTML
özelliklerini veya DOM işlevlerini kullanma.
• Satır içi kod içeren komut dosyası etikeleri eklemek için innerHTML özelliklerini veya DOM işlevlerini kullanma
(src niteliği yoluyla komut dosyası yüklemek yerine).
• Uygulama dizininin dışıda yer alan bir JavaScript dosyası yüklemek üzere script etiketleri için src niteliğini
ayarlama.
•
Javascript URL şemasını kullama (href="javascript:alert('Test')" için olduğu gibi).
• İlk parametre (işlevin senkronize olmayan bir şekilde çalışacağını tanımlayan) işlev adı (setTimeout('x
= 4',
1000) gibi) yerine bir dize (değerlendirilecek) olduğunda setInterval() veya setTimout() işlevini kullanma.
•
document.write() veya document.writeln() çağırma.
Uygulama güvenlik sanal alanındaki kod, içerik yüklenirken yalnızca bu yöntemleri kullanabilir.
Bu kısıtlamalar, JSON nesne değişmezleriyle eval() işlevinin kullanılmasını engellemez. Bu, uygulama içeriğinizin
JSON JavaScript kitaplığıyla çalışmasını sağlar. Ancak, aşırı yüklü JSON kodu kullanımınız kısıtlanmıştır (olay
işleyicileriyle).
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 33
AIR güvenliği
Diğer Ajax çerçeveleri ve JavaScript kod kitaplıkları için, çerçevedeki veya kitaplıktaki kodun dinamik olarak
oluşturulan kodlara ilişkin bu kısıtlamalarla çalışıp çalışmadığını kontrol edin. Çalışmıyorsa, uygulama dışı güvenlik
sanal alanına çerçeveyi veya kitaplığı kullanan içerik dahil edin. Ayrıntılar için bkz. “Uygulama dışı sanal alanlardaki
içeriğin ayrıcalıkları” sayfa 28 ve “Uygulama içeriği ve uygulama dışı içerik arasında komut dosyası oluşturma”
sayfa 39. Adobe, http://www.adobe.com/products/air/develop/ajax/features/ linklerinde uygulama güvenlik sanal
alanını desteklemek için bilinen Ajax çerçevelerinin listesini tutar.
Uygulama güvenlik sanal alanındaki içerikten farklı olarak, uygulama dışı bir güvenlik sanal alanında yer alan
JavaScript içeriği, dinamik olarak oluşturulan kodu yürütmek için her zaman eval() işlevini çağırabilir.
AIR API'lerine erişim sınırlamaları (uygulama dışı sanal alanlar için)
Uygulama dışı sanal alandaki JavaScript kodunun window.runtime nesnesine erişimi yoktur, ve aynı şekilde bu kod
AIR API'lerini yürütemez. Uygulama dışı güvenlik sanal alanındaki içerik aşağıdaki kodu çağırdığında, uygulama bir
TypeError istisnası atar:
try {
window.runtime.flash.system.NativeApplication.nativeApplication.exit();
}
catch (e)
{
alert(e);
}
Uygulama dışı sanal alandaki içerik window.runtime nesnesini tanımadığından, istisna TypeError (tanımlanmamış
değer) türündedir, bu nedenle tanımlanmamış bir değer olarak görülür.
Uygulama dışı sanal alandaki içeriğe komut dosyası köprüsünü kullanarak çalışma zamanı işlevi gösterebilirsiniz.
Ayrıntılar için bkz. “Uygulama içeriği ve uygulama dışı içerik arasında komut dosyası oluşturma” sayfa 39.
XMLHttpRequest çağrılarının kullanımına ilişkin kısıtlamalar
Uygulama güvenlik sanal alanındaki HTML içeriği, HTML içeriği yüklenirken ve onLoad olayı sırasında uygulama
sanal alanının dışından veri yüklemek için senkronize XMLHttpRequest yöntemini kullanamaz.
Varsayılan olarak, uygulama dışı güvenlik sanal alanlarındaki HTML içeriği, isteği çağıran etki alanı dışındaki etki
alanlarından veri yüklemek üzere JavaScript XMLHttpRequest nesnesini kullanmak için izne sahip değildir. Bir frame
veya iframe etiketi allowcrosscomainxhr niteliğini dahil edebilir. Bu niteliğin null dışındaki bir değere ayarlanması,
karedeki veya iframe'deki içeriğin isteği çağıran kodun etki alanı dışındaki etki alanlarından veri yüklemek için
Javascript XMLHttpRequest nesnesi kullanmasına izin verir.
<iframe id="UI"
src="http://example.com/ui.html"
sandboxRoot="http://example.com/"
allowcrossDomainxhr="true"
documentRoot="app:/">
</iframe>
Daha fazla bilgi için bkz. “Farklı etki alanlarındaki içerikler arasında komut dosyası oluşturma” sayfa 34.
CSS, kare, iframe ve img öğelerinin yüklenmesine ilişkin kısıtlamalar (uygulama dışı sanal
alanlardaki içerik için)
Uzak (ağ) güvenlik sanal alanlarındaki HTML içeriği uzak sanal alanlardan (ağ URL'lerinden) yalnızca frame, iframe
ve img içeriği yükleyebilir.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 34
AIR güvenliği
Dosya sistemiyle yerel, ağ iletişimiyle yerel veya yerel-güvenilir sanal alanlardaki HTML içeriği yerel sanal alanlardan
(uygulamadan veya uzak sanal alanlardan değil) yalnızca frame, iframe ve img içeriğini okuyabilir.
JavaScript window.open() yönteminin çağrılmasına ilişkin kısıtlamalar
JavaScript window.open() yöntemine çağrı yoluyla oluşturulan bir pencere, uygulama dışı güvenlik sanal alanından
içerik görüntülediğinde, pencere başlığı ana (başlatılan) pencerenin başlığıyla başlar ve iki nokta karakteriyle devam
eder. Pencere başlığının bu bölümünü ekranın dışına taşımak için kodu kullanamazsınız.
Uygulama dışı güvenlik sanal alanlarındaki içerik, kullanıcı fare veya klavye etkileşimiyle tetiklenen bir olaya yanıt
olarak yalnızca JavaScript window.open() yöntemini başarıyla çağırabilir. Bu, uygulama dışı içeriğin aldatıcı biçimde
kullanılabilecek pencereler oluşturmasını engeller (örneğin kimlik avı saldırıları). Ayrıca, fare veya klavye olayı için
olay işleyici, window.open() yöntemini gecikmeden sonra yürütülmek üzere ayarlayamaz (örneğin setTimeout()
işlevini çağırarak).
Uzak sanal alanlardaki (ağ) içerik, içeriği uzak ağ sanal alanlarında açmak için yalnızca window.open() yöntemini
kullanabilir. İçeriği uygulamadan veya yerel sanal alanlardan açmak için window.open() yöntemini kullanamaz.
Dosya sistemiyle yerel, ağ iletişimiyle yerel veya yerel-güvenli sanal alanlardaki (bkz. “Sanal alanlar” sayfa 27 ) içerik,
içeriği yerel sanal alanlarda açmak için yalnızca window.open() yöntemini kullanabilir. İçeriği uygulamadan veya
uzak sanal alanlardan açmak için window.open() yöntemini kullanamaz.
Kısıtlanmış kodu çağırmada hata
Bu güvenlik kısıtlamaları nedeniyle sanal alanda kullanımı kısıtlanmış olan kodu çağırdığınızda çalıştırma zamanı bir
JavaScript hatası gönderir: "Uygulama güvenlik sanal alanında JavaScript koduna ilişkin Adobe AIR çalıştırma zamanı
güvenlik ihlali."
Daha fazla bilgi için bkz. “Güvenlik ilişkili JavaScript hatalarını önleme” sayfa 225.
Dizeden HTML içeriği yükleme sırasında sanal alan koruması
HTMLLoader sınıfının loadString() yöntemi, çalışma zamanında HTML içeriği oluşturmanızı sağlar. Ancak,
HTML içeriği olarak kullandığınız veriler güvenli olmayan bir Internet kaynağından yüklendiyse, bozuk olabilir. Bu
nedenle, loadString() yöntemi kullanılarak oluşturulan HTML varsayılan olarak uygulama sanal alanına
yerleştirilmez ve AIR API'lerine erişimi yoktur. Ancak, loadString() yöntemi kullanılarak oluşturulan HTML'yi
uygulama sanal alanına yerleştirmek için HTMLLoader nesnesinin
placeLoadStringContentInApplicationSandbox özelliğini true olarak ayarlayabilirsiniz. Daha fazla bilgi için bkz.
“Bir dizeden HTML içeriğini yükleme” sayfa 223.
Farklı etki alanlarındaki içerikler arasında komut
dosyası oluşturma
AIR uygulamaları yüklendiklerinde, özel ayrıcalıklara sahip olurlar. Aynı ayrıcalıkların uygulamanın parçası olmayan
uzak dosyalar ve yerel dosyalar dahil diğer içeriğe verilmemesi önemlidir.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 35
AIR güvenliği
AIR sanal alan köprüsü hakkında
Etki alanlarında yer alan içerik, normalde diğer etki alanlarında yer alan komut dosyalarını çağıramaz. AIR
uygulamalarını ayrıcalıklı bilgi veya kontrolün yanlışlıkla verilmesinden korumak için, application sanal alanındaki
içeriğe (uygulamayla yüklenen içerik) aşağıdaki kısıtlamalar yerleştirilmiştir:
• Uygulama güvenlik sanal alanındaki kod, Security.allowDomain() yöntemini çağırarak diğer sanal alanlara izin
veremez. Bu yöntemin uygulama güvenlik sanal alanından çağrılması hata oluşturur.
• Uygulama dışı içeriğin LoaderContext.securityDomain veya LoaderContext.applicationDomain özelliği
ayarlanarak uygulama sanal alanına aktarılması engellenir.
Yine de AIR uygulamasının ana AIR uygulamasındaki komut dosyalarına denetimli erişime sahip olmak için uzak bir
etki alanından içerik istediği, veya tam tersi durumlar olur. Çalışma zamanı, bunu gerçekleştirmek için iki sanal alan
arasında ağ geçidi olarak görev yapan bir sanal alan köprüsü mekanizması sağlar. Bir sanal alan köprüsü, uzak ve
uygulama güvenlik sanal alanları arasında açık etkileşim sağlar.
Sanal alan köprüsü, hem yüklenmiş hem de yüklenen komut dosyalarının erişebileceği iki nesne gösterir:
•
parentSandboxBridge nesnesi, yüklenen içeriğin yüklenmiş içerikteki komut dosyalarına özellikler ve işlevler
göstermesini sağlar.
•
childSandboxBridge nesnesi, yüklenmiş içeriğin yüklenen içerikteki komut dosyalarına özellikler ve işlevler
göstermesini sağlar.
Sanal alan köprüsü yoluyla gösterilen nesneler başvuruya göre değil, değere göre iletilir. Tüm veriler sıralanmıştır. Bu,
köprünün bir tarafıyla gösterilen nesnelerin diğer tarafıyla ayarlanamayacağı anlamına gelir ve gösterilen tüm nesneler
türsüzdür. Ayrıca, yalnızca basit nesneler ve işlevleri gösterebilirsiniz; karmaşık nesneleri gösteremezsiniz.
Alt içerik parentSandboxBridge nesnesinin bir özelliğini ayarlamaya çalıştığında, çalışma zamanı bir SecurityError
istisnası atar. Benzer şekilde, üst içerik childSandboxBridge nesnesinin bir özelliğini ayarlamaya çalıştığında, çalışma
zamanı bir SecurityError istisnası atar.
Sanal alan köprüsü örneği (SWF)
Bir AIR müzik deposu uygulamasının albümlerin fiyatını yayınlamak için uzak SWF içeriğine izin vermek istediğini,
ancak uzak SWF dosyasının fiyatın sağış fiyatı olup olmadığını açıklamasını istemediğini düşünün. Bu amaçla,
StoreAPI sınıfı fiyatı elde etmek için bir yöntem sağlar, ancak satış fiyatını saklı tutar. Daha sonra StoreAPI sınıfının
bir örneği, uzak SWF'yi yükleyen Loader nesnesinin LoaderInfo nesnesine ait parentSandboxBridge özelliğine
atanır.
Aşağıdaki, AIR müzik deposuna ilişkin koddur:
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 36
AIR güvenliği
<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
title="Music Store" creationComplete="initApp()">
<mx:Script>
import flash.display.Loader;
import flash.net.URLRequest;
private var child:Loader;
private var isSale:Boolean = false;
private function initApp():void {
var request:URLRequest =
new URLRequest("http://[www.yourdomain.com]/PriceQuoter.swf")
child = new Loader();
child.contentLoaderInfo.parentSandboxBridge = new StoreAPI(this);
child.load(request);
container.addChild(child);
}
public function getRegularAlbumPrice():String {
return "$11.99";
}
public function getSaleAlbumPrice():String {
return "$9.99";
}
public function getAlbumPrice():String {
if(isSale) {
return getSaleAlbumPrice();
}
else {
return getRegularAlbumPrice();
}
}
</mx:Script>
<mx:UIComponent id="container" />
</mx:WindowedApplication>
StoreAPI nesnesi, normal albüm fiyatını elde etmek için ana uygulamayı çağırır, ancak getSaleAlbumPrice()
yöntemi çağrıldığında “Yok” mesajını döndürür. Aşağıdaki kod StoreAPI sınıfını tanımlar:
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 37
AIR güvenliği
public class StoreAPI
{
private static var musicStore:Object;
public function StoreAPI(musicStore:Object)
{
this.musicStore = musicStore;
}
public function getRegularAlbumPrice():String {
return musicStore.getRegularAlbumPrice();
}
public function getSaleAlbumPrice():String {
return "Not available";
}
public function getAlbumPrice():String {
return musicStore.getRegularAlbumPrice();
}
}
Aşağıdaki kod, depo fiyatını bildiren, ancak satış fiyatını bildiremeyen bir PriceQuoter SWF dosyası örneğini temsil eder:
package
{
import flash.display.Sprite;
import flash.system.Security;
import flash.text.*;
public class PriceQuoter extends Sprite
{
private var storeRequester:Object;
public function PriceQuoter() {
trace("Initializing child SWF");
trace("Child sandbox: " + Security.sandboxType);
storeRequester = loaderInfo.parentSandboxBridge;
var tf:TextField = new TextField();
tf.autoSize = TextFieldAutoSize.LEFT;
addChild(tf);
tf.appendText("Store price of album is: " + storeRequester.getAlbumPrice());
tf.appendText("\n");
tf.appendText("Sale price of album is: " + storeRequester.getSaleAlbumPrice());
}
}
}
Sanal alan köprüsü örneği (HTML)
HTML içeriğinde, parentSandboxBridge ve childSandboxBridge özellikleri alt belgenin JavaScript pencere
nesnesine eklenir. HTML içeriğinde köprü işlevlerinin nasıl kurulacağına ilişkin bir örnek için bkz. “Sanal alan köprü
arabirimini kurma” sayfa 238.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 38
AIR güvenliği
API pozlamasını sınırlama
Sanal alan köprüleri pozlanırken, kötüye kullanma derecesini sınırlayan üst düzey API'ler göstermek önemlidir. Köprü
uygulamanızı çağıran içeriğin ödün verilmiş bir içerik olabileceğini aklınızda bulundurun (örneğin kod yerleştirmesi
yoluyla). Bu nedenle, örneğin köprü yoluyla readFile(path:String) yönteminin (rasgele bir dosyanın içeriğini
okuyan) gösterilmesi kötüye kullanım için açık oluşturabilir. Bir yol almayan ve belirli bir dosya okumayan
readApplicationSetting() API'sinin gösterilmesi daha uygundur. Daha anlamsal bir yaklaşım, bir bölümünden
ödün verildiğinde uygulamanın vereceği hasarı sınırlar.
Ayrıca bkz.
“Farklı güvenlik sanal alanlarında çapraz komut dosyası içeriği” sayfa 237
“Uygulama sanal alanı” sayfa 27
“Uygulama dışı sanal alanlardaki içeriğin ayrıcalıkları” sayfa 28
Diske yazma
Bir web tarayıcısında çalışan uygulamalar, kullanıcının yerel dosya sistemiyle sınırlı olarak etkileşime girer. Web
tarayıcıları, web içeriği yüklemenin kullanıcının bilgisayarından ödün verilmesiyle sonuçlanmamasını sağlamak için
güvenlik politikaları uygular. Örneğin, bir web tarayıcısında Flash Player aracılığıyla çalışan SWF dosyaları, önceden
kullanıcının bilgisayarında olan dosyalarla doğrudan etkileşim kuramaz. Paylaşılan nesneler ve tanımlama bilgileri,
kullanıcı tercihlerinin ve diğer verilerin korunması amacıyla kullanıcının bilgisayarına yazılabilir, ancak bu, dosya
sistem etkileşiminin sınırıdır. AIR uygulamaları, yerel olarak kurulduğundan, yerel dosya sistemi içinde okuyup
yazabilme özelliğini içeren farklı bir güvenlik sözleşmesine sahiptir.
Bu özgürlük, geliştiriciler için beraberinde yüksek sorumluluk getirir. Kaza eseri oluşan uygulama tehlikeleri yalnızca
uygulama işlevlerini değil, kullanıcı bilgisayarının bütünlüğünü de tehdit eder. Bu nedenle, geliştiriciler “Geliştiriciler
için en iyi güvenlik uygulamaları” sayfa 40 bölümünü okumalıdır.
AIR kullanıcıları, çeşitli URL şeması kurallarını kullanarak yerel dosya sistemine erişebilir ve dosyaları yazabilirler:
URL şeması
Açıklama
app:/
Uygulama dizinine başka ad. Bu yoldan erişilen dosyalar uygulama sanal alanına atanır ve çalışma zamanı
tarafından verilen tüm ayrıcalıklara sahiptir.
app-storage:/
Yerel depo dizinine başka ad, çalışma zamanı tarafından standartlaştırılmış. Bu yoldan erişilen dosyalar uygulama
dışı bir sanal alana atanır.
file:///
Kullanıcının sabit diskinin kökünü temsil eden başka ad. Bu yoldan erişilen bir dosya, uygulama dizininde
bulunuyorsa uygulama sanal alanına, aksi halde uygulama dışı sanal alana atanır.
Not: AIR uygulamaları app: URL şeması kullanarak içeriği değiştiremezler. Ayrıca, uygulama dizini yönetici ayarları
nedeniyle salt okunur olabilir.
Kullanıcının bilgisayarında yönetici kısıtlamaları olmadığı sürece, AIR uygulamaları kullanıcının sabit sürücüsünde
herhangi bir konuma yazma ayrıcalığına sahiptir. Geliştiricilerin uygulamalarıyla ilişkili yerel depo için appstorage:/ yolunu kullanmaları önerilir. Uygulamadan app-storage:/ hedefine yazılan dosyalar standart bir
konuma yerleştirilir.
• Mac OS'de: kullanıcının tercihler klasörü <appData> olduğunda, bir uygulamanın depo dizini
<appData>/<appId>/Local Store/ olur. Bu genellikle /Users/<user>/Library/Preferences
konumundadır.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 39
AIR güvenliği
• Windows'ta: Kullanıcının CSIDL_APPDATA Özel Klasörü <appData> olduğunda, uygulamanın depo dizini
<appData>\<appId>\Local Store\ olur. Bu genellikle, C:\Documents and
Settings\<userName>\Application Data konumundadır.
• Linux'ta: <appData>, /home/<user>/.appdata olduğunda <appData>/<appID>/Local
Store/ olur.
Bir uygulama kullanıcının dosya sisteminde var olan dosyalarla etkileşim kurmak üzere tasarlandıysa, “Geliştiriciler
için en iyi güvenlik uygulamaları” sayfa 40 bölümünü okuduğunuzdan emin olun.
Güvenilmeyen içerikle güvenli biçimde çalışma
Uygulama sanal alanına atanmayan içerik, ancak çalışma zamanının güvenlik ölçütlerini karşılayabilirse
uygulamanıza ek komut dosyası işlevleri sağlayabilir. Bu başlık, uygulama dışı içerikle AIR güvenlik sözleşmesini
açıklar.
Security.allowDomain()
AIR uygulamaları, uygulama dışı içerik için komut dosyası erişimini, Flash Player tarayıcı eklentisinin güvenilmeyen
içerik için komut dosyası erişimini kısıtladığından daha sıkı biçimde kısıtlar. Örneğin, local-trusted bir sanal alana
atanmış SWF dosyası System.allowDomain() yöntemini çağırdığında, tarayıcıdaki Flash Player'da belirtilen etki
alanından yüklenen herhangi bir SWF'ye komut dosyası oluşturma erişimi verilir. Kullanıcının bilgisayarındaki
uygulama dışı dosyalara akılcı olmayan bir biçimde erişim sağlayacağından, benzer yaklaşıma AIR uygulamalarındaki
application içeriğinden izin verilmez. Security.allowDomain() yöntemine yapılan çağrılar dikkate alınmaksızın,
uzak dosyalar uygulama sanal alanına doğrudan erişemez.
Uygulama içeriği ve uygulama dışı içerik arasında komut dosyası oluşturma
Uygulama içeriği ve uygulama dışı içerik arasında komut dosyası oluşturan AIR uygulamaları, daha karmaşık güvenlik
düzenlemelerine sahiptir. Uygulama sanal alanında yer almayan dosyalar, sanal alan köprüsü kullanımı yoluyla
yalnızca uygulama sanal alanındaki dosyaların özelliklerine ve yöntemlerine erişebilir. Bir sanal alan köprüsü,
uygulama içeriği ve uygulama dışı içerik arasında, iki dosya arasındaki açık etkileşimi sağlayan bir ağ geçidi olarak
görev yapar. Sanal alan köprüleri, doğru kullanıldığında uygulama dışı içeriğin uygulama içeriğinin parçası olan nesne
başvurularına erişimini kısıtlayarak fazladan bir güvenlik katmanı sağlar.
Sanal alan köprülerinin faydaları, örnekle en iyi şekilde gösterilebilir. AIR müzik deposu uygulamasının, depo
uygulamasının sonradan iletişim kurabileceği kendi SWF dosyalarını oluşturmak isteyen reklamcılara bir API
sağlamak istediğini düşünün. Depo, reklamcılara depodan sanatçıları ve CD'leri arayabilecekleri yöntemler sağlamak,
ancak aynı zamanda güvenlik nedenleriyle bazı yöntemleri ve özellikleri üçüncü taraf SWF dosyasının kullanımına
kapatmak istiyor.
Bu işlevleri bir sanal alan köprüsü sağlayabilir. Varsayılan olarak, bir AIR uygulamasına çalışma zamanında harici
olarak yüklenen içerik, ana uygulamadaki yöntemler ve özelliklere erişemez. Geliştirici, özel bir sanal alan köprüsü
uygulamasıyla bu yöntemleri ve özellikleri göstermeden uzak içeriğe servis sağlayabilir. Sanal alan köprüsünü,
yükleyen ve yüklenen içerik arasındaki iletişimi nesne başvurularını göstermeden sağlayan, güvenilen ve
güvenilmeyen içerik arasında yer alan bir patika olarak düşünün.
Sanal alan köprülerinin nasıl güvenli biçimde kullanılacağına ilişkin daha fazla bilgi için bkz. “Farklı etki alanlarındaki
içerikler arasında komut dosyası oluşturma” sayfa 34.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 40
AIR güvenliği
Dinamik olarak güvenilir olmayan SWF içeriği oluşturmaya karşı koruma
Loader.loadBytes() yöntemi, uygulamanın bir bayt dizisinden SWF içeriği oluşturması için bir yol sağlar. Ancak,
uzak kaynaktan yüklenen verilerdeki yerleştirme saldırıları, içerik yükleme sırasında ciddi hasara neden olabilir. Bu,
özellikle oluşturulan SWF içeriği tüm AIR API'leri kümesine erişebiliyorsa, uygulama sanal alanına veri yükleme
sırasında geçerlidir.
loadBytes() yöntemini yürütülebilir SWF kodu oluşturmadan kullanabilen geçerli kullanıcılar vardır. Örneğin,
görüntü zamanlamasını denetlemek için görüntü verileri oluşturmak amacıyla loadBytes() yöntemini
kullanabilirsiniz. Ses oynatma için dinamik SWF oluşturma gibi, kod yürütmeyi kullanan geçerli kullanıcılar da vardır.
AIR'de, loadBytes() yöntemi varsayılan olarak SWF içeriği yüklemenize izin vermez; yalnızca görüntü içeriği
yüklemenize izin verir. AIR'de loadBytes() yönteminin loaderContext özelliği, uygulamanın yürütülebilir SWF
içeriğini yüklemek üzere loadBytes() kullanmasına izin vermek için true olarak ayarlayabileceğiniz
allowLoadBytesCodeExecution özelliğini içerir. Aşağıdaki kod, bu özelliğin nasıl kullanılacağını gösterir:
var loader:Loader = new Loader();
var loaderContext:LoaderContext = new LoaderContext();
loaderContext.allowLoadBytesCodeExecution = true;
loader.loadBytes(bytes, loaderContext);
SWF içeriği yüklemek için loadBytes() çağırdığınızda ve LoaderContext nesnesinin
allowLoadBytesCodeExecution özelliği false (varsayılan) olarak ayarlandığında, the Loader nesnesi bir
SecurityError istisnası atar.
Not: Adobe AIR'in gelecekteki bir sürümünde bu API değişebilir. Bu gerçekleştiğinde, LoaderContext sınıfının
allowLoadBytesCodeExecution özelliğini kullanan içeriği yeniden derlemeniz gerekebilir.
Geliştiriciler için en iyi güvenlik uygulamaları
AIR uygulamaları web teknolojileri kullanılarak oluşturulmuş olsa da, geliştiricilerin tarayıcı güvenlik sanal alanı
içinde çalışmadıklarını bilmeleri önemlidir. Bu, yerel sisteme istemli veya istemsiz zarar verebilecek AIR uygulamaları
oluşturmanın mümkün olduğu anlamına gelir. AIR bu riski en aza indirmeye çalışmaktadır, ancak yine de güvenlik
açıklarının kullanılabileceği yollar mevcuttur. Bu başlık, önemli olası tehlikeleri konu alır.
Dosyaları uygulama güvenlik sanal alanına aktarmakdan doğan risk
Uygulama dizininde bulunan dosyalar, uygulama sanal alanına atanır ve tüm çalışma zamanı ayrıcalıklarına sahiptir.
Yerel dosya sistemine yazan uygulamaların app-storage:/ hedefine yazmaları önerilir. Dosyalar uygulama sanal
alanına atanmadığından ve daha düşük bir güvenlik riski sunduğundan, bu dizin kullanıcının bilgisayarındaki
uygulama dosyalarından ayrı olarak bulunur. Geliştiricilerin şunları dikkate alması önerilir:
• Bir dosyayı, yalnızca gerekli olduğunda bir AIR dosyasına dahil edin (yüklenen uygulamada).
• Bir komut dosyasını yalnızca davranışı tam olarak anlaşılır ve güvenilir olduğunda bir AIR dosyasına dahil edin
(yüklenen uygulamada).
• Uygulama dizinindeki içeriğe yazmayın veya bu içeriği değiştirmeyin. Çalışma zamanı, SecurityError istisnasını
atarak, uygulamaların app:/ URL şemasını kullanarak dosyaları ve dizinleri yazmasını veya değiştirmesini
engeller.
• Kod yürütmesine neden olabilecek AIR API yöntemlerine ilişkin parametreler olan ağ kaynaklarından gelen
verileri kullanmayın. Bu, Loader.loadBytes() yöntemini ve JavaScript eval() işlevini içerir.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 41
AIR güvenliği
Yolları belirlemek için harici bir kaynak kullanmaktan doğan risk
Harici veri veya içerik kullanımı sırasında, AIR uygulamasından ödün verilebilir. Bu nedenle, ağdan veya dosya
sisteminden veri kullanırken özellikle dikkat edin. Güven sorumluluğu nihayetinde geliştiriciye ve kurduğu ağ
bağlantılarına bağlıdır, ancak yabancı veriler yapıları gereği risklidir ve hassas işlemlerde girdi olarak
kullanılmamalıdır. Geliştiriciler, aşağıdakilere karşı uyarılır:
• Dosya adını belirlemek için bir ağ kaynağından verileri kullanma
• Uygulamanın özel bilgi göndermek için kullandığı bir URL yapmak için bir ağ kaynağından verileri kullanma
Güvenli olmayan kimlik bilgilerinin kullanılması, saklanması veya
iletilmesinden doğan risk
Kullanıcı kimlik bilgilerinin kullanıcının yerel dosya sisteminde saklanması, yapısı gereği bu kimlik bilgilerinden ödün
verilebileceği riskini doğurur. Geliştiricilerin aşağıdakileri dikkate alması önerilir:
• Kimlik bilgilerinin yerel olarak saklanması gerekiyorsa, yerel dosya sistemine yazma sırasında kimlik bilgilerini
şifreleyin. Çalışma zamanı, EncryptedLocalStore sınıfı aracılığıyla, yüklenen her uygulamaya benzersiz şifrelenmiş
bir depo sağlar. Ayrıntılar için bkz. “Şifreli verileri saklama” sayfa 206.
• Kaynak güvenilir olmadıkça, bir ağ kaynağına şifrelenmemiş kullanıcı kimlik bilgilerini iletmeyin.
• Kimlik bilgileri oluşturmada hiçbir zaman varsayılan bir parola belirlemeyin - kullanıcıların kendi parolalarını
oluşturmalarına izin verin. Varsayılanı değişiklik olmadan kullanan kullanıcılar, kimlik bilgilerini varsayılan
parolayı önceden bilen bir saldırgana göstermiş olur.
İndirgeme saldırısından doğan risk
Uygulama yükleme sırasında, çalışma zamanı uygulamanın bir sürümünün yüklü olup olmadığını kontrol eder. Bir
uygulama önceden yüklenmişse, çalışma zamanı sürüm dizesini yüklenmekte olan uygulamanın sürümüyle
karşılaştırır. Bu dize farklıysa, kullanıcı yüklemeyi yükseltmeyi seçebilir. Çalışma zamanı, yeni yüklenen sürümün eski
sürümden daha yeni olacağını garanti etmez, yalnızca değişik olduğunu garanti eder. Saldırgan, bir güvenlik açığını
atlatmak için kullanıcıya daha eski bir sürüm dağıtabilir. Bu nedenle, uygulama çalışırken geliştiricinin sürüm
kontrolleri yapması önerilir. Uygulamaların gerekli güncellemeler için ağı kontrol etmesi, iyi bir fikirdir. Bu şekilde,
saldırgan kullanıcının eski sürümü çalıştırmasını sağlasa bile, bu eski sürüm güncellenmesi gerektiğini anlayacaktır.
Ayrıca, uygulamanız için açık bir sürüm belirleme şeması kullanmak, düşük bir sürüm yüklemeleri için kullanıcıların
kandırılmasını zorlaştıracaktır. Uygulama sürümlerinin sağlanmasına ilişkin ayrıntılar için bkz. “Uygulama
tanımlayıcı dosyasında özellikleri tanımlama” sayfa 43.
Kod imzalama
Tüm AIR yükleyici dosyaları kodlarının imzalanmış olması gerekir. Kod imzalama, belirtilen yazılım kaynağının
doğru olduğunu teyit etmeye ilişkin bir şifreleme işlemidir. AIR uygulamaları, bir sertifikayı harici bir sertifika
yetkilisinden (CA) bağlama veya kendi sertifikanızı oluşturma yoluyla imzalanabilir. İyi bilinen bir CA'dan alınan
ticari bir sertifika kesinlikle önerilir ve kullanıcılarınıza sahte bir ürünü değil, sizin uygulamanızı yüklediklerine ilişkin
güvence sağlar. Ancak, kendinden imzalı sertifikalar SDK'dan adt kullanılarak veya Flash, Flex Builder ya da sertifika
oluşturma için adt kullanan herhangi bir uygulama kullanılarak oluşturulabilir. Kendinden imzalı sertifikalar,
yüklenen uygulamanın orijinal olduğuna dair herhangi bir güvence sağlamaz.
AIR uygulamalarını dijital olarak imzalama hakkında daha fazla bilgi için bkz. “AIR dosyasını dijital olarak imzalama”
sayfa 307 ve “Komut satırı araçlarını kullanarak AIR uygulaması oluşturma” sayfa 339.
42
Bölüm 8: AIR uygulamasının özelliklerini
ayarlama
Bir AIR uygulamasını oluşturan tüm dosyaların ve varlıkların dışında, her AIR uygulaması bir uygulama tanımlayıcı
dosyası ister. Uygulama tanımlayıcı dosyası, uygulamanın temel özelliklerini tanımlayan bir XML dosyasıdır.
Adobe® Flash® CS3 Professional veya Adobe® Flash® CS4 Professional için Adobe® AIR™ Güncellemesi'ni kullanılarak
AIR uygulamalarının geliştirilmesi sırasında, bir AIR projesi oluşturduğunuzda uygulama tanımlayıcı dosyası
otomatik olarak oluşturulur. Komutlar > AIR - Uygulama ve Yükleyici Ayarları menüsünden uygulama tanımlayıcı
ayarlarını değiştirebileceğiniz bir panele ulaşabilirsiniz. Uygulama tanımlayıcı dosyasını elle de düzenleyebilirsiniz.
Uygulama tanımlayıcı dosyasının yapısı
Uygulama tanımlayıcı dosyası ad, sürüm, telif hakkı, vb. gibi, uygulamanın bütününü etkileyen özellikler içerir.
Uygulama tanımlayıcı dosyası için herhangi bir dosya adı kullanılabilir. Flash CS3 veya Flash CS4'teki varsayılan
ayarları kullanarak AIR dosyası oluşturduğunuzda, uygulama tanımlayıcı dosyası application.xml olarak yeniden
adlandırılır ve AIR paketi içinde özel bir dizinde konumlandırılır.
Bu örnek bir uygulama tanımlayıcı dosyasıdır:
<?xml version="1.0" encoding="utf-8" ?>
<application xmlns="http://ns.adobe.com/air/application/1.5">
<id>com.example.HelloWorld</id>
<version>2.0</version>
<filename>Hello World</filename>
<name>Example Co. AIR Hello World</name>
<description>
<text xml:lang="en">This is a example.</text>
<text xml:lang="fr">C'est un exemple.</text>
<text xml:lang="es">Esto es un ejemplo.</text>
</description>
<copyright>Copyright (c) 2006 Example Co.</copyright>
<initialWindow>
<title>Hello World</title>
<content>
HelloWorld-debug.swf
</content>
<systemChrome>none</systemChrome>
<transparent>true</transparent>
<visible>true</visible>
<minimizable>true</minimizable>
<maximizable>false</maximizable>
<resizable>false</resizable>
<width>640</width>
<height>480</height>
<minSize>320 240</minSize>
<maxSize>1280 960</maxSize>
</initialWindow>
<installFolder>Example Co/Hello World</installFolder>
<programMenuFolder>Example Co</programMenuFolder>
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 43
AIR uygulamasının özelliklerini ayarlama
<icon>
<image16x16>icons/smallIcon.png</image16x16>
<image32x32>icons/mediumIcon.png</image32x32>
<image48x48>icons/bigIcon.png</image48x48>
<image128x128>icons/biggestIcon.png</image128x128>
</icon>
<customUpdateUI>true</customUpdateUI>
<allowBrowserInvocation>false</allowBrowserInvocation>
<fileTypes>
<fileType>
<name>adobe.VideoFile</name>
<extension>avf</extension>
<description>Adobe Video File</description>
<contentType>application/vnd.adobe.video-file</contentType>
<icon>
<image16x16>icons/avfIcon_16.png</image16x16>
<image32x32>icons/avfIcon_32.png</image32x32>
<image48x48>icons/avfIcon_48.png</image48x48>
<image128x128>icons/avfIcon_128.png</image128x128>
</icon>
</fileType>
</fileTypes>
</application>
Uygulama tanımlayıcı dosyasında özellikleri tanımlama
AIR uygulamanız için aşağıdaki özellik türlerini tanımlamak üzere uygulama tanımlayıcısındaki XML öğelerini ve
niteliklerini kullanın:
• Gerekli AIR çalışma zamanı sürümü
• Uygulama kimliği
• Kurulum ve program menü klasörleri
• Başlangıç içeriği ve pencere özellikleri
• Uygulama simge dosyaları
• Uygulamanızın özel bir güncelleme arabirimi sağlayıp sağlamadığı
• Uygulamanızın kullanıcının tarayıcısında çalışan SWF içeriği tarafından çağrılıp çağrılamayacağı
• Dosya türü ilişkilendirmeleri
Gerekli AIR sürümünü belirtme
application uygulama tanımlayıcı dosyasının kök öğe nitelikleri, gerekli AIR çalışma zamanı sürümünü belirtir:
<application xmlns="http://ns.adobe.com/air/application/1.5">
xmlns Varsayılan XML ad alanı olarak tanımlamanız gereken AIR ad alanı. AIR'in her ana sürümüyle (küçük
yamalarla değil) oluşan ad alanı değişiklikleri. “1.5” gibi ad alanının son parçası, uygulama tarafından gerekli kılınan
çalışma zamanı sürümünü gösterir. Uygulamanız herhangi bir yeni AIR 1.5 özelliği kullanıyorsa, ad alanının AIR 1.5'e
ayarlandığından emin olun("http://ns.adobe.com/air/application/1.5").
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 44
AIR uygulamasının özelliklerini ayarlama
SWF tabanlı uygulamalar için, uygulama tanımlayıcıda belirtilen AIR çalışma zamanı sürümü uygulamanın başlangıç
içeriği olarak yüklenebilecek maksimum SWF sürümünü belirler. AIR 1.0 veya AIR 1.1'i belirten uygulamalar, AIR 1.5
çalışma zamanını kullanırken bile başlangıç içeriği olarak yalnızca SWF9 (Flash Player 9) dosyalarını kullanabilir. AIR
1.5'i belirten uygulamalar başlangıç içeriği olarak SWF9 veya SWF10 (Flash Player 10) dosyalarını kullanabilir. SWF
sürümü, hangi AIR veya Flash Player API sürümünün kullanılabilir olduğunu belirler. AIR 1.5 uygulamasının
başlangıç içeriği olarak bir SWF9 dosyası kullanıldığında, uygulamanın yalnızca AIR 1.1 ve Flash Player 9 API'lerine
erişimi olacaktır. Ayrıca, AIR 1.5 veya Flash Player 10'daki API'lerde yapılan davranış değişiklikleri etkili olmaz.
(API'lerdeki güvenlik ile ilgili önemli değişiklikler bu ilkelere bir istisna oluşturabilir; güncel ve gelecekteki çalışma
zamanı yamalarında geriye dönük olarak uygulanabilir.)
HTML tabanlı uygulamalar için, uygulama tanımlayıcıda belirtilen çalışma zamanı sürümü tek başına hangi AIR ve
Flash Player API sürümünün uygulama için kullanılabilir olduğunu belirler. HTML, CSS ve JavaScript davranışları
uygulama tanımlayıcı tarafından değil, her zaman yüklenmiş olan AIR çalışma zamanında kullanılan Webkit sürümü
tarafından belirlenir.
AIR uygulaması SWF içeriğini yüklediğinde, bu içerik için kullanılabilir olan AIR ve Flash Player API'lerinin sürümü
içeriğin nasıl yüklendiğine bağlıdır. Aşağıdaki tablo, API sürümünün yükleme yöntemine göre nasıl belirlendiğini
gösterir:
İçerik nasıl yüklenir
API sürümü nasıl belirlenir
Başlangıç içeriği, SWF tabanlı uygulama
Yüklenen dosyanın SWF sürümü
Başlangıç içeriği, HTML tabanlı uygulama
Uygulama tanımlayıcı ad alanı
SWF içeriği tarafından yüklenen SWF
Yükleme içeriği sürümü
<script> etiketi kullanılarak HTML içeriği
tarafından yüklenen SWF kitaplığı
Uygulama tanımlayıcı ad alanı
HTML içeriği tarafından AIR veya Flash Player
API'leri (flash.display.Loader gibi) kullanılarak
yüklenen SWF
Uygulama tanımlayıcı ad alanı
HTML içeriği tarafından <object> veya <embed> Yüklenen dosyanın SWF sürümü
etiketleri (veya eşdeğer JavaScript API'leri)
kullanılarak yüklenen SWF
Yükleme içeriğinden farklı bir sürümün SWF dosyasını yükleme sırasında iki sorunla karşılaşabilirsiniz:
• SWF9 (veya daha eski sürüm) ile SWF10 içeriği yükleme — Yüklenen içerikteki AIR 1.5 ve Flash Player 10
API'lerine olan başvurular çözülmez.
• SWF10 ile SWF9 (veya daha eski) içeriği yükleme — AIR 1.5 ve Flash Player 10'da değiştirilen API'ler, yüklenen
içeriğin beklemediği biçimde davranabilir.
minimumPatchLevel İsteğe bağlı. Uygulama tarafından istenen minimum Adobe AIR yama düzeyini belirlemek için
minimumPatchLevel niteliğini kullanın. AIR uygulamaları genellikle yalnızca uygulama tanımlayıcı dosyasındaki ad
alanını tanımlayarak kendileri için gerekli olan AIR sürümünü belirtir. Ad alanı AIR'in her ana sürümü için değişir
(1.0 veya 1.5 gibi). Ad alanı, yama sürümleri için değişmez.
Yama sürümleri yalnızca sınırlı bir düzeltme kümesi içerir, API değişikliği içermez. Genellikle uygulamalar hangi
yama sürümünün gerekli olduğunu belirtmez. Ancak bir yamadaki düzeltme, uygulamadaki bir sorunu giderebilir. Bu
durumda uygulama, yamanın uygulama yüklenmeden önce uygulanmasını sağlamak amacıyla minimumPatchLevel
niteliği için bir değer belirtebilir. AIR uygulama yükleyicisi gerekirse kullanıcıdan gerekli sürümü veya yamayı
indirmesini ve yüklemesini ister. Aşağıdaki örnek, minimumPatchLevel niteliği için bir değer belirten uygulama
öğesini gösterir:
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 45
AIR uygulamasının özelliklerini ayarlama
<application xmlns="http://ns.adobe.com/air/application/1.1"
minimumPatchLevel="5331">
Uygulama kimliğini tanımlama
Aşağıdaki öğeler uygulama kimliğini, sürümü, adı, dosya adını, açıklamayı ve telif hakkı bilgilerini tanımlar:
<id>com.example.samples.TestApp</id>
<version>2.0</version>
<filename>TestApp</filename>
<name>
<text xml:lang="en">Hello AIR</text>
<text xml:lang="fr">Bonjour AIR</text>
<text xml:lang="es">Hola AIR</text>
</name>
<description>An MP3 player.</description>
<copyright>Copyright (c) 2008 YourCompany, Inc.</copyright>
id Uygulama kimliği olarak da bilinen, uygulama için benzersiz olan tanımlayıcı bir dize. Nitelik değeri aşağıdaki
karakterlerle sınırlıdır:
• 0–9
• a–z
• a–z
• . (nokta)
• - (tire)
Değer 1 ila 212 karakter arasında olmalıdır. Bu öğe gereklidir.
id dizesi genellikle, ters çevrilen DNS etki alanı adresiyle, Java™ paket veya sınıf adıyla ya da bir Mac OS® X Universal
Type Identifier ile hizalı, noktayla ayrılan bir hiyerarşi kullanır. DNS benzeri biçim zorlanmaz ve AIR, ad ve gerçek
DNS etki alanları arasında bir ilişkilendirme oluşturmaz.
version Uygulamanın sürüm bilgilerini belirtir. (Çalışma zamanının sürümüyle hiçbir ilgisi yoktur.) Sürüm dizesi,
uygulama tanımlı bir belirleyicidir. AIR, sürüm dizesini herhangi bir şekilde yorumlamaz. Bu nedenle “3.0”
sürümünün “2.0” sürümünden daha güncel olduğu varsayılmaz. Örnekler: "1.0", ".4", "0.5", "4.9", "1.3.4a". Bu
öğe gereklidir.
filename Uygulama yüklendiğinde uygulamanın dosya adı olarak kullanılacak dize (uzantısız). Uygulama dosyası
çalışma zamanında AIR uygulamasını başlatır. name değeri sağlanmazsa, filename öğesi de yükleme klasörünün adı
olarak kullanılır. Bu öğe gereklidir.
filename özelliği, çeşitli dosya sistemlerinde dosya adları olarak kullanımı yasak olan aşağıdaki karakterler dışında
herhangi bir Unicode (UTF-8) karakterini içerebilir:
Karakter
Onaltılık Kod
çeşitli
0x00 – x1F
*
x2A
"
x22
:
x3A
>
x3C
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 46
AIR uygulamasının özelliklerini ayarlama
Karakter
Onaltılık Kod
<
x3E
?
x3F
\
x5C
|
x7C
filename değeri noktayla bitemez.
name (İsteğe bağlı, ancak önerilir) AIR uygulama yükleyicisi tarafından görüntülenen başlık.
Tek bir metin düğümü belirtirseniz (birden çok text öğesi yerine), AIR uygulama yükleyicisi sistem diline
bakılmaksızın bu adı kullanır:
<name>Test Application</name>
AIR 1.0 uygulama tanımlayıcı şeması, ad için yalnızca bir tane basit metin düğümünün tanımlanmasına izin verir.
(Birden çok text öğesi değil.)
AIR 1.1'de (veya daha yüksek sürümlerde), name öğesinde birden çok dil belirleyebilirsiniz. Örneğin aşağıdaki örnek,
adı üç dilde belirtir (İngilizce, Fransızca ve İspanyolca):
<name>
<text xml:lang="en">Hello AIR</text>
<text xml:lang="fr">Bonjour AIR</text>
<text xml:lang="es">Hola AIR</text>
</name>
Her metin öğesinin xml:lang niteliği, RFC4646'da da (http://www.ietf.org/rfc/rfc4646.txt) tanımlandığı gibi bir dil
kodu belirtir.
AIR uygulama yükleyicisi, kullanıcının işletim sisteminin kullanıcı arabirimi diline en yakın eşleşme olan adı kullanır.
Örneğin, uygulama tanımlayıcı dosyasının name öğesinin en (English) yerel ayarları için bir değer içerdiği bir yükleme
düşünün. İşletim sistemi en (English) adını kullanıcı arabirimi dili olarak tanımlıyorsa, AIR uygulama yükleyicisi en
adını kullanır. Ayrıca sistem kullanıcı arabirimi adı en-US (U.S. English) olduğunda da en adını kullanır. Ancak
kullanıcı arabirimi dili en-US ise ve uygulama tanımlayıcı dosyası hem en-US hem de en-GB adlarını tanımlıyorsa,
AIR uygulama yükleyicisi en-US değerini kullanır. Uygulama, sistem kullanıcı arabirimi dilleriyle eşleşen bir ad
tanımlamazsa, AIR uygulama yükleyicisi, uygulama tanımlayıcı dosyasında tanımlı olan ilk name değerini kullanır.
Hiçbir name öğesi belirtilmemişse, AIR uygulama yükleyicisi filename öğesini uygulama adı olarak görüntüler.
name öğesi yalnızca AIR uygulama yükleyicisinde kullanılan uygulama başlığını tanımlar. AIR uygulama yükleyicisi
birden çok dili destekler: Geleneksel Çince, Basitleştirilmiş Çince, Çekçe, Felemenkçe, İngilizce, Fransızca, Almanca,
İtalyanca, Japonca, Korece, Lehçe, Brezilya Portekizcesi, Rusça, İspanyolca, İsveççe ve Türkçe. AIR uygulama
yükleyicisi görüntülenen dilini (uygulama başlığı ve açıklamasının dışındaki metinler için), sistem kullanıcı arabirimi
diline dayalı olarak seçer. Bu dil seçimi, uygulama tanımlayıcı dosyasındaki ayarlardan bağımsızdır.
name öğesi, çalışan, yüklü uygulama için kullanılabilir olan yerel ayarları tanımlamaz. Çok dilli uygulamalar geliştirme
konusunda ayrıntılar için bkz. “AIR uygulamalarını yerelleştirme” sayfa 328.
description (İsteğe bağlı) AIR uygulama yükleyicisinde görüntülenen uygulama açıklaması.
Tek bir metin düğümü belirtirseniz (birden çok text öğesi değil), AIR uygulama yükleyicisi sistem diline bakılmaksızın
bu açıklamayı kullanır:
<description>This is a sample AIR application.</description>
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 47
AIR uygulamasının özelliklerini ayarlama
AIR 1.0 uygulama tanımlayıcı şeması, ad için yalnızca bir tane basit metin düğümünün tanımlanmasına izin verir.
(birden çok text öğesi değil.)
AIR 1.1'de (veya daha yüksek sürümlerde), description öğesinde birden çok dil belirleyebilirsiniz. Örneğin aşağıdaki
örnek bir açıklamayı üç dilde belirtir (İngilizce, Fransızca ve İspanyolca):
<description>
<text xml:lang="en">This is a example.</text>
<text xml:lang="fr">C'est un exemple.</text>
<text xml:lang="es">Esto es un ejemplo.</text>
</description>
Her metin öğesinin xml:lang niteliği, RFC4646'da da (http://www.ietf.org/rfc/rfc4646.txt) tanımlandığı gibi bir dil
kodu belirtir.
AIR uygulama yükleyicisi, kullanıcının işletim sisteminin kullanıcı arabirimi diline en yakın eşleşme olan açıklamayı
kullanır. Örneğin, uygulama tanımlayıcı dosyasının description öğesinin en (English) yerel ayarları için bir değer
içerdiği bir yükleme düşünün. Kullanıcının sistemi en (English) adını kullanıcı arabirimi dili olarak tanımlıyorsa, AIR
uygulama yükleyicisi en adını kullanır. Ayrıca sistem kullanıcı arabirimi adı en-US (U.S. English) olduğunda da en
adını kullanır. Ancak sistem kullanıcı arabirimi dili en-US ise ve uygulama tanımlayıcı dosyası hem en-US hem de enGB adlarını tanımlıyorsa, AIR uygulama yükleyicisi en-US değerini kullanır. Uygulama, sistem kullanıcı arabirimi
diliyle eşleşen bir ad tanımlamazsa, AIR uygulama yükleyicisi, uygulama tanımlayıcı dosyasında tanımlı olan ilk
description değerini kullanır.
Çok dilli uygulamalar geliştirme konusunda daha fazla bilgi için bkz. “AIR uygulamalarını yerelleştirme” sayfa 328.
copyright (İsteğe bağlı) AIR uygulaması için telif hakkı bilgileri. Mac OS'de telif hakkı metni, yüklü uygulamanın
Hakkında iletişim penceresinde görüntülenir. Mac OS'de telif hakkı bilgileri ayrıca, uygulamanın Info.plist dosyasının
NSHumanReadableCopyright alanında da kullanılır.
Yükleme klasörünü ve program menü klasörünü tanımlama
Yükleme ve program menü klasörleri aşağıdaki özellik ayarlarıyla tanımlanır:
<installFolder>Acme</installFolder>
<programMenuFolder>Acme/Applications</programMenuFolder>
installFolder (İsteğe bağlı) Varsayılan yükleme dizininin alt dizinini tanımlar.
Windows'ta varsayılan yükleme alt dizini, Program Dosyaları dizinidir. Mac OS'de bu dizin /Applications dizinidir.
Linux'ta, /opt/ dizinidir. Örneğin installFolder özelliği "Acme" olarak ayarlıysa ve bir uygulama "ExampleApp"
olarak adlandırılırsa, uygulama Windows'ta C:\Program Files\Acme\ExampleApp dizinine, MacOS'de
/Applications/Acme/Example.app ve Linux'ta /opt/Acme/ExampleApp dizinine yüklenir.
Aşağıda olduğu gibi yuvalanmış bir alt dizin belirtmek istiyorsanız, dizin ayırıcı karakteri olarak eğik çizgi (/)
karakterini kullanın:
<installFolder>Acme/Power Tools</installFolder>
installFolder özelliği, çeşitli dosya sistemlerinde klasör adı olarak kullanımı yasaklanmış olanların dışında tüm
Unicode (UTF-8) karakterlerini içerebilir (istisnaların bir listesi için yukarıda filename özelliğine bakın).
installFolder özelliği isteğe bağlıdır. installFolder özelliği tanımlamazsanız uygulama, name özelliğine dayalı
olarak varsayılan yükleme dizininin alt dizinine yüklenir.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 48
AIR uygulamasının özelliklerini ayarlama
programMenuFolder (isteğe bağlı), Windows işletim sisteminde Tüm Programlar menüsünde veya Linux'ta
Uygulamalar menüsünde yer alan uygulamalara ait kısayolların nerede konumlandırılacağını belirler. (Bu ayar şu anda
diğer işletim sistemlerinde yoksayılmaktadır.) Özelliğin değerinde izin verilen karakterlere yönelik kısıtlamalar,
installFolder özelliği için geçerli olanlarla aynıdır. Bu değerin son karakteri olarak eğik çizgi (/) karakterini
kullanmayın.
Başlangıç uygulama penceresinin özelliklerini tanımlama
Bir AIR uygulaması yüklendiğinde, çalışma zamanı, uygulamanın başlangıç penceresini oluşturmak için
initialWindow öğesindeki değerleri kullanır. Daha sonra çalışma zamanı content öğesinde belirtilen SWF veya
HTML dosyasını pencereye yükler.
Bu, initialWindow öğesine bir örnektir:
<initialWindow>
<content>AIRTunes.swf</content>
<title>AIR Tunes</title>
<systemChrome>none</systemChrome>
<transparent>true</transparent>
<visible>true</visible>
<minimizable>true</minimizable>
<maximizable>true</maximizable>
<resizable>true</resizable>
<width>400</width>
<height>600</height>
<x>150</x>
<y>150</y>
<minSize>300 300</minSize>
<maxSize>800 800</maxSize>
</initialWindow>
initialWindow öğesinin alt öğeleri, kök içerik dosyasının yükleneceği pencerenin özelliklerini ayarlar.
content content öğesi için belirtilen değer, uygulamanın ana içerik dosyasının URL'sidir. Bu bir SWF dosyası veya
HTML dosyası olabilir. URL, uygulama yükleme klasörünün köküne bağlı olarak belirtilir. (ADL ile bir AIR
uygulamasını çalıştırırken, URL, uygulama tanımlayıcı dosyasını içeren klasöre bağlıdır. Farklı bir kök dizin belirtmek
için, ADL'nin root-dir parametresini kullanabilirsiniz.)
Not: İçerik öğesinin değeri bir URL gibi işlev gördüğü için, içerik dosyasının adındaki karakterler RFC 1738'de belirtilen
kurallara göre URL kodlamalı olmalıdır. Örneğin boşluk karakterleri %20 olarak kodlanmalıdır.
title (İsteğe bağlı) Pencere başlığı.
systemChrome (İsteğe bağlı) Bu niteliği standard olarak ayarlarsanız, işletim sistemi tarafından sağlanan standart
sistem kromu görüntülenir. none olarak ayarlarsanız, hiçbir sistem kromu görüntülenmez. Sistem kromu ayarı
çalışma zamanında değiştirilemez.
transparent (İsteğe bağlı) Uygulama penceresinin alfa karışımını desteklemesini istiyorsanız, "true" olarak
ayarlayın. Saydamlık özelliğine sahip bir pencere daha yavaş çizebilir ve daha fazla bellek gerektirebilir. Saydamlık
ayarı çalışma zamanında değiştirilemez.
Önemli: transparent öğesini true olarak yalnızca systemChromenone olduğunda ayarlayabilirsiniz.
visible (İsteğe bağlı) Ana pencerenin oluşturulduğu andan itibaren görünür olmasını istiyorsanız true olarak
ayarlayın. Varsayılan olarak false değerindedir.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 49
AIR uygulamasının özelliklerini ayarlama
Ana pencereyi başlangıçta gizli bırakmak isteyebilirsiniz, böylece pencerenin konumunda, boyutunda ve içeriğinin
mizanpajında yapılan değişiklikler gösterilmez. Ardından pencerenin activate() yöntemini çağırarak veya visible
özelliğini true olarak değiştirerek pencereyi görüntüleyebilirsiniz. Ayrıntılar için bkz. “Yerel pencerelerle çalışma”
sayfa 56.
x, y, width, height (İsteğe bağlı) Uygulamanın ana penceresinin başlangıç sınırları. Bu değerleri ayarlamazsanız
pencere boyutu, kök SWF dosyasındaki ayarlar tarafından veya HTML ise işletim sistemi tarafından belirlenir.
minSize, maxSize (İsteğe bağlı) Pencerenin minimum ve maksimum boyutları. Ayarlamadığınız takdirde değerler
işletim sistemi tarafından belirlenir.
minimizable, maximizable, resizable (İsteğe bağlı) Pencere için küçültme, büyütme ve yeniden boyutlandırma
seçeneklerinden hangilerinin uygulanabileceğini belirtir. Bu ayarlar varsayılan olarak true şeklindedir.
Not: Mac OS X gibi, pencereleri büyütmenin yeniden boyutlandırma işlemi olduğu işletim sistemlerinde, pencerenin
yakınlaştırılmasını ve yeniden boyutlandırılmasını önlemek için hem büyütülebilir hem de yeniden boyutlandırılabilir
false olarak ayarlı olmalıdır.
Simge dosyalarını belirtme
icon özelliği, uygulama için kullanılacak bir veya daha fazla simge dosyasını belirtir. Bir simge dahil etmek isteğe
bağlıdır. Bir icon özelliği belirtmezseniz, işletim sistemi varsayılan bir simge görüntüler.
Belirtilen yol, uygulama kök dizinine bağlıdır. Simge dosyaları PNG formatında olmalıdır. Aşağıdaki simge
boyutlarının tümünü belirtebilirsiniz:
<icon>
<image16x16>icons/smallIcon.png</image16x16>
<image32x32>icons/mediumIcon.png</image32x32>
<image48x48>icons/bigIcon.png</image48x48>
<image128x128>icons/biggestIcon.png</image128x128>
</icon>
Belirli bir boyut için öğe mevcutsa, dosyadaki görüntü tam olarak belirtilen boyutta olmalıdır. Tüm boyutlar
sağlanmamışsa en yakın boyut, işletim sistemi tarafından simgenin kullanımı için uygun şekilde ölçeklenir.
Not: Belirtilen simgeler AIR paketine otomatik olarak eklenmez. Uygulama paketlendiğinde simge dosyaları doğru,
göreceli konumlarına dahil edilmelidir.
En iyi sonuç için, her kullanılabilir boyut için bir görüntü sağlayın. Buna ek olarak, simgelerin hem 16 hem de 32 bit
renk modlarında düzgün göründüğünden emin olun.
Uygulama güncellemeleri için özel kullanıcı arabirimi sağlama
AIR varsayılan yükleme iletişim kutularını kullanarak uygulamaları yükler ve günceller. Ancak, bir uygulamayı
güncellemek için kendi kullanıcı arabiriminizi de sağlayabilirsiniz. Uygulamanızın güncelleme işlemini kendisinin
işlemesi gerektiğini belirtmek için, customUpdateUI öğesini true olarak ayarlayın:
<customUpdateUI>true</customUpdateUI>
Uygulamanızın yüklü sürümünde customUpdateUI öğesi true olarak ayarlıyken kullanıcı yeni bir sürüm için AIR
dosyasını çift tıklattığında veya kesintisiz yükleme özelliğini kullanarak uygulamanın güncellemesini yüklediğinde,
çalışma zamanı, varsayılan AIR uygulama yükleyicisi yerine uygulamanın yüklü sürümünü açar. Uygulama
mantığınız güncelleme işlemine nasıl devam edileceğini belirleyebilir. (Bir yükseltme işleminin devam edebilmesi için,
AIR dosyasındaki uygulama kimliği ve yayıncı kimliği yüklü uygulamadakilerle eşleşmelidir.)
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 50
AIR uygulamasının özelliklerini ayarlama
Not: customUpdateUI mekanizması, yalnızca uygulamanın önceden yüklenmiş olduğu ve kullanıcının bir güncelleme
içeren AIR yükleme dosyasını çift tıklattığı veya kesintisiz yükleme özelliğini kullanarak uygulamanın güncellemesini
yüklediği durumlarda çalışır. customUpdateUItrue olsa da olmasa da, özel kullanıcı arabiriminizi gerekli şekilde
görüntüleyerek kendi uygulama mantığınızı kullanıp bir güncellemeyi indirebilir ve başlatabilirsiniz.
Daha fazla bilgi için, bkz. “AIR uygulamalarını güncelleme” sayfa 313.
Uygulamanın tarayıcıdan başlatılmasına izin verme
Aşağıdaki ayarı belirtirseniz, yüklenen AIR uygulaması tarayıcı başlatma özelliği kullanılarak başlatılabilir
(kullanıcının bir web tarayıcısındaki bir sayfada bulunan linki tıklatmasıyla):
<allowBrowserInvocation>true</allowBrowserInvocation>
Varsayılan olarak false değerindedir.
Bu ayarı true olarak ayarlarsanız, “Tarayıcı başlatma” sayfa 281'da anlatılan güvenlik sonuçlarını göz önünde
bulundurduğunuzdan emin olun.
Daha fazla bilgi için bkz. “AIR uygulamalarını web sayfasından yükleme ve çalıştırma” sayfa 299.
Dosya türü ilişkilendirmelerini bildirme
fileTypes öğesi sayesinde, bir AIR uygulamasının ilişkilendirildiği dosya türlerini bildirebilirsiniz. Bir AIR
uygulaması yüklendiğinde, bildirilen tüm dosya türleri işletim sistemiyle kaydedilir ve önceden başka bir uygulamayla
ilişkilendirilmemişse, AIR uygulamasıyla ilişkilendirilir. Bir dosya türüyle başka bir uygulama arasındaki mevcut
ilişkiyi geçersiz kılmak için, çalışma zamanında NativeApplication.setAsDefaultApplication() yöntemini
kullanın (tercihen kullanıcının izniyle).
Not: Çalışma zamanı yöntemleri yalnızca uygulama tanımlayıcıda bildirilen dosya türlerinin ilişkilendirmelerini
yönetebilir.
<fileTypes>
<fileType>
<name>adobe.VideoFile</name>
<extension>avf</extension>
<description>Adobe Video File</description>
<contentType>application/vnd.adobe.video-file</contentType>
<icon>
<image16x16>icons/AIRApp_16.png</image16x16>
<image32x32>icons/AIRApp_32.png</image32x32>
<image48x48>icons/AIRApp_48.png</image48x48>
<image128x128>icons/AIRApp_128.png</image128x128>
</icon>
</fileType>
</fileTypes>
fileTypes öğesi isteğe bağlıdır. İstenilen sayıda fileType öğesi içerebilir.
name ve extension öğeleri, dahil ettiğiniz her fileType bildirimi için gereklidir. Aynı ad birden çok uzantı için
kullanılabilir. Uzantı dosya türünü benzersiz bir şekilde tanımlar. (Uzantının önünde nokta olmadan belirtildiğini
unutmayın.) description öğesi isteğe bağlıdır ve işletim sistemi kullanıcı arabirimi tarafından kullanıcıya
görüntülenir. AIR 1.5'te contentType zorunludur. (AIR 1.0 ve 1.1'de isteğe bağlıydı.) Özellik, işletim sisteminin bir
dosyayı bazı koşullar altında açmak için en iyi uygulamayı seçmesine yardımcı olur. Değer, dosya içeriğinin MIME
türü olmalıdır. Dosya türü önceden kaydedildiyse ve atanmış bir MIME türüne sahipse, değerin Linux'ta
yoksayıldığını dikkate alın.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 51
AIR uygulamasının özelliklerini ayarlama
Dosya uzantısı için, uygulama simgesi öğesiyle aynı format kullanılarak simge belirtilebilir. Simge dosyaları ayrıca AIR
yükleme dosyasına da dahil edilmelidir. (Dosyalar otomatik olarak paketlenmez.)
Bir dosya türü AIR uygulamasıyla ilişkilendirildiğinde, kullanıcının bu tür bir dosyayı her açışında uygulama çağrılır.
Uygulama zaten çalışıyorsa, AIR çalışan örneğe InvokeEvent nesnesini gönderir. Aksi takdirde uygulamayı ilk AIR
başlatır. Dosya yolu her iki durumda da NativeApplication nesnesi tarafından gönderilen InvokeEvent nesnesi
tarafından alınabilir. Dosyayı açmak için bu yolu kullanabilirsiniz.
Daha fazla bilgi için bkz. “Dosya ilişkilendirmelerini yönetme” sayfa 286 ve “Komut satırı argümanlarını yakalama”
sayfa 279.
52
Bölüm 9: Adobe AIR'e özgü işlevler
Bu konu, Adobe® Flash® Player'da çalışan SWF içeriği tarafından kullanılamayan Adobe® AIR™ işlevlerine genel bakış
sağlar.
AIR'e özgü sınıflar
Aşağıdaki runtime sınıfları Adobe AIR uygulamasına özgüdür. Tarayıcıda çalışan SWF içeriği tarafından
kullanılamaz.
Sınıf
Paket
ApplicationUpdater
air.update
ApplicationUpdaterUI
air.update
BrowserInvokeEvent
flash.events
Clipboard
flash.desktop
ClipboardFormats
flash.desktop
ClipboardTransferMode
flash.desktop
CompressionAlgorithm
flash.utils
DockIcon
flash.desktop
DownloadErrorEvent
air.update.events
DRMAuthenticateEvent
flash.events
DRMErrorEvent
flash.events
DRMStatusEvent
flash.events
EncryptedLocalStore
flash.data
File
flash.filesystem
FileListEvent
flash.events
FileMode
flash.filesystem
FileStream
flash.filesystem
FocusDirection
flash.display
HTMLHistoryItem
flash.html
HTMLHost
flash.html
HTMLLoader
flash.html
HTMLPDFCapability
flash.html
HTMLUncaughtScriptExceptionEvent
flash.events
HTMLWindowCreateOptions
flash.html
Icon
flash.desktop
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 53
Adobe AIR'e özgü işlevler
Sınıf
Paket
InteractiveIcon
flash.desktop
InvokeEvent
flash.events
NativeApplication
flash.desktop
NativeDragActions
flash.desktop
NativeDragEvent
flash.events
NativeDragManager
flash.desktop
NativeDragOptions
flash.desktop
NativeMenu
flash.display
NativeMenuItem
flash.display
NativeWindow
flash.display
NativeWindowBoundsEvent
flash.events
NativeWindowDisplayState
flash.display
NativeWindowDisplayStateEvent
flash.events
NativeWindowInitOptions
flash.display
NativeWindowResize
flash.display
NativeWindowSystemChrome
flash.display
NativeWindowType
flash.display
NotificationType
flash.desktop
OutputProgressEvent
flash.events
RevocationCheckSettings
flash.security
Screen
flash.display
ScreenMouseEvent
flash.events
SignatureStatus
flash.security
SignerTrustSettings
flash.security
SQLCollationType
flash.data
SQLColumnNameStyle
flash.data
SQLColumnSchema
flash.data
SQLConnection
flash.data
SQLError
flash.errors
SQLErrorEvent
flash.events
SQLErrorOperation
flash.errors
SQLEvent
flash.events
SQLIndexSchema
flash.data
SQLResult
flash.data
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 54
Adobe AIR'e özgü işlevler
Sınıf
Paket
SQLSchema
flash.data
SQLSchemaResult
flash.data
SQLStatement
flash.data
SQLTableSchema
flash.data
SQLTransactionLockType
flash.data
SQLTriggerSchema
flash.data
SQLUpdateEvent
flash.events
SQLViewSchema
flash.data
StatusFileUpdateErrorEvent
air.update.events
StatusFileUpdateEvent
air.update.events
StatusUpdateErrorEvent
air.update.events
StatusUpdateEvent
air.update.events
SystemTrayIcon
flash.desktop
UpdateEvent
air.update.events
Updater
flash.desktop
URLRequestDefaults
flash.net
XMLSignatureValidator
flash.utils
flash.security paketi ayrıca AIR uygulamasına özgü IURIDereferencer arabirimini de içerir.
AIR uygulamasına özgü işlevlere sahip runtime sınıfları
Aşağıdaki sınıflar tarayıcıda çalışan SWF içeriği tarafından kullanılabilir, ancak AIR ek özellikler veya yöntemler
sağlar:
Sınıf
Özellik veya Yöntem
Capabilities
languages
Event
DISPLAYING
EXITING
HTML_BOUNDS_CHANGE
HTML_DOM_INITIALIZE
HTML_RENDER
LOCATION_CHANGE
NETWORK_CHANGE
USER_IDLE
USER_PRESENT
FileReference
uploadUnencoded()
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 55
Adobe AIR'e özgü işlevler
Sınıf
Özellik veya Yöntem
HTTPStatusEvent
HTTP_RESPONSE_STATUS
responseURL
responseHeaders
KeyboardEvent
commandKey
controlKey
LoaderContext
allowLoadBytesCodeExecution
LoaderInfo
parentSandboxBridge
childSandboxBridge
NetStream
resetDRMVouchers()
setDRMAuthenticationCredentials()
URLRequest
followRedirects
manageCookies
shouldAuthenticate
shouldCacheResponse
userAgent
userCache
setLoginCredentials()
URLStream
httpResponseStatus event
Stage
nativeWindow
Security
APPLICATION
Bu yeni özelliklerin ve yöntemlerin çoğu yalnızca AIR uygulaması güvenlik sanal alanındaki içerik tarafından
kullanılabilir. Ancak URLRequest sınıflarındaki yeni üyeler, diğer sanal alanlarda çalışan içerik tarafından da
kullanılabilir.
ByteArray.compress() ve ByteArray.uncompress() yöntemlerinin her biri yeni bir algorithm parametresi
içerir, böylece deflate ve zlib sıkıştırmaları arasında seçim yapabilirsiniz. Bu parametre yalnızca AIR uygulamasında
çalışan içerik tarafından kullanılabilir.
Hizmet izleme çerçevesi sınıfları
air.net paketi ağ algılamasına yönelik sınıfları içerir. Bu paket yalnızca Adobe AIR uygulamasında çalışan içerik
tarafından kullanılır. ServiceMonitor.swc dosyasına dahildir.
Pakette aşağıdaki sınıflar bulunur:
• ServiceMonitor
• SocketMonitor
• URLMonitor
56
Bölüm 10: Yerel pencerelerle çalışma
Masaüstü pencerelerini oluşturmak ve yönetmek için Adobe® AIR® yerel pencere API'si tarafından sağlanan sınıfları
kullanırsınız.
Yerel pencereler hakkında ek çevrimiçi bilgiler
Yerel pencere API'si ve yerel pencerelerle çalışma hakkında daha fazla bilgiyi aşağıdaki kaynaklarda bulabilirsiniz:
Hızlı Başlangıçlar (Adobe AIR Geliştirici Bağlantısı)
• Bir pencereyle etkileşim kurma
• Yerel bir pencerenin görünümünü ve verdiği hissi özelleştirme
• Tost stili pencereler oluşturma
• Pencerelerin görüntü sırasını denetleme
• Yeniden boyutlandırılabilir, dikdörtgen olmayan pencereler oluşturma
Dil Başvurusu
• NativeWindow
• NativeWindowInitOptions
Adobe Geliştirici Bağlantısı Makaleleri ve Örnekleri
• Flash için Adobe AIR Geliştirici Bağlantısı ('AIR pencereleri'ni arama)
AIR penceresi temelleri
AIR, Flash®, Flex™ ve HTML programlama tekniklerini kullanarak yerel işletim sistemi pencereleri oluşturmak için
kullanımı kolay, platformlar arası bir pencere API'si sunar.
AIR'le uygulamanızın görünümünü geliştirmede büyük bir özgürlüğe sahip olursunuz. Oluşturduğunuz pencereler
Mac'te çalışırken Apple stiliyle eşleşerek, Windows'ta çalışırken Microsoft uygulamalarına uyarak ve Linux'ta pencere
yöneticisiyle uyum halinde çalışarak, platforma özgü bir kod satırına sahip olmadan standart bir masaüstü uygulaması
gibi görünebilir. Veya uygulamanız nerede çalışırsa çalışsın kendi stilinizi oluşturmak için Flex çerçevesinin sağladığı
skin desteği olan, genişletilebilir kromu kullanabilirsiniz. Masaüstüne karşı saydamlık ve alfa harmanlaması için tam
desteğe sahip vektör ve bitmap resmi içeren kendi pencere kromunuzu bile oluşturabilirsiniz. Dikdörtgen
pencerelerden sıkıldınız mı? Yuvarlak bir tane çizin.
AIR'deki Pencereler
AIR, pencerelerle çalışmak için üç ayrı API destekler:
• ActionScript odaklı NativeWindow sınıfı, en düşük düzeyli pencere API'sini sağlar. NativeWindows sınıfını
ActionScript ve Flash CS uygulamalarında kullanın. Uygulamanızda kullanılan pencereleri özelleştirmek için
NativeWindow sınıfını genişletmeyi düşünün.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 57
Yerel pencerelerle çalışma
• Flex çerçevesi mx:WindowedApplication ve mx:Window sınıfları, NativeWindow sınıfı için bir Flex “sarma“
sağlar. Flex ile bir AIR uygulaması oluşturduğunuzda, WindowedApplication bileşeni Application bileşeninin
yerini alır ve Flex uygulamanızda her zaman başlangıç penceresi olarak kullanılmalıdır.
• HTML ortamında, tarayıcı tabanlı web uygulamasında olduğu gibi JavaScript Window sınıfını kullanabilirsiniz.
JavaScript Window yöntemine yapılan çağrılar, temel yerel pencere nesnelerine iletilir.
ActionScript pencereleri
Bir NativeWindow sınıfıyla pencereler oluşturduğunuzda, Flash Player sahnesini kullanın ve listeyi doğrudan
görüntüleyin. NativeWindow sınıfına görsel bir nesne eklemek için nesneyi pencere sahnesinin görüntü listesine veya
sahnedeki başka bir görüntüleme nesnesi kabına ekleyin.
Flex Framework pencereleri
Flex Framework, NativeWindow API'sini saran kendi pencere bileşenlerini tanımlar. Bu bileşenler,
mx:WindowedApplication ve mx:Window çerçeve dışında kullanılamaz ve bu nedenle Flash CS ile geliştirilen AIR
uygulamalarında kullanılamaz.
HTML pencereleri
HTML pencereleri oluşturduğunuzda, içeriği görüntülemek için HTML, CSS ve JavaScript kullanırsınız. HTML
penceresine görsel bir nesne eklemek için, bu içeriği HTML DOM'a eklersiniz. HTML pencereleri, NativeWindow
öğesinin özel bir kategorisidir. AIR ana bilgisayarı HTML pencerelerinde temel NativeWindow örneğine erişim
sağlayan bir nativeWindow özelliği tanımlar. Bu özelliği burada açıklanan NativeWindow özellikleri, yöntemleri ve
olaylarına erişmek için kullanabilirsiniz.
Not: JavaScript Window nesnesi de, mevcut pencere için komut dosyası oluşturmaya yönelik moveTo() ve close() gibi
yöntemlere sahiptir. Örtüşen yöntemler olduğunda, en uygun yöntemi kullanabilirsiniz.
İlk uygulama penceresi
Uygulamanızın ilk penceresi sizin için AIR tarafından otomatik olarak oluşturulur. AIR, uygulama tanımlayıcı
dosyasının initialWindow öğesinde belirtilen parametreleri kullanarak pencere özelliklerini ve içeriğini ayarlar.
Kök içerik bir SWF dosyası ise, AIR bir NativeWindow örneği oluşturur, SWF dosyasını yükler, ve bunu pencere
sahnesine ekler. Kök içerik bir HTML dosyası ise, AIR bir HTML penceresi oluşturur ve HTML'i yükler.
Uygulama tanımlayıcıda belirtilen pencere özellikleri hakkında daha fazla bilgi için bkz. “Uygulama tanımlayıcı
dosyasının yapısı” sayfa 42.
Yerel pencere sınıfları
Yerel pencere API'si aşağıdaki sınıfları içerir:
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 58
Yerel pencerelerle çalışma
Paket
Sınıflar
flash.display
•
NativeWindow
•
NativeWindowInitOptions
•
NativeWindowDisplayState
•
NativeWindowResize
•
NativeWindowSystemChrome
•
NativeWindowType
Pencere dizesi sabitleri aşağıdaki sınıflarda tanımlanmıştır:
flash.events
•
NativeWindowDisplayState
•
NativeWindowResize
•
NativeWindowSystemChrome
•
NativeWindowType
•
NativeWindowBoundsEvent
•
NativeWindowDisplayStateEvent
Yerel pencere olay akışı
Yerel pencereler, ilgili bileşenleri önemli bir değişikliğin gerçekleşmek üzere olduğuna veya gerçekleştiğine dair
bilgilendirmek için olaylar gönderir. Birçok pencere ilişkili olay, çiftler halinde gönderilir. İlk olay, bir değişikliğin
gerçekleşmek üzere olduğuna dair uyarır. İkinci olay, değişikliğin yapıldığını bildirir. Bir uyarı olayını iptal
edebilirsiniz, ancak bir bildirim olayını iptal edemezsiniz. Aşağıdaki sıra, kullanıcı pencerenin büyütme düğmesini
tıklattığında gerçekleşen olay akışını gösterir:
1 NativeWindow nesnesi bir displayStateChanging olayı gönderir.
2 Hiçbir kayıtlı kullanıcı olayı iptal etmezse, pencere büyür.
3 NativeWindow nesnesi bir displayStateChange olayı gönderir.
NativeWindow nesnesi ayrıca pencere boyutu ve konumuyla ilgili değişiklikler için de olaylar gönderir. Pencere,
bu ilgili değişiklikler için uyarı olayları göndermez. İlgili değişiklikler şunlardır:
a Büyütme işlemi nedeniyle pencerenin sol üst köşesi hareket ettiğinde move olayı gönderilir.
b Büyütme işlemi nedeniyle pencere boyutu değiştiğinde resize olayı gönderilir.
Bir NativeWindow nesnesi, pencereyi simge durumuna küçültme, yeniden yükleme, kapatma, taşıma ve yeniden
boyutlandırma sırasında olayları benzer bir sırayla gönderir.
Uyarı olayları yalnızca, pencere kromu veya başka işletim sistemin tarafından kontrol edilen bir mekanizma bir
değişiklik başlattığında gönderilir. Pencere boyutu, konumu veya görüntü durumunu değiştirmek için bir window
yöntemini çağırdığınızda, pencere yalnızca değişikliği bildirmek için bir olay gönderir. İsterseniz pencere
dispatchEvent() yöntemini kullanarak bir uyarı olayı gönderebilir ve değişiklik devam etmeden önce uyarı
olayınızın iptal edilip edilmediğini kontrol edebilirsiniz.
Pencere API sınıfları, yöntemleri, özellikleri ve olayları hakkında ayrıntılı bilgi için bkz. ActionScript 3.0 Dil ve
Bileşen Başvurusu (http://www.adobe.com/go/learn_flash_aslr_tr).
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 59
Yerel pencerelerle çalışma
Flash görüntü listesi kullanımı hakkında genel bilgi için bkz.Adobe ActionScript 3.0 Programlama
(http://www.adobe.com/go/learn_fl_cs4_programmingAS3_tr) başvurusu “Görüntü Programlama“ bölümü.
Yerel pencere stili ve davranışını denetleyen özellikler
Aşağıdaki özellikler, bir pencerenin temel görünümü ve davranışını denetler:
•
type
•
systemChrome
•
transparent
Bir pencere oluşturduğunuzda, pencere yapıcısına iletilen NativeWindowInitOptions nesnesindeki bu özellikleri
ayarlarsınız. AIR, özellikleri ilk uygulama penceresi için uygulama tanımlayıcıdan okur. (Uygulama tanımlayıcıda
ayarlanamayan ve her zaman normal olarak ayarlanmış olan type özelliği hariç.) Bu özellikler pencere
oluşturulduktan sonra değiştirilemez.
Bu özelliklerin bazı ayarları birbirleriyle uyumsuzdur: transparent özelliği true olarak veya type özelliği
lightweight olarak ayarlandığında systemChrome özelliği standard olarak ayarlanamaz.
Pencere türleri
AIR pencere türleri, üç işlevsel pencere türü oluşturmak için yerel işletim sisteminin krom ve görünürlük niteliklerini
birleştirir. Koddaki tür adlarına başvurmak için NativeWindowType sınıfında tanımlanan sabitleri kullanın. AIR,
aşağıdaki pencere türlerini sağlar:
Tür
Açıklama
Normal
Tipik bir pencere. Normal pencereler tam boyutlu krom stilini kullanır ve Windows görev çubuğu ile Mac OS X
pencere penüsünde görünürler.
Hizmet penceresi
Bir araç paleti. Hizmet pencereleri sistem kromunun daha ince bir versiyonunu kullanır ve Windows görev
çubuğu ile Mac OS X pencere menüsünde görünmezler.
Hafif
Hafif pencereler krom içermez ve Windows görev çubuğunda veya Mac OS X pencere menüsünde
görünmezler. Ayrıca, hafif pencereler Windows'ta Sistem (Alt+Ara çubuğu) menüsü içermezler. Hafif
pencereler, açılır kutular gibi kısa süreli görüntü alanları açan bildirim kabarcıkları ve denetimler için uygundur.
type özelliği hafif olarak ayarlandığında systemChrome özelliği none olarak ayarlanmalıdır.
Pencere kromu
Pencere kromu, kullanıcıların masaüstü ortamında bir pencereyi değiştirmesine olanak veren denetimlerin kümesidir.
Krom öğeleri, başlık çubuğu, başlık çubuğu düğmeleri, kenarlık ve yeniden boyutlandırma kıskaçlarını içerir.
Sistem kromu
systemChrome özelliğini standard veya none olarak ayarlayabilirsiniz. Pencerenize kullanıcının işletim sistemi
tarafından oluşturulan ve stillendirilen standart denetimler kümesini vermek için standard sistem kromunu seçin.
Pencere için kendi kromunuzu sağlamak istiyorsanız none olarak ayarlayın. Koddaki sistem kromu ayarlarına
başvurmak için NativeWindowSystemChrome sınıfında tanımlanan sabitleri kullanın.
Sistem kromu sistem tarafından yönetilir. Uygulamanızın denetimlerin kendisine doğrudan erişimi yoktur, ancak
denetimler kullanıldığında gönderilen olaylara tepki verebilir. Pencere için standart krom kullandığınızda,
transparent özelliği false olarak ve type özelliği normal veya utility olarak ayarlanmalıdır.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 60
Yerel pencerelerle çalışma
Özel krom
Sistem kromu olmadan bir pencere oluşturduğunuzda, kullanıcı ve pencere arasındaki etkileşimleri işlemek için kendi
krom denetimlerinizi eklemeniz gerekir. Dikdörtgen olmayan, şeffaf pencereler de yapabilirsiniz.
Pencere şeffaflığı
Bir pencerenin masaüstü veya diğer pencerelerle alfa harmanlamasına izin vermek için transparent özelliğini true
olarak ayarlayın. transparent özelliği pencere oluşturulmadan ayarlanmalıdır ve değiştirilemez.
Şeffaf bir pencerenin varsayılan bir arka planı yoktur. Uygulama tarafından çizilen, nesne içermeyen pencere alanları
görünmezdir. Görüntülenen bir nesne birden küçük bir alfa ayarına sahipse, aynı penceredeki, diğer pencerelerdeki ve
masaüstündeki görüntüleme nesneleri de dahil nesnenin altındaki her şey görünür. Alfa harmanlamalı büyük alanlar
oluşturmak uzun sürebilir, bu nedenle efekt tutumlu kullanılmalıdır.
Şeffaf pencereler, şekil açısından düzensiz olan, “yavaşça kaybolan” veya görünmez olan kenarlıklara sahip
uygulamalar oluşturmak istediğinizde kullanışlıdır.
Önemli: Linux'ta fare olayları tam saydam piksellerden geçmez. Büyük, tam saydam alanlar içeren pencereler
oluşturmaktan kaçınmalısınız, çünkü bu şekilde kullanıcının masaüstündeki diğer pencere ve öğelere erişimini
engelleyebilirsiniz. Mac OS X ve Windows'ta, fare olayları tam saydam piksellerden geçer.
Şeffaflık, sistem kromu içeren pencerelerle kullanılamaz. Ayrıca, HTML'deki SWF ve PDF içeriği şeffaf pencerelerde
görüntülenmez. Daha fazla bilgi için bkz. “HTML sayfasına SWF ve PDF içeriği yüklenirken dikkate alınması
gerekenler” sayfa 248.
Bazı işletim sistemlerinde, donanım ve yazılım yapılandırması veya kullanıcı görüntü seçenekleri nedeniyle şeffaflık
desteklenmeyebilir. Şeffaflık desteklenmediğinde, uygulama siyah bir arka plana karşı birleştirilir. Bu durumlarda,
uygulamanın tüm saydam alanları opak siyah olarak görüntülenir.
Statik NativeWindow.supportsTransparency özelliği, pencere şeffaflığının kullanılabilir olup olmadığını bildirir.
Bu özellik false olduğunda, örneğin, kullanıcıya bir uyarı iletişim kutusu veya geri dönüşlü, dikdörtgen, şeffaf
olmayan bir kullanıcı arabirimi görüntüleyebilirsiniz. Şeffaflığın Mac ve Windows işletim sistemleri tarafından her
zaman desteklendiğini unutmayın. Linux işletim sistemlerinde destek, bileşik pencere yöneticisini gerektirir, ancak
bileşik pencere yöneticisi etkin olduğunda bile, kullanıcı görüntü seçenekleri veya donanım yapılandırması nedeniyle
saydamlık kullanılamayabilir.
HTML uygulama penceresinde şeffaflık
İçinde bulunduğu pencere şeffaf olsa bile, HTML pencereleri ve HTMLLoader nesnelerinde görüntülenen HTML
içeriğinin arka planı varsayılan olarak opaktır. HTML içeriği için görüntülenen varsayılan arka planı kapatmak için,
paintsDefaultBackground özelliğini false olarak ayarlayın. Aşağıdaki örnek bir HTMLLoader oluşturur ve
varsayılan arka planı kapatır:
var html:HTMLLoader = new HTMLLoader();
html.paintsDefaultBackground = false;
Bu örnek, bir HTML penceresinin varsayılan arka planını kapatmak için JavaScript kullanır:
window.htmlLoader.paintsDefaultBackground = false;
HTML belgesinde bulunan bir öğe, bir arka plan rengi ayarlıyorsa, bu öğenin arka planı şeffaf olmaz. Kısmi bir şeffaflık
(veya opaklık) değerinin ayarlanması desteklenmez. Ancak, benzer bir görsel efekt elde etmek için PNG formatındaki
şeffaf bir grafiği bir sayfanın veya sayfa öğesinin arka planı olarak kullanabilirsiniz.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 61
Yerel pencerelerle çalışma
Görsel bir pencere kataloğu
Aşağıdaki tablo, Mac OS X, Windows ve Linux işletim sistemlerinde pencere özellik ayarlarının farklı bileşimlerinin
görsel efektlerini gösterir:
Pencere ayarları
Type: normal
SystemChrome: standart
Transparent: false
Type: hizmet
SystemChrome: standart
Transparent: false
Mac OS X
Microsoft Windows
Linux*
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 62
Yerel pencerelerle çalışma
Pencere ayarları
Mac OS X
Microsoft Windows
Linux*
Type: Herhangi biri
SystemChrome: yok
Transparent: false
Type: Herhangi biri
SystemChrome: yok
Transparent: true
mxWindowedApplication veya
mx:Window
Type: Herhangi biri
SystemChrome: yok
Transparent: true
*
Compiz pencere yöneticisi ile Ubuntu
Not: Aşağıdaki sistem kromu öğeleri AIR'de desteklenmez: Mac OS X Araç Çubuğu, Mac OS X Proxy Simgesi, Windows
başlık çubuğu simgeleri ve diğer sistem kromu.
Pencereler oluşturma
AIR, bir uygulama için ilk pencereyi otomatik olarak oluşturur, ancak ihtiyacınız olan ek pencereleri oluşturabilirsiniz.
Yerel bir pencere oluşturmak için NativeWindow yapıcı yöntemini kullanın. HTML penceresi oluşturmak için
HTMLLoader createRootWindow() yöntemini kullanın veya bir HTML belgesinden JavaScript window.open()
yöntemini çağırın.
Pencere başlatma özelliklerini belirleme
Pencerenin başlatma özellikleri, masaüstü penceresi oluşturulduktan sonra değiştirilemez. Bu sabit özellikler ve
varsayılan değerleri şunlardır:
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 63
Yerel pencerelerle çalışma
Özellik
Varsayılan değer
systemChrome
standard
type
normal
transparent
false
maximizable
true
minimizable
true
resizable
true
Uygulama tanımlayıcı dosyasında AIR tarafından oluşturulan ilk pencereye ilişkin özellikleri ayarlayın. AIR
uygulamasının ana penceresine ilişkin type özelliği her zaman normal olarak ayarlanır. (Tanımlayıcı dosyada
visible, width ve height gibi ek pencere özellikleri belirtilebilir, ancak bu özellikler her zaman değiştirilebilir.)
Uygulamanız tarafından NativeWindowInitOptions sınıfı kullanılarak oluşturulan diğer yerel pencereler ve HTML
pencereleri için özellikleri ayarlayın. Bir pencere oluşturduğunuzda, pencere özelliklerini belirten bir
NativeWindowInitOptions nesnesini NativeWindow yapıcı işlevine veya HTMLLoader createRootWindow()
yöntemine iletmelisiniz.
Aşağıdaki kod, bir hizmet penceresi için NativeWindowInitOptions nesnesi oluşturur:
var options:NativeWindowInitOptions = new NativeWindowInitOptions();
options.systemChrome = NativeWindowSystemChrome.STANDARD;
options.type = NativeWindowType.UTILITY
options.transparent = false;
options.resizable = false;
options.maximizable = false;
Transparent özelliği true olarak veya type özelliği lightweight olarak ayarlandığında systemChrome özelliğinin
standart olarak ayarlanması desteklenmez.
Not: JavaScript window.open() işleviyle oluşturulan bir pencere için başlatma özelliklerini ayarlayamazsınız. Ancak,
kendi HTMLHost sınıfınızı uygulayarak bu pencerelerin oluşturulma biçimini geçersiz kılabilirsiniz. Daha fazla bilgi
için bkz. “window.open() için JavaScript çağrılarını işleme” sayfa 256.
İlk uygulama penceresini oluşturma
AIR, ilk uygulama penceresini uygulama tanımlayıcıda belirtilen özellikler temelinde oluşturur ve içerik öğesinde
başvurulan dosyayı yükler. İçerik öğesi bir SWF veya HTML dosyasına referans vermelidir.
Başlangıç penceresi, uygulamanızın ana penceresi olabilir veya yalnızca bir veya daha çok farklı pencerenin
başlatılması için görev yapabilir. Bu pencereyi görünür yapmanız gerekmez.
Flash geliştirme aracı, otomatik olarak bir SWF dosyası oluşturur ve siz AIR için bir projeyi test ederken veya
yayınlarken uygulama tanımlayıcıya uygun bir başvuru ekler. Ana zaman çizelgesi, uygulamanız için giriş noktası
olarak görev yapar.
Uygulamanız başladığında, AIR bir pencere oluşturur ve uygulama SWF dosyasını yükler. Masaüstü penceresini
ActionScript ile denetlemek için NativeWindow nesnesine başvuru almak üzere Stage nesnesinin nativeWindow
özelliğini kullanırsınız. Daha sonra window ve call window yöntemlerinin özelliklerini ayarlayabilirsiniz.
Aşağıdaki örnek, büyütülmüş durumdaji ana pencereyi etkinleştirir (Flash FLA'nın ana karesinden):
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 64
Yerel pencerelerle çalışma
import flash.display.NativeWindow;
var mainWindow:NativeWindow = this.stage.nativeWindow;
mainWindow.maximize();
mainWindow.activate();
Bir NativeWindow oluşturma
Bir NativeWindow oluşturmak için, NativeWindowInitOptions nesnesini NativeWindow yapıcısına iletin:
var options:NativeWindowInitOptions = new NativeWindowInitOptions();
options.systemChrome = NativeWindowSystemChrome.STANDARD;
options.transparent = false;
var newWindow:NativeWindow = new NativeWindow(options);
Siz visible özelliğini true olarak ayarlayana veya activate() yöntemini çağırana kadar pencere görüntülenmez.
Pencere oluşturulduğunda, özelliklerini başlatabilir ve sahne özelliğiyle Flash görüntü listesi tekniklerini kullanarak
pencereye içerik yükleyebilirsiniz.
Neredeyse her durumda, yeni bir yerel pencerenin scaleMode özelliğini noScale olarak ayarlamalısınız.
(StageScaleMode.NO_SCALE sabitini kullanın.) Flash ölçek modları, uygulama geliştiricisinin uygulama görüntüsüne
ait en boy oranını önceden bilmediği durumlar için tasarlanmıştır. Ölçek modları, geliştiricinin en uygun dengeyi
seçmesine olanak verir: içeriği kesme, uzatma veya sıkıştırma, ya da boş alanla doldurma. AIR'de görüntü alanını
(pencere karesi) denetleyebildiğiniz için, pencereyi içeriğe veya içeriği pencereye göre ödün vermeden
boyutlandırabilirsiniz.
Not: Geçerli işletim sisteminde izin verilen maksimum ve minimum pencere boyutlarını belirlemek için aşağıdaki statik
NativeWindow özelliklerini kullanın:
var maxOSSize:Point = NativeWindow.systemMaxSize;
var minOSSize:Point = NativeWindow.systemMinSize;
Bir HTML penceresi oluşturma
Bir HTML penceresi oluşturmak için JavaScript Window.open() yöntemini veya AIR HTMLLoader sınıfının
createRootWindow() yöntemini çağırabilirsiniz.
Herhangi bir güvenlik sanal alanındaki HTML özelliği JavaScript Window.open() yöntemini kullanabilir. İçerik
uygulama sanal alanının dışında çalışıyorsa, open() yöntemi yalnızca fare tıklatması veya tuşa basma gibi bir kullanıcı
etkileşimine yanıt olarak çağrılabilir. open() yöntemi çağrıldığında, belirtilen URL'deki içeriği görüntülemek için
sistem kromu içeren bir pencere oluşturulur. Örneğin:
newWindow = window.open("xmpl.html", "logWindow", "height=600, width=400, top=10, left=10");
Not: JavaScript window.open() işleviyle oluşturulan pencereyi özelleştirmek için ActionScript'teki HTMLHost sınıfını
genişletebilirsiniz. Bkz. “HTMLHost sınıfının genişletilmesi hakkında” sayfa 252.
Uygulama güvenlik sanal alanındaki içerik, daha güçlü HTMLLoader.createRootWindow() pencere oluşturma
yöntemine erişime sahiptir. Bu yöntemle, yeni bir pencereye ilişkin tüm oluşturma seçeneklerini belirleyebilirsiniz.
Örneğin, aşağıdaki JavaScript kodu 300x400 boyutunda, sistem kromu içermeyen hafif bir pencere oluşturur:
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 65
Yerel pencerelerle çalışma
var options = new air.NativeWindowInitOptions();
options.systemChrome = "none";
options.type = "lightweight";
var windowBounds = new air.Rectangle(200,250,300,400);
newHTMLLoader = air.HTMLLoader.createRootWindow(true, options, true, windowBounds);
newHTMLLoader.load(new air.URLRequest("xmpl.html"));
Not: Yeni bir pencere tarafından yüklenen içerik uygulama güvenlik sanal alanının dışındaysa, pencere nesnesi AIR
özelliklerine sahip değildir: runtime, nativeWindow veya htmlLoader.
createRootWindow() yöntemiyle oluşturulan pencereler, açılan pencereden bağımsız kalırlar. JavaScript Window
nesnesinin parent ve opener özellikleri null değerindedir. Açılan pencere, createRootWindow() işlevinin
döndürdüğü HTMLLoader başvurusunu kullanarak yeni pencerenin Window nesnesine erişebilir. Önceki örnek
bağlamında, newHTMLLoader.window ifadesi oluşturulan pencerenin JavaScript Window nesnesine başvurur.
Not: createRootWindow() işlevi, JavaScript ve ActionScript'ten çağrılabilir.
Bir pencereye içerik ekleme
Bir AIR penceresine nasıl içerik eklediğiniz, pencerenin türüne bağlıdır. Bir film klibi oluşturabilir ve uygulama
durumunu denetlemek için zaman çizelgesini kullanabilirsiniz. HTML ile pencerenin temel içeriğini tanıtıcı biçimde
tanımlayabilirsiniz. Kaynakları uygulama SWF dosyasına gömebilir veya ayrı uygulama dosyalarından
yükleyebilirsiniz. Flash ve HTML içeriği anında oluşturulabilir ve bir pencereye dinamik olarak eklenebilir.
SWF içeriği veya JavaScript içeren HTML içeriği yüklerken, AIR güvenlik modelini dikkate almalısınız. Uygulama
güvenlik sanal alanındaki, yani uygulamanızla yüklenen ve app ile yüklenebilen her içerik: URL şeması, tüm AIR
API'lerine erişmek için tüm ayrıcalıklara sahiptir. Bu sanal alanın dışından yüklenen her içerik AIR API'lerine
erişemez. Uygulama sanal alanının dışındaki JavaScript içeriği JavaScript Window nesnesinin runtime,
nativeWindow veya htmlLoader özelliklerini kullanamaz.
Güvenli çapraz komut dosyası oluşturmayı sağlamak için, uygulama içeriği ve uygulama dışı içerik arasında sınırlı bir
arabirim sağlamak üzere sanal alan köprüsünü kullanabilirsiniz. HTML içeriğinde, bu sayfadaki kodun harici içeriğe
ilişkin çapraz komut dosyası oluşturmasına izin vermek için uygulamanızın sayfalarını uygulama dışı bir sanal alana
eşleyebilirsiniz. Bkz. “AIR güvenliği” sayfa 23.
SWF dosyası veya resmi yükleme
flash.display.Loader sınıfını kullanarak yerel bir pencerenin görüntü listesine Flash SWF dosyaları veya
görüntüler yükleyebilirsiniz:
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 66
Yerel pencerelerle çalışma
package {
import
import
import
import
flash.display.Sprite;
flash.events.Event;
flash.net.URLRequest;
flash.display.Loader;
public class LoadedSWF extends Sprite
{
public function LoadedSWF(){
var loader:Loader = new Loader();
loader.load(new URLRequest("visual.swf"));
loader.contentLoaderInfo.addEventListener(Event.COMPLETE,loadFlash);
}
private function loadFlash(event:Event):void{
addChild(event.target.loader);
}
}
}
HTML tabanlı bir uygulamada kullanım için kitaplık kodu içeren bir SWF dosyası yükleyebilirsiniz. Bir HTML
penceresine SWF dosyası yüklemenin en basit yolu script etiketini kullanmaktır, ancak doğrudan Loader API'sini
de kullanabilirsiniz.
Not: ActionScript 1 veya 2 kullanılarak oluşturulan daha eski SWF dosyaları, aynı pencereye yüklendiklerinde sınıf
tanımları, tek ve genel değişkenler gibi genel durumları paylaşırlar. Buna benzer bir SWF dosyası doğru çalışmak için
dokunulmamış genel durumlara dayanıyorsa, aynı pencereye bir defadan fazla veya örtüşen sınıf tanımları veya
değişkenleri kullanılarak başka bir SWF dosyasıyla aynı pencereye yüklenemez. Bu içerik ayrı pencerelere yüklenebilir.
Bir NativeWindow'a HTML içeriği yükleme
Bir NativeWindow'a HTML içeriği yüklemek için HTMLLoader nesnesini pencere sahnesine ekleyip HTML içeriğini
HTMLLoader öğesine yükleyebilir veya HTMLLoader.createRootWindow() yöntemini kullanarak önceden bir
HTMLLoader nesnesi içeren bir pencere oluşturabilirsiniz. Aşağıdaki örnek, HTML içeriğini yerel pencere sahnesinde
300x500 piksel boyutundaki görüntü alanında görüntüler:
//newWindow is a NativeWindow instance
var htmlView:HTMLLoader = new HTMLLoader();
html.width = 300;
html.height = 500;
//set the stage so display objects are added to the top-left and not scaled
newWindow.stage.align = "TL";
newWindow.stage.scaleMode = "noScale";
newWindow.stage.addChild( htmlView );
//urlString is the URL of the HTML page to load
htmlView.load( new URLRequest(urlString) );
Not: Bir HTML dosyasındaki SWF veya PDF içeriği, pencere saydamlık kullandığında (pencerenin transparent
özelliği true olduğunda) veya HTMLLoader denetimi ölçeklendiğinde görüntülenmez.
SWF içeriğini HTML penceresine bir kaplama olarak ekleme
HTML pencereleri bir NativeWindow örneğinin içinde bulunduğundan, Flash görüntü nesnelerini görüntü
listesindeki HTML katmanının üstüne ve altına ekleyebilirsiniz.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 67
Yerel pencerelerle çalışma
Bir görüntü nesnesini HTML katmanının üstüne eklemek için window.nativeWindow.stage özelliğinin
addChild() yöntemini kullanın. addChild() yöntemi, katmanlı içeriği pencerede bulunan tüm içeriğin üzerine
ekler.
HTML katmanının altına bir görüntü nesnesi eklemek için, index parametresine ilişkin sıfır değerini ileterek,
window.nativeWindow.stage özelliğinin addChildAt() yöntemini kullanın. Bir nesnenin sıfır dizinine
yerleştirilmesi, HTML görüntüsü de dahil var olan içeriği bir katman yukarı taşır ve yeni içeriği bunun altına ekler.
HTML sayfasının altındaki katmanlı içeriğin görünür olması için HTMLlLoader nesnesinin
paintsDefaultBackground özelliğini false olarak ayarlamalısınız. Ayrıca, bir arka plan rengi ayarlayan sayfanın
her öğesi şeffaf olmayacaktır. Örneğin sayfanın gövde öğesi için bir arka plan rengi ayarladığınızda, sayfanın hiçbir yeri
şeffaf olmaz.
Aşağıdaki örnek, Flash görüntü nesnelerinin bir HTML sayfasına kaplama ve altlık olarak nasıl ekleneceğini gösterir.
Örnek, iki basit şekil nesnesi oluşturarak bunlardan birini HTML içeriğinin altına, diğerini üstüne ekler. Örnek,
enterFrame olayını temel alan şekil konumunu da günceller.
<html>
<head>
<title>Bouncers</title>
<script src="AIRAliases.js" type="text/javascript"></script>
<script language="JavaScript" type="text/javascript">
air.Shape = window.runtime.flash.display.Shape;
function Bouncer(radius, color){
this.radius = radius;
this.color = color;
//velocity
this.vX = -1.3;
this.vY = -1;
//Create a Shape object and draw a circle with its graphics property
this.shape = new air.Shape();
this.shape.graphics.lineStyle(1,0);
this.shape.graphics.beginFill(this.color,.9);
this.shape.graphics.drawCircle(0,0,this.radius);
this.shape.graphics.endFill();
//Set the starting position
this.shape.x = 100;
this.shape.y = 100;
//Moves the sprite by adding (vX,vY) to the current position
this.update = function(){
this.shape.x += this.vX;
this.shape.y += this.vY;
//Keep the sprite within the window
if( this.shape.x - this.radius < 0){
this.vX = -this.vX;
}
if( this.shape.y - this.radius < 0){
this.vY = -this.vY;
}
if( this.shape.x + this.radius > window.nativeWindow.stage.stageWidth){
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 68
Yerel pencerelerle çalışma
this.vX = -this.vX;
}
if( this.shape.y + this.radius > window.nativeWindow.stage.stageHeight){
this.vY = -this.vY;
}
};
}
function init(){
//turn off the default HTML background
window.htmlLoader.paintsDefaultBackground = false;
var bottom = new Bouncer(60,0xff2233);
var top = new Bouncer(30,0x2441ff);
//listen for the enterFrame event
window.htmlLoader.addEventListener("enterFrame",function(evt){
bottom.update();
top.update();
});
//add the bouncing shapes to the window stage
window.nativeWindow.stage.addChildAt(bottom.shape,0);
window.nativeWindow.stage.addChild(top.shape);
}
</script>
<body onload="init();">
<h1>de Finibus Bonorum et Malorum</h1>
<p>Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium
doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis
et quasi architecto beatae vitae dicta sunt explicabo.</p>
<p style="background-color:#FFFF00; color:#660000;">This paragraph has a background color.</p>
<p>At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis
praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias
excepturi sint occaecati cupiditate non provident, similique sunt in culpa qui
officia deserunt mollitia animi, id est laborum et dolorum fuga.</p>
</body>
</html>
Bu örnek, AIR'de ActionScript ve JavaScript arasındaki sınırları aşan bazı gelişmiş tekniklere temel bir giriş sağlar.
ActionScript görüntüleme nesnelerini kullanmaya alışık değilseniz, daha fazla bilgi için bkz. Adobe ActionScript 3.0
Programlama kılavuzu Görüntü Programlama bölümü.
Örnek: Yerel bir pencere oluşturma
Aşağıdaki örnek, yerel bir pencerenin nasıl oluşturulacağını gösterir:
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 69
Yerel pencerelerle çalışma
public function createNativeWindow():void {
//create the init options
var options:NativeWindowInitOptions = new NativeWindowInitOptions();
options.transparent = false;
options.systemChrome = NativeWindowSystemChrome.STANDARD;
options.type = NativeWindowType.NORMAL;
//create the window
var newWindow:NativeWindow = new NativeWindow(options);
newWindow.title = "A title";
newWindow.width = 600;
newWindow.height = 400;
newWindow.stage.align = StageAlign.TOP_LEFT;
newWindow.stage.scaleMode = StageScaleMode.NO_SCALE;
//activate and show the new window
newWindow.activate();
}
Pencereleri yönetme
Masaüstü pencerelerinin görünümünü, davranışını ve yaşam döngüsünü yönetmek için NativeWindow sınıfının
özelliklerinive yöntemlerini kullanırsınız.
Bir NativeWindow örneği alma
Bir pencereyi değiştirmek için önce pencere örneğini almalısınız. Pencere örneğini aşağıdaki konumlardan birinden
alabilirsiniz:
• Pencere oluşturmak için kullanılan yerel pencere yapıcısı:
var win:NativeWindow = new NativeWindow(initOptions);
• Pencere sahnesinin nativeWindow özelliği:
var win:NativeWindow = stage.nativeWindow;
• Penceredeki görüntüleme nesnesinin stage özelliği:
var win:NativeWindow = displayObject.stage.nativeWindow;
• Pencere tarafından gönderilen yerel pencere olayının target özelliği:
private function onNativeWindowEvent(event:NativeWindowBoundsEvent):void
{
var win:NativeWindow = event.target as NativeWindow;
}
• Pencerede görüntülenen HTML sayfasının nativeWindow özelliği:
var win:NativeWindow = htmlLoader.window.nativeWindow;
• NativeApplication nesnesinin activeWindow ve openedWindows özellikleri:
var nativeWin:NativeWindow = NativeApplication.nativeApplication.activeWindow;
var firstWindow:NativeWindow = NativeApplication.nativeApplication.openedWindows[0];
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 70
Yerel pencerelerle çalışma
NativeApplication.nativeApplication.activeWindow uygulamanın etkin penceresine başvurur. (Ancak,
etkin pencere bu AIR uygulamasına ait bir pencere değilse null değerini döndürür.)
NativeApplication.nativeApplication.openedWindows dizisi, AIR uygulamasındaki kapatılmamış tüm
pencereleri içerir.
Pencereleri etkinleştirme, gösterme ve gizleme
Bir pencereyi etkinleştirmek için NativeWindow activate() yöntemini çağırın. Bir pencerenin etkinleştirilmesi
pencereyi öne çıkarır, ona klavye ve fare odağı kazandırır ve gerektiğinde pencereyi yeniden yükleyerek veya visible
özelliğini true olarak ayarlayarak pencereyi görünür duruma getirir. Bir pencereni etkinleştirilmesi uygulamadaki
diğer pencerelerin sırasını değiştirmez. Activate() yönteminin çağrılması, pencerenin activate olayı
göndermesine neden olur.
Bir pencereyi etkinleştirmeden göstermek için visible özelliğini true olarak ayarlayın. Bu, pencereyi öne çıkarır,
ancak odağı pencereye atamaz.
Bir pencereyi görünümden gizlemek için, visible özelliğini false olarak ayarlayın. Pencerenin gizlenmesi
pencerenin ve tüm ilişkili görev çubuğu simgelerinin ve Mac OS X'te Pencereler menüsündeki girişin
görüntülenmesini engeller.
Not: Mac OS X'te dock pencere bölümünde bir simgeye sahip olan simge durumuna küçültülmüş bir pencereyi tam
olarak gizlemek olanaksızdır. Simge durumuna küçültülen bir pencerede visible özelliği false olarak ayarlandıysa,
pencereye ilişkin dock simgesi görüntülenmeye devam eder. Kullanıcı simgeyi tıklattığında, pencere görünür bir duruma
yeniden yüklenir ve görüntülenir.
Pencere görüntü sırasını değiştirme
AIR, pencerelerin görüntü sırasını doğrudan değiştirmek için birkaç yöntem sağlar. Bir pencereyi görüntü sırasının
önüne veya arkasına, bir pencereyi başka bir pencerenin üzerine veya ardına taşıyabilirsiniz. Aynı zamanda, kullanıcı
pencereleri etkinleştirerek yeniden sıralayabilir.
Bir pencerenin alwaysInFront özelliğini true olarak ayarlayarak, bu pencereyi diğer pencerelerin önünde
tutabilirsiniz. Birden çok pencere bu ayara sahip olduğunda, bu pencerelerin görüntü sırası kendi aralarında belirlenir,
ancak bu pencereler her zaman alwaysInFront özelliği false olarak ayarlanmış pencerelerin önünde sıralanır. AIR
uygulaması etkin olmadığında bile, en üst grupta yer alan pencereler diğer uygulamalardaki pencerelerin üzerinde
görüntülenir. Bu davranış kullanıcı için zorlayıcı olabileceğinden, alwaysInFront özelliği yalnızca gerekli ve uygun
olduğunda true olarak ayarlanmalıdır. Uygun kullanım örnekleri şunları içerir:
• Araç ipuçları, açılır listeler, özel menüler ve açılır kutular gibi denetimler için geçici açılır pencereler. Odağı
kaybettiklerinde bu tür pencerelerin kapatılmaları gerektiğinden, kullanıcının başka bir pencereyi
görüntülemesinin engellenmesi can sıkıcı olmayabilir.
• Çok acil hata mesajları ve uyarılar. Kullanıcının zamanında yanıt vermemesi durumunda kurtarılamayacak bir
değişikliğin gerçekleşme olasılığı, bir uyarı penceresini ekranın önüne taşımayı gerekli kılabilir. Ancak çoğu hata ve
uyarı, normal pencere görüntü sırasında işlenebilir.
• Kısa süreli tost stili pencereler.
Not: AIR, alwaysInFront özelliğinin uygun kullanımını zorlamaz. Ancak, uygulamanız bir kullanıcının iş akışını
aksatıyorsa, uygulamanın kullanıcının çöp kutusuna gönderilme ihtimali de yüksektir.
NativeWindow sınıfı, bir pencerenin diğer pencerelere göre görüntü sırasını ayarlamak için aşağıdaki özellikleri ve
yöntemleri sağlar:
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 71
Yerel pencerelerle çalışma
Üye
Açıklama
alwaysInFront özelliği
Pencerenin en üst pencere grubunda görüntülenip görüntülenmediğini belirtir.
Neredeyse her durumda, false en iyi ayardır. false değerinin true olarak değiştirilmesi pencereyi diğer
tüm pencerelerin önüne getirir. (Ancak pencereyi etkinleştirmez.) true değerinin false olarak
değiştirilmesi pencereyi en üst grupta kalan pencerelerin arkasında, ancak hala diğer pencerelerin
önünde sıralar. Özelliğin bir pencere için geçerli değerine ayarlanması, pencere görüntü sırasını
değiştirmez.
orderToFront()
Pencereyi öne getirir.
orderInFrontOf()
Pencereyi belirli bir pencerenin önüne getirir.
orderToBack()
Pencereyi diğer pencerelerin arkasına gönderir.
orderBehind()
Pencereyi doğrudan belirli bir pencerenin arkasına gönderir.
activate()
Pencereyi öne geçirir (pencereyi görünür duruma getirerek ve odağı pencereye atayarak).
Not: Bir pencere gizli (visible özelliği false) veya simge durumundaysa, görüntü sırası yöntemlerinin etkisi olmaz.
Linux işletim sisteminde, farklı pencere yöneticileri pencere görüntü sırasına ilişkin farklı kurallar uygular:
• Bazı pencere yöneticilerinde, yardımcı program pencereleri her zaman normal pencerelerin önünde görüntülenir.
• Bazı pencere yöneticilerinde, alwaysInFront özelliği true olarak ayarlanmış tam ekranlı bir pencere, her zaman
alwaysInFront özelliği true olan diğer pencerelerin önünde görüntülenir.
Bir pencereyi kapatma
Bir pencereyi kapatmak için NativeWindow.close() yöntemini kullanın.
Bir pencerenin kapatılması pencere içeriğini boşaltır, ancak diğer nesneler bu içeriğe başvuruyorsa, içerik nesneleri
ortadan kaldırılmaz. NativeWindow.close() yöntemi senkronize olmayan biçimde yürütülür, pencerede bulunan
uygulama kapatma işlemi sırasında çalışmaya devam eder. Close yöntemi, kapatma işlemi başarılı olduğunda bile bir
close olayı gönderir. NativeWindow nesnesi teknik olarak hala geçerlidir, ancak çoğu özellik ve yönteme kapatılmış
bir pencerede erişmek, bir IllegalOperationError oluşturur. Kapatılan bir pencereyi yeniden açamazsınız. Pencerenin
kapanıp kapanmadığını test etmek için pencerenin closed özelliğini kontrol edin. Bir pencereyi görünümden
gizlemek için NativeWindow.visible özelliğini false olarak ayarlayın.
Nativeapplication.autoExit özelliği varsayılan true değerinde olduğunda, son pencere kapandığında uygulama
kapanır.
Pencere işlemlerinin iptaline izin verme
Bir pencere sistem kromu kullandığında, uygun olayların varsayılan davranışı dinlenerek veya iptal edilerek
kullanıcının pencereyle etkileşimi iptal edilebilir. Örneğin, bir kullanıcı sistem kromu kapatma düğmesini
tıklattığında, closing olayı gönderilir. Bir kayıtlı dinleyici olayın preventDefault() yöntemini çağırdığında,
pencere kapanmaz.
Pencere sistem kromu kullanmıyorsa, hedeflenen değişikliklerin bildirim olayları değişiklik yapılmadan önce
otomatik olarak gönderilmez. Bu nedenle, bir pencereyi kapatmaya, pencere durumunu değiştirmeye veya pencere
sınırı özelliklerinden birini ayarlamaya ilişkin yöntemleri çağırırsanız, değişiklik iptal edilemez. Pencere değişikliği
yapılmadan uygulamanızdaki bileşenleri bilgilendirmek için, uygulama mantığınız pencerenin dispatchEvent()
yöntemini kullanarak ilgili bildirim olayını gönderebilir.
Örneğin, aşağıdaki mantık bir pencere kapatma düğmesi için iptal edilebilir bir olay işleyicisi uygular:
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 72
Yerel pencerelerle çalışma
public function onCloseCommand(event:MouseEvent):void{
var closingEvent:Event = new Event(Event.CLOSING,true,true);
dispatchEvent(closing);
if(!closingEvent.isDefaultPrevented()){
win.close();
}
}
Olay preventDefault() yöntemi bir dinleyici tarafından çağrılırsa, dispatchEvent() yöntemi false değerini
döndürür. Ancak, bu yöntem başka nedenlerle de false değerini döndürebilir, bu nedenle değişikliğin iptal edilmesi
gerekip gerekmediğini test etmek için açıkça isDefaultPrevented() yöntemini kullanmak daha uygundur.
Bir pencereyi büyütme, simge durumuna küçültme ve geri yükleme
Pencereyi büyütmek için NativeWindow maximize() yöntemini kullanın.
myWindow.maximize();
Pencereyi simge durumuna küçültmek için NativeWindow minimize() yöntemini kullanın.
myWindow.minimize();
Pencereyi geri yüklemek için (yani, simge durumuna küçültülmeden veya büyütülmeden önceki boyutuna geri
döndürmek için), NativeWindow restore() yöntemini kullanın.
myWindow.restore();
Not: Bir AIR penceresini büyütme sonucunda ortaya çıkan davranış, Mac OS X standart davranışından farklıdır.
Uygulama tarafından tanımlanmış “standart” bir boyut ve kullanıcı tarafından ayarlanan son boyut arasında geçiş
yapmak yerine, AIR pencereleri uygulama veya kullanıcı tarafından ayarlanan son boyut ve ekranın tam kullanılabilir
alanı arasında geçiş yapar.
Linux işletim sisteminde, farklı pencere yöneticileri pencere görüntü durumunun ayarlanmasına ilişkin farklı kurallar
uygular:
• Bazı pencere yöneticilerinde, yardımcı program pencereleri ekranı kaplayamaz.
• Pencere için maksimum boyut ayarlandıysa, bazı pencereler pencerenin ekranı kaplamasına izin vermez. Diğer bazı
pencere yöneticileri, ekranı kaplaması gereken görüntü durumunu ayarlar, ancak pencereyi yeniden
boyutlandırmaz. Her iki durumda da, görüntü durumu değişiklik olayı gönderilmez.
• Bazı pencere yöneticileri pencerenin maximizable veya minimizable ayarlarına önem vermez.
Örnek: Bir pencereyi simge durumuna küçültme, büyütme, geri yükleme ve
kapatma
Flash için aşağıdaki ActionScript örneği, NativeWindow minimize(), maximize(), restore() ve close()
yöntemlerini tetikleyen dört tıklatılabilir metin alanı oluşturur:
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 73
Yerel pencerelerle çalışma
package
{
import flash.display.Sprite;
import flash.events.MouseEvent;
import flash.text.TextField;
public class MinimizeExample extends Sprite
{
public function MinimizeExample():void
{
var minTextBtn:TextField = new TextField();
minTextBtn.x = 10;
minTextBtn.y = 10;
minTextBtn.text = "Minimize";
minTextBtn.background = true;
minTextBtn.border = true;
minTextBtn.selectable = false;
addChild(minTextBtn);
minTextBtn.addEventListener(MouseEvent.CLICK, onMinimize);
var maxTextBtn:TextField = new TextField();
maxTextBtn.x = 120;
maxTextBtn.y = 10;
maxTextBtn.text = "Maximize";
maxTextBtn.background = true;
maxTextBtn.border = true;
maxTextBtn.selectable = false;
addChild(maxTextBtn);
maxTextBtn.addEventListener(MouseEvent.CLICK, onMaximize);
var restoreTextBtn:TextField = new TextField();
restoreTextBtn.x = 230;
restoreTextBtn.y = 10;
restoreTextBtn.text = "Restore";
restoreTextBtn.background = true;
restoreTextBtn.border = true;
restoreTextBtn.selectable = false;
addChild(restoreTextBtn);
restoreTextBtn.addEventListener(MouseEvent.CLICK, onRestore);
var closeTextBtn:TextField = new TextField();
closeTextBtn.x = 340;
closeTextBtn.y = 10;
closeTextBtn.text = "Close Window";
closeTextBtn.background = true;
closeTextBtn.border = true;
closeTextBtn.selectable = false;
addChild(closeTextBtn);
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 74
Yerel pencerelerle çalışma
closeTextBtn.addEventListener(MouseEvent.CLICK, onCloseWindow);
}
function onMinimize(event:MouseEvent):void
{
this.stage.nativeWindow.minimize();
}
function onMaximize(event:MouseEvent):void
{
this.stage.nativeWindow.maximize();
}
function onRestore(event:MouseEvent):void
{
this.stage.nativeWindow.restore();
}
function onCloseWindow(event:MouseEvent):void
{
this.stage.nativeWindow.close();
}
}
}
Bir pencereyi yeniden boyutlandırma ve taşıma
Bir pencere sistem kromu kullandığında, krom, pencerenin yeniden boyutlandırılması ve masaüstünde taşınması için
sürükleme denetimleri sağlar. Pencere sistem kromu kullanmıyorsa, kullanıcının pencereyi yeniden boyutlandırması
ve taşımasını olanaklı kılmak için kendi denetimlerinizi eklemelisiniz.
Not: Bir pencereyi yeniden boyutlandırmak veya taşımak için, önce NativeWindow örneğine bir başvuru almalısınız.
Bir pencere başvurusunun nasıl alınacağı hakkında bilgi için “Bir NativeWindow örneği alma” sayfa 69.
Bir pencereyi yeniden boyutlandırma
Kullanıcının pencereyi etkileşimli olarak yeniden boyutlandırmasına izin vermek için NativeWindow
startResize() yöntemini kullanın. Bu yöntem bir mouseDown olayından çağrıldığında, yeniden boyutlandırma
işlemi fareyle başlatışır ve işletim sistemi bir mouseUp olayı aldığında tamamlanır. startResize() yöntemini
çağırırken, pencerenin yeniden boyutlandırılacağı ilk kenar ve köşeyi belirten bir argüman iletirsiniz.
Pencere boyutunu programlama yoluyla ayarlamak için pencerenin width, height ve bounds özelliklerini istenen
boyutlara göre ayarlayın. Sınırları belirledikten sonra, pencere boyutu ve konum aynı anda değiştirilebilir. Ancak,
değişikliklerin oluştuğu sıra garanti edilmez. Bazı Linux pencere yöneticileri, pencerelerin masaüstü ekranının sınırları
dışına genişlemesine izin vermez. Bu durumlarda, aksi halde değişikliklerin net etkisi kurala uygun bir pencereyle
sonuçlanacak olsa da, son pencere boyutu özelliklerin ayarlandığı sıra nedeniyle sınırlanabilir. Örneğin, ekranın
altında yer alan pencerenin hem yüksekliğini hem de y konumunu değiştirdiğinizde, yükseklik değişikliği y konumu
değişmeden önce uygulandığından tam yükseklik değişikliği gerçekleşmeyebilir.
Not: Linux'ta pencere özellikleri senkronize olmayan şekilde değişir. Programınızın bir satırındaki özelliği ayarlar ve
sonraki satırdaki değeri okursanız, okunan değer hala eski ayarı yansıtacaktır. Değişikliğin ne zaman uygulandığını
saptamak için pencere tarafından oluşturulan olayları kullanabilirsiniz.
Sahnenin ölçekleme modu, pencere sahnesi ve içeriklerinin pencere yeniden boyutlandırıldığında nasıl davranacağını
belirler. Sahne ölçekleme modlarının, web tarayıcısında olduğu gibi, uygulamanın görüntü alanının boyutu veya en
boy oranının denetiminde olmadığı durumlar için tasarlanmış olduğunu unutmayın. Genellikle scaleMode özelliğini
StageScaleMode.NO_SCALE olarak ayarladığınızda en iyi sonuçları alırsınız. Yine de, pencere içeriğinin
ölçeklenmesini istiyorsanız, değişen pencere sınırlarına yanıt olarak içeriğin scaleX ve scaleY parametrelerrini
ayarlayabilirsiniz.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 75
Yerel pencerelerle çalışma
Bir pencereyi taşıma
Pencereyi yeniden boyutlandırmadan taşımak için NativeWindow startMove() yöntemini kullanın.
startResize() yöntemi gibi, startMove() yöntemi bir mouseDown olayından çağrıldığında, taşıma işlemi fareyle
başlatılmıştır ve işletim sistemi bir mouseUp olayı aldığında tamamlanır.
startResize ve startMove yöntemleri hakkında daha fazla bilgi için bkz. ActionScript 3.0 Dil ve Bileşenler
Başvurusu (http://www.adobe.com/go/learn_air_aslr_tr).
Örnek: Pencereleri yeniden boyutlandırma ve taşıma
Aşağıdaki örnek bir pencerede yeniden boyutlandırma ve taşıma işlemlerinin nasıl başlatılacağını gösterir:
package
{
import flash.display.Sprite;
import flash.events.MouseEvent;
import flash.display.NativeWindowResize;
public class NativeWindowResizeExample extends Sprite
{
public function NativeWindowResizeExample():void
{
// Fills a background area.
this.graphics.beginFill(0xFFFFFF);
this.graphics.drawRect(0, 0, 400, 300);
this.graphics.endFill();
// Creates a square area where a mouse down will start the resize.
var resizeHandle:Sprite =
createSprite(0xCCCCCC, 20, this.width - 20, this.height - 20);
resizeHandle.addEventListener(MouseEvent.MOUSE_DOWN, onStartResize);
// Creates a square area where a mouse down will start the move.
var moveHandle:Sprite = createSprite(0xCCCCCC, 20, this.width - 20, 0);
moveHandle.addEventListener(MouseEvent.MOUSE_DOWN, onStartMove);
}
public function createSprite(color:int, size:int, x:int, y:int):Sprite
{
var s:Sprite = new Sprite();
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 76
Yerel pencerelerle çalışma
s.graphics.beginFill(color);
s.graphics.drawRect(0, 0, size, size);
s.graphics.endFill();
s.x = x;
s.y = y;
this.addChild(s);
return s;
}
public function onStartResize(event:MouseEvent):void
{
this.stage.nativeWindow.startResize(NativeWindowResize.BOTTOM_RIGHT);
}
public function onStartMove(event:MouseEvent):void
{
this.stage.nativeWindow.startMove();
}
}
}
Pencere olaylarını dinleme
Bir pencerenin gönderdiği olayları dinlemek için, pencere örneğiyle bir dinleyiciyi kaydedin. Örneğin, closing olayını
dinlemek için, bir dinleyiciyi pencereyle aşağıdaki gibi kaydedin:
myWindow.addEventListener(Event.CLOSING, onClosingEvent);
Bir olay gönderildiğinde target özelliği olayı gönderen pencereye başvurur.
Çoğu pencere olayının iki ilişkili mesajı vardır. İlk mesaj, bir pencere değişikliği yapılacağına (ve bunun iptal
edilebileceğine) işaret ederken, ikinci mesaj değişikliğin gerçekleştiğini bildirir. Örneğin, kullanıcı pencerenin
kapatma düğmesini tıklattığında, closing olayı mesajı gönderilir. Hiçbir dinleyici olayı iptal etmezse, pencere kapatılır
ve close olayı tüm dinleyicilere gönderilir.
Genellikle closing gibi uyarı olayları, yalnızca bir olayı tetiklemek için sistem kromu kullanıldıysa gönderilir.
Örneğin, pencere close() yönteminin çağrılması otomatik olarak closing olayını göndermez—yalnızca close olayı
gönderilir. Ancak, bir closing olayı nesnesi oluşturabilir ve bunu pencerenin dispatchEvent() yöntemini kullanarak
gönderebilirsiniz.
Bir Event nesnesi gönderen pencere olayları:
Olay
Açıklama
activate
Pencere odak aldığında gönderilir.
deactivate
Pencere odağı kaybettiğinde gönderilir.
closing
Pencere kapatılmak üzere olduğunda gönderilir. Bu otomatik olarak yalnızca sistem kromu kapatma düğmesine
basıldığında veya Mac OS X'te Çıkış komutu çağrıldığında gerçekleşir.
close
Pencere kapatıldığında gönderilir.
Bir NativeWindowBoundsEvent nesnesi gönderen pencere olayları:
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 77
Yerel pencerelerle çalışma
Olay
Açıklama
moving
Pencerenin sol üst köşesi taşıma, yeniden boyutlandırma veya pencere görüntü durumu değişikliği sonucunda
konumunu değiştirmeden hemen önce gönderilir.
move
Sol üst köşe konumunu değiştirdikten sonra gönderilir.
resizing
Pencere genişliği veya yüksekliği, yeniden boyutlandırma veya görüntü durumu değişikliği sonucunda
değişmeden hemen önce gönderilir.
resize
Pencere boyut değiştirdikten sonra gönderilir.
NativeWindowBoundsEvent olayları için, bekleyen veya tamamlanan bir değişiklikten önce ve sonraki pencere
sınırlarını belirlemek üzere beforeBounds ve afterBounds özelliklerini kullanabilirsiniz.
Bir NativeWindowDisplayStateEvent nesnesi gönderen pencere olayları:
Olay
Açıklama
displayStateChanging
Pencere görüntü durumu değişmeden hemen önce gönderilir.
displayStateChange
Pencere görüntü durumu değiştikten sonra gönderilir.
NativeWindowDisplayStateEvent olayları için, bekleyen veya tamamlanan bir değişiklikten önce ve sonraki pencere
görüntü durumunu belirlemek üzere beforeDisplayState ve afterDisplayState özelliklerini kullanabilirsiniz.
Bazı Linux pencere yöneticileride, maksimum boyuta ayarına sahip bir pencere büyütüldüğünde, görüntü durum
değişikliği olayı gönderilmez. (Pencere maksimum görüntü durumuna ayarlanır, ancak yeniden boyutlandırılmaz.)
Tam ekran pencereleri görüntüleme
Sahne'nin displayState özelliğini StageDisplayState.FULL_SCREEN_INTERACTIVE olarak ayarlamak, pencereyi
tam ekran moduna getirir, ancak bu modda klavye girişine izin verilir. (Bir tarayıcıda çalışan SWF içeriğinde, klavye
girişine izin verilmez.) Kullanıcı, tam ekran modundan çıkmak için Escape tuşuna basar.
Not: Bazı Linux pencere yöneticileri, pencere için maksimum boyut ayarlı olduğunda, pencere boyutlarını ekranı
kaplamak üzere değiştirmez. (Ancak pencere sistem kromunu kaldırır.)
Flash için aşağıdaki ActionScript örneği, basit bir tam ekranlı metin uçbirimi simüle eder:
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 78
Yerel pencerelerle çalışma
import
import
import
import
flash.display.Sprite;
flash.display.StageDisplayState;
flash.text.TextField;
flash.text.TextFormat;
public class FullScreenTerminalExample extends Sprite
{
public function FullScreenTerminalExample():void
{
var terminal:TextField = new TextField();
terminal.multiline = true;
terminal.wordWrap = true;
terminal.selectable = true;
terminal.background = true;
terminal.backgroundColor = 0x00333333;
this.stage.displayState = StageDisplayState.FULL_SCREEN_INTERACTIVE;
addChild(terminal);
terminal.width = 550;
terminal.height = 400;
terminal.text = "Welcome to the dumb terminal application. Press the ESC key to
exit.\n_";
var tf:TextFormat = new TextFormat();
tf.font = "Courier New";
tf.color = 0x00CCFF00;
tf.size = 12;
terminal.setTextFormat(tf);
terminal.setSelection(terminal.text.length - 1, terminal.text.length);
}
}
79
Bölüm 11: Ekranlar
Bilgisayara eklenen masaüstü görüntü ekranları hakkındaki bilgiye erişmek için Adobe® AIR® Screen sınıfını kullanın.
Ekranlar hakkında ek çevrimiçi bilgi
Screen sınıfı ve ekranlarla çalışma hakkında daha fazla bilgiyi şu kaynaklarda bulabilirsiniz:
Hızlı Başlangıçlar (Adobe AIR Geliştirici Bağlantısı)
• Sanal masaüstünü ölçme
Dil Başvurusu
• Ekran
Adobe Geliştirici Bağlantısı Makaleleri ve Örnekleri
• Flash için Adobe AIR Geliştirici Bağlantısı ('AIR ekranları'nı arama)
Ekran temelleri
Ekran API'si, sistem ekran bilgisinin elde edilmesi için statik üyeler ve belirli bir ekranın açıklanması için örnek üyeler
sağlayan Screen adlı tek bir sınıf içerir.
Bilgisayar sistemi, sanal alana yerleştirilmiş çeşitli masaüstü ekranlarına karşılık gelen, kendisine eklenmiş birkaç
monitör ve görüntü içerebilir. AIR Screen sınıfı ekranlar, ekranların göreceli olarak yerleştirilmesi ve kullanılabilir
alanları hakkında bilgi sağlar. Aynı ekrana birden çok monitör eşleniyorsa, yalnızca bir ekran mevcut olur. Ekran
boyutu monitörün görüntü alanından büyükse, ekranın hangi bölümünün geçerli olarak görünür olduğunu
belirlemenin bir yolu yoktur.
Ekran, bağımsız bir masaüstü görüntü alanını temsil eder. Ekranlar, görsel masaüstü içinde dikdörtgenler olarak
tanımlanır. Birincil görüntü olarak belirlenen ekranın sol üst köşesi, görsel masaüstü koordinat sisteminin başlangıç
noktasıdır. Ekranı tanımlamak için kullanılan tüm deperler piksel cinsinden verilir.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 80
Ekranlar
Ekran sınırları
Sanal ekran
Kullanılabilir sınırlar
Bu ekran yerleştirmesinde, görsel masaüstünde iki ekran bulunuyor. Ana ekranın (#1) sol üst köşesinin koordinatları her zaman (0,0)'dır.
Ekran yerleştirmesi ekran #2'yi ana ekran olarak belirleyecek biçimde değiştirilirse, ekran #1'in koordinatları negatif olur. Ekrana ilişkin
kullanılabilir sınırlar bildirilirken menü çubukları, görev çubukları ve dock'lar hariç tutulur.
Ekran API sınıfı, yöntemleri, özellikleri ve olayları hakkında ayrıntılı bilgi için bkz. ActionScript 3.0 Dil ve Bileşen
Başvurusu (http://www.adobe.com/go/learn_air_aslr_tr).
Ekranları numaralandırma
Sanal masaüstü ekranlarını aşağıdaki ekran yöntemleri ve özellikleriyle numaralandırabilirsiniz:
Yöntem veya Özellik
Açıklama
Screen.screens
Kullanılabilir ekranları açıklayan bir dizi Screen nesnesi sağlar. Dizinin sırasının önemli olmadığını göz
önünde bulundurun.
Screen.mainScreen
Ana ekran için bir Screen nesnesi sağlar. Mac OS X'te ana ekran her zaman menü çubuğunu
görüntüleyen ekrandır. Windows'ta ana ekran, sistem tarafından belirlenen birincil ekrandır.
Screen.getScreensForRectangle() Belirtilen dikdörtgenle kesişen ekranları tanımlayan bir dizi Screen nesnesi sağlar. Bu yönteme aktarılan
dikdörtgen, sanal masaüstündeki piksel koordinatlarındadır. Hiçbir ekran dikdörtgenle kesişmiyorsa,
dizi boştur. Bu yöntemi, bir pencerenin hangi ekranlarda görüntülendiğini bulmak için kullanabilirsiniz.
Screen class yöntemleri ve özelliklerinden dönen değerleri kaydetmemelisiniz. Kullanıcı veya işletim sistemi var olan
ekranları ve bu ekranların yerleştirilmesini her zaman değiştirebilir.
Aşağıdaki örnek, ok tuşlarına basılmasına yanıt olarak bir pencereyi birden çok ekran arasında taşımak için ekran
API'sini kullanır. Pencereyi sonraki ekrana taşımak için örnek screens dizisini getirir ve bu diziyi dikey veya yatay
olarak sıralar (basılan ok tuşuna göre). Daha sonra kod sıralanan dizide her ekranı geçerli ekranın koordinatlarıyla
karşılaştırarak ilerler. Örnek, pencerenin geçerli ekranını tanımlamak için pencere sınırlarında iletilen
Screen.getScreensForRectangle() yöntemini çağırır.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 81
Ekranlar
package {
import
import
import
import
import
import
flash.display.Sprite;
flash.display.Screen;
flash.events.KeyboardEvent;
flash.ui.Keyboard;
flash.display.StageAlign;
flash.display.StageScaleMode;
public class ScreenExample extends Sprite
{
public function ScreenExample()
{
stage.align = StageAlign.TOP_LEFT;
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.addEventListener(KeyboardEvent.KEY_DOWN,onKey);
}
private function onKey(event:KeyboardEvent):void{
if(Screen.screens.length > 1){
switch(event.keyCode){
case Keyboard.LEFT :
moveLeft();
break;
case Keyboard.RIGHT :
moveRight();
break;
case Keyboard.UP :
moveUp();
break;
case Keyboard.DOWN :
moveDown();
break;
}
}
}
private function moveLeft():void{
var currentScreen = getCurrentScreen();
var left:Array = Screen.screens;
left.sort(sortHorizontal);
for(var i:int = 0; i < left.length - 1; i++){
if(left[i].bounds.left < stage.nativeWindow.bounds.left){
stage.nativeWindow.x +=
left[i].bounds.left - currentScreen.bounds.left;
stage.nativeWindow.y += left[i].bounds.top - currentScreen.bounds.top;
}
}
}
private function moveRight():void{
var currentScreen:Screen = getCurrentScreen();
var left:Array = Screen.screens;
left.sort(sortHorizontal);
for(var i:int = left.length - 1; i > 0; i--){
if(left[i].bounds.left > stage.nativeWindow.bounds.left){
stage.nativeWindow.x +=
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 82
Ekranlar
left[i].bounds.left - currentScreen.bounds.left;
stage.nativeWindow.y += left[i].bounds.top - currentScreen.bounds.top;
}
}
}
private function moveUp():void{
var currentScreen:Screen = getCurrentScreen();
var top:Array = Screen.screens;
top.sort(sortVertical);
for(var i:int = 0; i < top.length - 1; i++){
if(top[i].bounds.top < stage.nativeWindow.bounds.top){
stage.nativeWindow.x += top[i].bounds.left - currentScreen.bounds.left;
stage.nativeWindow.y += top[i].bounds.top - currentScreen.bounds.top;
break;
}
}
}
private function moveDown():void{
var currentScreen:Screen = getCurrentScreen();
var top:Array = Screen.screens;
top.sort(sortVertical);
for(var i:int = top.length - 1; i > 0; i--){
if(top[i].bounds.top > stage.nativeWindow.bounds.top){
stage.nativeWindow.x += top[i].bounds.left - currentScreen.bounds.left;
stage.nativeWindow.y += top[i].bounds.top - currentScreen.bounds.top;
break;
}
}
}
private function sortHorizontal(a:Screen,b:Screen):int{
if (a.bounds.left > b.bounds.left){
return 1;
} else if (a.bounds.left < b.bounds.left){
return -1;
} else {return 0;}
}
private function sortVertical(a:Screen,b:Screen):int{
if (a.bounds.top > b.bounds.top){
return 1;
} else if (a.bounds.top < b.bounds.top){
return -1;
} else {return 0;}
}
private function getCurrentScreen():Screen{
var current:Screen;
var screens:Array = Screen.getScreensForRectangle(stage.nativeWindow.bounds);
(screens.length > 0) ? current = screens[0] : current = Screen.mainScreen;
return current;
}
}
}
83
Bölüm 12: Yerel menülerle çalışma
Uygulama, pencere, bağlam menülerini ve açılır menüleri tanımlamak için yerel menü API'lerindeki sınıfları kullanın.
Yerel menüler hakkında ek çevrimiçi bilgiler
Yerel menü API'si ve yerel menülerle çalışma hakkında daha fazla bilgiyi aşağıdaki kaynaklarda bulabilirsiniz:
Hızlı Başlangıçlar (Adobe AIR Geliştirici Bağlantısı)
• AIR uygulamasına yerel menüler ekleme
Dil Başvurusu
• NativeMenu
• NativeMenuItem
Adobe Geliştirici Bağlantısı Makaleleri ve Örnekleri
• Flash için Adobe Geliştirici Bağlantısı ('AIR menüleri'ni arama)
AIR menüsü temelleri
Yerel menü sınıfları, uygulamanızın çalıştığı işletim sisteminin yerel menü özelliklerine erişmenizi sağlar. NativeMenu
nesneleri uygulama menüleri (Mac OS X'te bulunan), pencere menüleri (Windows ve Linux'ta bulunan), bağlam
menüleri ve açılır menüler için kullanılabilir.
AIR menüsü sınıfları
Adobe® AIR™ Menu sınıfları şunları içerir:
Paket
Sınıflar
flash.display
•
NativeMenu
•
NativeMenuItem
•
ContextMenu
•
ContextMenuItem
•
Olay
•
ContextMenuEvent
flash.ui
flash.events
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 84
Yerel menülerle çalışma
Menü çeşitleri
AIR, aşağıdaki menü türlerini destekler:
Uygulama menüleri Uygulama menüsü, tüm uygulamada geçerli olan genel bir menüdür. Uygulama menüleri Mac
OS X'te desteklenir, ancak Windows veya Linux'ta desteklenmez. Mac OS X'te, işletim sistemi otmatik olarak bir
uygulama menüsü oluşturur. Standart menülere öğeler ve alt menüler eklemek için AIR menü API'lerini
kullanabilirsiniz. Var olan menü komutlarını yönetmek için dinleyiciler ekleyebilirsiniz. Veya var olan öğeleri
kaldırabilirsiniz.
Pencere menüleri Pencere menüsü tek bir pencereyle ilişkilendirilmiştir ve başlık menüsünün altında görüntülenir.
Menüler, bir NativeMenu nesnesi oluşturma ve bu nesneyi NativeWindow nesnesinin menu özelliğine atama yoluyla
bir pencereye eklenebilir. Pencere menüleri Windows ve Linux işletim sistemlerinde desteklenir, ancak Mac OS X'te
desteklenmez. Yerel pencere menüleri yalnızca sistem kromu olan pencerelerle kullanılabilir.
Bağlam menüleri Bağlam menüleri, SWF içeriğindeki etkileşimli bir nesnenin veya HTML içeriğindeki bir belge
öğesinin sağ tıklatılması veya command tuşuna basılı tutularak tıklatılması yoluyla açılır. NativeMenu veya
ContextMenu sınıflarından birini kullanarak bir bağlam menüsü oluşturabilirsiniz. HTML içeriğinde, HTML
öğelerine bağlam menüleri eklemek için Webkit HTML ve JavaScript API'lerini kullanabilirsiniz.
Dock ve sistem tepsisi simge menüleri Bu simge menüleri bağlam menülerine benzer ve Mac OS X'te yer alan bir
uygulama simgesine veya görev çubuğundaki Windows ve Linux bildirim alanlarına atanır. Dock ve sistem tepsisi
simge menüleri, NativeMenu sınıfını kullanır. Mac OS X'te, menüdeki öğeler standart işletim sistemi öğelerinin
üzerine eklenmiştir. Windows ve Linux'ta standart menü bulunmaz.
Açılır menüler AIR açılır menüsü, bağlam menüsüne benzer, ancak belirli bir uygulama nesnesi veya bileşeni ile
ilişkilendirilmiş olmayabilir. Açılır menüler, herhangi bir NativeMenu nesnesinin display() yönteminin çağrılması
yoluyla pencerenin herhangi bir yerinde görüntülenebilir.
Özel menüler Yerel menüler tamamen işletim sistemiyle çizilir ve bu nedenle Flash ve HTML oluşturma modellerinin
dışında yer alır. MXML, ActionScript veya JavaScript kullanarak kendinize ait yerel olmayan menüler
oluşturabilirsiniz. AIR menü sınıfları, yerel menülerin çizimini denetleme olanağı sunmaz.
Varsayılan menüler
Aşağıdaki varsayılan menüler işletim sistemi veya yerleşik bir AIR sınıfı tarafından sağlanır:
• Mac OS X'teki uygulama menüsü
• Mac OS X'teki dock simgesi menüsü
• HTML içeriğinde seçilen metin ve görüntüler için bağlam menüsü
• TextField nesnesinde (veya TextField'ı genişleten bir nesnede) seçilen metin için bağlam menüsü
Menü yapısı
Menüler yapıları gereği hiyerarşiktir. NativeMenu nesneleri, alt NativeMenuItem nesneleri içerebilir. Alt menüleri
temsil eden NativeMenuItem nesneleri, buna karşılık NativeMenu nesnelerini içerebilir. Yapıdaki üst veya kök düzey
menü nesneleri, uygulama ve pencere menülerine ilişkin menü çubuğunu temsil eder. (Bağlam menüleri, simge
menüleri ve açılır menüler menü çubuğu içermez.)
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 85
Yerel menülerle çalışma
Aşağıdaki diyagram, tipik bir menünün yapısını gösterir. Kök menü, menü çubuğunu temsil eder ve Dosya alt menüsü
ile Düzen alt menüsüne başvuruda bulunan iki menü öğesi içerir. Bu yapıdaki Dosya alt menüsü iki komut öğesinin
yanı sıra Son Kullanılan Menüyü Aç alt menüsüne başvuruda bulunan ve kendisi üç öğe içeren bir öğeyi içerir. Düzen
alt menüsü üç komut ve bir ayırıcı içerir.
NativeMenu
Root Menu
NativeMenuItem
“File”
NativeMenu
File Menu
NativeMenuItem
“New”
NativeMenuItem
“Save”
NativeMenuItem
“Open Recent”
NativeMenu
NativeMenuItem
NativeMenu
Open Recent Menu
NativeMenuItem
“GreatGatsby.pdf”
NativeMenuItem
“WarAndPeace.pdf”
NativeMenuItem
“Iliad.pdf”
“Edit”
Edit Menu
NativeMenuItem
“Copy”
NativeMenuItem
“Paste”
NativeMenuItem
Separator
NativeMenuItem
“Preferences”
Alt menünün tanımlanması, hem NativeMenu hem de NativeMenuItem nesnesini gerektirir. NativeMenuItem
nesnesi, üst menüde görüntülenen etiketi tanımlar ve kullanıcının alt menüyü açmasını sağlar. NativeMenu nesnesi,
alt menüdeki öğeler için konteyner işlevi görür. The NativeMenuItem nesnesi, NativeMenuItem submenu özelliği
aracılığıyla NativeMenu nesnesine başvuruda bulunur.
Bu menüyü oluşturan bir kod örneğini görüntülemek için bkz. “Örnek: Pencere ve uygulama menüsü” sayfa 94.
Menü olayları
NativeMenu ve NativeMenuItem nesnelerinin her ikisi de displaying ve select olaylarını gönderir:
Görüntüleme: Menü görüntülenmeden hemen önce, menü ve menü öğeleri tüm kayıtlı dinleyicilere bir displaying
olayı gönderir. displaying olayı, size menü içeriklerini veya öğe görünümünü kullanıcıya gösterilmeden önce
güncelleme fırsatı verir. Örneğin, “Son Kullanılanları Aç” menüsünün displaying olayına ilişkin dinleyicide, menü
öğelerini son görüntülenen belgelerin güncel listesini yansıtacak biçimde değiştirebilirsiniz.
Event nesnesinin target özelliği her zaman görüntülenmek üzere olan menüdür. currentTarget, dinleyicinin
üzerinde kayıtlı olduğu nesnedir: menünün kendisi veya öğelerinden biridir.
Not: Displaying olayı, menünün veya menü öğelerinden birinin durumuna erişildiğinde de gönderilir.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 86
Yerel menülerle çalışma
Seç: Kullanıcı bir komut öğesini seçtiğinde öğe kayıtlı dinleyicilere bir select olayı gönderir. Alt menü ve ayırıcı
öğeleri seçilemez ve bu nedenle hiçbir zaman select olayı gönderemez.
select olayı, bir menü öğesinden bu öğeyi içeren menüye doğru ve kök menüye kadar baloncuk oluşturur. Select
olaylarını doğrudan bir öğe üzerinde veya daha yüksek sesle menü yapısında dinleyebilirsiniz. Menüde select olayını
dinlediğinizde, olayın target özelliğini kullanarak seçilen öğeyi tanımlayabilirsiniz. Olay menü hiyerarşisi boyunca
kabarcık oluştururken olay nesnesinin currentTarget özelliği geçerli menü nesnesini tanımlar.
Not: ContextMenu ve ContextMenuItem nesneleri menuItemSelect ve menuSelect olaylarının yanı sıra select ve
displaying olaylarını da gönderir.
Menü komutları için tuş eşdeğerleri
Menü komutuna bir tuş eşdeğeri (bazen hızlandırıcı olarak adlandırılır) atayabilirsiniz. Tuşa veya tuş bileşimine
basıldığında, menü öğesi kayıtlı dinleyicilere bir select olayı gönderir. Komutun çağrılması için, öğeyi içeren menü
uygulama menüsünün veya etkin pencerenin bölümü olmalıdır.
Tuş eşdeğerleri, ana anahtarı temsil eden bir dize ve ayrıca basılması gereken bir dizi değiştirici tuş olmak üzere iki
bölümden oluşur. Ana anahtarı atamak için, menü öğesi keyEquivalent özelliğini bu tuş için tek karakter dizesi
olarak ayarlayın. Büyük harf kullandığınızda, shift tuşu değiştirici dizisine otomatik olarak eklenir.
Mac OS X'te, varsayılan değiştirici (Keyboard.COMMAND) komut tuşudur. Windows ve Linux'ta, ctrl tuşudur
(Keyboard.CONTROL). Bu varsayılan tuşlar değiştirici dizisine otomatik olarak eklenir. Farklı değiştirici tuşlar atamak
için keyEquivalentModifiers özelliğine istenen tuş kodlarını içeren yeni bir dizi atayın. Varsayılan dizinin üzerine
üzerine yazılır. Varsayılan değiştiricileri kullansanız da kendi değiştirici dizinizi atasanız da, keyEquivalent
özelliğine atadığınız dize büyük harf olduğunda shift tuşu eklenir. Değiştirici tuşlar için kullanılacak tuş kodlarına
ilişkin sabitler Keyboard sınıfında tanımlanır.
Atanan tuş eşdeğer dizesi, otomatik olarak menü öğesi adının yanında görüntülenir. Format kullanıcının işletim
sistemine ve sistem tercihlerine bağlıdır.
Not: Windows işletim sisteminde bir tuş değiştirici dizisine Keyboard.COMMAND değerini atadığınızda, menüde tuş
eşdeğeri görüntülenmez. Ancak, menü komutunu etkinleştirmek için ctrl tuşu kullanılmalıdır.
Aşağıdaki örnek, menü öğesine ilişkin tuş eşdeğeri olarak Ctrl+Shift+G tuşlarını atamaktadır:
var item:NativeMenuItem = new NativeMenuItem("Ungroup");
item.keyEquivalent = "G";
Bu örnek, doğrudan değiştirici dizisini ayarlayarak tuş eşdeğeri olarak Ctrl+Shift+G tuşlarını atar:
var item:NativeMenuItem = new NativeMenuItem("Ungroup");
item.keyEquivalent = "G";
item.keyEquivalentModifiers = [Keyboard.CONTROL];
Not: Tuş eşdeğerleri yalnızca uygulama ve pencere menüleri için tetiklenir. Bağlam menüsüne veya açılır menüye bir tuş
eşdeğeri atadığınızda, tuş eşdeğeri menü etiketinde görüntülenir, ancak ilişkili menü komutu hiçbir zaman çağrılmaz.
Anımsatıcılar
Anımsatıcılar, menülere ilişkin işletim sistemi klavye arabiriminin bir parçasıdır. Linux, Mac OS X ve Windows
kullanıcıların klavye yoluyla menüleri açmasına ve komutları seçmesine olanak verir, ancak arada küçük farklar vardır.
Mac OS X'te kullanıcı menünün ilk veya iki harfini yazar ve ardından return tuşuna basar. mnemonicIndex özelliği
yoksayılır.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 87
Yerel menülerle çalışma
Windows'ta yalnızca tek bir harf önemlidir. Varsayılan olarak, önemli harf etiketteki ilk karakterdir. Ancak menü
öğesine bir anımsatıcı atadığınızda, önemli karakter belirlenen harf olarak değişir. Bir menüdeki iki öğe aynı önemli
karaktere sahip olduğunda (anımsatıcı atanmış olup olmaması önemli değildir) kullanıcının menü ile klavye etkileşimi
biraz değişir. Kullanıcı, menüyü veya komutu seçmek üzere tek bir harfe basmak yerine, harfe istenen öğeyi
vurgulamak için gerekli olduğu kadar basmalı ve daha sonra seçimi tamamlamak için Enter tuşunu kullanmalıdır.
Tutarlı davranışı korumak için, pencere menülerine ilişkin bir menüdeki her öğeye benzersiz bir anımsatıcı atamanız
tavsiye edilir.
Linux'ta varsayılan bir anımsatıcı sunulmaz. Bir anımsatıcı sağlamak için menü öğesinin mnemonicIndex özelliği için
bir değer belirlemelisiniz.
Anımsatıcı karakteri etiket dizesinde dizin olarak belirleyin. Etiketteki ilk karakterin dizini 0'dır. Bu nedenle,
etiketlenen menü öğesi “Format” için “r” anımsatıcısını kullanmak üzere mnemonicIndex özelliğini 2'ye
eşitlemelisiniz.
var item:NativeMenuItem = new NativeMenuItem("Format");
item.mnemonicIndex = 2;
Menü öğesi durumu
Menü öğeleri iki durum özelliğine sahiptir, checked ve enabled:
checked Öğe etiketinin yanında bir onay işareti görüntülemek için true özelliğini belirleyin.
var item:NativeMenuItem = new NativeMenuItem("Format");
item.checked = true;
enabled Komutun etkin olup olmadığını kontrol etmek için değeri true ve false arasında değiştirin. Etkin olmayan
öğeler silik bir görselliğe sahiptir ve select olayları göndermez.
var item:NativeMenuItem = new NativeMenuItem("Format");
item.enabled = false;
Menü öğesine nesne ekleme
NativeMenuItem sınıfının data özelliği, her öğede rasgele bir nesneye başvuruda bulunabilmenizi sağlar. Örneğin,
“Son Kullanılanları Aç” menüsünde her bir menü öğesine her belge için File nesnesi atayabilirsiniz.
var file:File = File.applicationStorageDirectory.resolvePath("GreatGatsby.pdf")
var menuItem:NativeMenuItem = docMenu.addItem(new NativeMenuItem(file.name));
menuItem.data = file;
Yerel menüler oluşturma
Bu başlık, AIR tarafından desteklenen çeşitli türlerdeki yerel menülerin nasıl oluşturulduğunu açıklar.
Root menu nesnesi oluşturma
Menü kökü olarak görev yapacak bir NativeMenu nesnesi oluşturmak için NativeMenu yapıcısını kullanın:
var root:NativeMenu = new NativeMenu();
Kök menü, uygulama ve pencere menüleri için menü çubuğunu temsil eder ve yalnızca alt menüleri açan öğeleri
içermelidir. Bağlam menüsü ve açılır menüler menü çubuğu içermez. Bu nedenle kök menü, alt menülerin yanı sıra
komutlar ve ayırıcı da içermelidir.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 88
Yerel menülerle çalışma
Menü oluşturulduktan sonra, menü öğelerini ekleyebilirsiniz. Öğeleri belirli bir dizine menu nesnesinin addItemAt()
yöntemini kullanarak eklemediğiniz sürece, öğeler menüye eklendikleri sıraya göre görüntülenir.
Menüyü uygulama, pencere, simge veya bağlam menüsü olarak atayın veya aşağıdaki bölümlerde gösterildiği gibi açılır
menü olarak görüntüleyin:
Uygulama menüsünü ayarlama
NativeApplication.nativeApplication.menu = root;
Not: Mac OS X, her uygulama için standart öğeler içeren bir menü tanımlar. NativeApplication nesnesinin menu
özelliğine yeni bir NativeMenu nesnesinin atanması, standart menüyü değiştirir. Değiştirmek yerine, standart menüyü
de kullanabilirsiniz.
Pencere menüsünü ayarlama
nativeWindowObject.menu = root;
Etkileşimli bir nesnede bağlam menüsünü ayarlama
interactiveObject.contextMenu = root;
Dock simgesi menüsünü ayarlama
DockIcon(NativeApplication.nativeApplication.icon).menu = root;
Not: Mac OS X, uygulama dock simgesi için standart bir menü tanımlar. DockIcon nesnesinin menu özelliğine yeni bir
NativeMenu atadığınızda, bu menüdeki öğeler standart öğelerin üzerinde görüntülenir. Standart menü öğelerini
kaldıramaz, değiştiremez veya bu öğelere erişemezsiniz.
Sistem tepsisi simge menüsünü ayarlama
SystemTrayIcon(NativeApplication.nativeApplication.icon).menu = root;
Menüyü açılır menü olarak görüntüleme
root.display(stage, x, y);
Alt menü oluşturma
Alt menü oluşturmak için, üst menüye bir NativeMenuItem nesnesi ekleyin ve daha sonra öğenin submenu özelliğine
alt menüyü tanımlayan NativeMenu nesnesini atayın. AIR, alt menü öğeleri ve bu öğelere ilişkin menü nesneleri
oluşturmak için iki yol sunar:
addSubmenu() yöntemiyle bir menü öğesi ve buna ilişkin menü nesnesini tek bir adımda oluşturabilirsiniz:
var editMenuItem:NativeMenuItem = root.addSubmenu(new NativeMenu(), "Edit");
Menü öğesini oluşturabilir ve menü nesnesini submenu özelliğine ayrıca da atayabilirsiniz:
var editMenuItem:NativeMenuItem = root.addItem("Edit", false);
editMenuItem.submenu = new NativeMenu();
Menü komutu oluşturma
Menü komutu oluşturmak için menüye bir NativeMenuItem nesnesi ve menü komutunu uygulayan işleve başvuran
bir olay dinleyicisi ekleyin:
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 89
Yerel menülerle çalışma
var copy:NativeMenuItem = new NativeMenuItem("Copy", false);
copy.addEventListener(Event.SELECT, onCopyCommand);
editMenu.addItem(copy);
Select olayını komut öğesinin üzerinde dinleyebilir (örnekte gösterildiği gibi) veya select olayını üst menü
nesnesinde dinleyebilirsiniz.
Not: Alt menüleri ve ayırıcı satırları temsil eden menü öğeleri, select olayları göndermez ve bu nedenle komut olarak
kullanılamaz.
Menü ayırıcı satırı oluşturma
Ayırıcı satır oluşturmak için, yapıcıdaki isSeparator parametresini true olarak ayarlayarak bir NativeMenuItem
oluşturun. Daha sonra ayırıcı öğeyi doğru yerdeki menüye ekleyin:
var separatorA:NativeMenuItem = new NativeMenuItem("A", true);
editMenu.addItem(separatorA);
Ayırıcı için belirtilen bir etiket varsa, görüntülenmez.
Bağlam menüleri hakkında
SWF içeriğinde, InteractiveObject nesnesinden miras alınan her nesnenin contextMenu özelliğine bir menü nesnesi
atanarak, bu nesneye bir bağlam menüsü verilebilir. contextMenu öğesine atanan menü nesnesi NativeMenu veya
type ContextMenu tipinde olabilir.
ContextMenu ve ContextMenuItem sınıflarını kullanırken yerel menü olaylarını veya bağlam menüsü olaylarını
dinleyebilirsiniz; her ikisi de gönderilir. ContextMenuEvent nesnesinin özelliklerinin sağladığı bir fayda
contextMenuOwner öğesinin menünün ekleneceği nesneyi ve mouseTarget öğesinin menüyü açmak için tıklatılan
nesneyi tanımlamasıdır. Bu bilgi NativeMenuEvent nesnesinde bulunmaz.
Aşağıdaki örnek bir hareketli görüntü oluşturur ve basit bir düzenleme bağlam menüsü ekler:
var sprite:Sprite = new Sprite();
sprite.contextMenu = createContextMenu()
private function createContextMenu():ContextMenu{
var editContextMenu:ContextMenu = new ContextMenu();
var cutItem:ContextMenuItem = new ContextMenuItem("Cut")
cutItem.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, doCutCommand);
editContextMenu.customItems.push(cutItem);
var copyItem:ContextMenuItem = new ContextMenuItem("Copy")
copyItem.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, doCopyCommand);
editContextMenu.customItems.push(copyItem);
var pasteItem:ContextMenuItem = new ContextMenuItem("Paste")
pasteItem.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, doPasteCommand);
editContextMenu.customItems.push(pasteItem);
return editContextMenu
}
private function doCutCommand(event:ContextMenuEvent):void{trace("cut");}
private function doCopyCommand(event:ContextMenuEvent):void{trace("copy");}
private function doPasteCommand(event:ContextMenuEvent):void{trace("paste");}
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 90
Yerel menülerle çalışma
Not: Tarayıcı ortamında görüntülenen SWF içeriğinin aksine, AIR'deki bağlam menüleri yerleşik komutlar içermez.
HTML'deki bağlam menüleri hakkında
HTML içeriğinde, contextmenu olayı bir bağlam menüsünü görüntülemek için kullanılabilir. Varsayılan olarak
bağlam menüsü, kullanıcı seçilen metinde bağlam menüsü olayını çağırdığında görüntülenir (metni sağ tıklatma veya
command tuşuna basılı tutarak tıklatma yoluyla). Varsayılam menünün açılmasını önlemek için, contextmenu olayını
dinleyin ve event nesnesinin preventDefault() yöntemini çağırın:
function showContextMenu(event){
event.preventDefault();
}
Özel bağlam menüsünü DHTML tekniklerini kullanarak veya bir AIR yerel bağlam menüsünü görüntüleyerek
görüntüleyebilirsiniz. Aşağıdaki örnek, HTML contextmenu olayına yanıt olarak menü display() yöntemini
çağırma yoluyla yerel bir bağlam menüsünü görüntüler:
<html>
<head>
<script src="AIRAliases.js" language="JavaScript" type="text/javascript"></script>
<script language="javascript" type="text/javascript">
function showContextMenu(event){
event.preventDefault();
contextMenu.display(window.nativeWindow.stage, event.clientX, event.clientY);
}
function createContextMenu(){
var menu = new air.NativeMenu();
var command = menu.addItem(new air.NativeMenuItem("Custom command"));
command.addEventListener(air.Event.SELECT, onCommand);
return menu;
}
function onCommand(){
air.trace("Context command invoked.");
}
var contextMenu = createContextMenu();
</script>
</head>
<body>
<p oncontextmenu="showContextMenu(event)" style="-khtml-user-select:auto;">Custom context
menu.</p>
</body>
</html>
Yerel menüleri tanıtıcı biçimde tanımlama
Menü ve menü öğeleri özelliklerinin kodlanması biraz zahmetli olabilir. Ancak, menüler hiyerarşik bir yapıda
olduklarından, doğru olan XML formatlı bir tanım kullanarak menü oluşturan bir işlev yazmaktır.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 91
Yerel menülerle çalışma
Aşağıdaki sınıf, yapıcısına bir XML nesnesi alarak NativeMenu öğesini şunu yapmak için geliştirir:
package
{
import flash.display.NativeMenu;
import flash.display.NativeMenuItem;
import flash.events.Event;
public class DeclarativeMenu extends NativeMenu
{
public function DeclarativeMenu(XMLMenuDefinition:XML):void
{
super();
addChildrenToMenu(this, XMLMenuDefinition.children());
}
private function addChildrenToMenu(menu:NativeMenu,
children:XMLList):NativeMenuItem
{
var menuItem:NativeMenuItem;
var submenu:NativeMenu;
for each (var child:XML in children)
{
if (String(child.@label).length > 0)
{
menuItem = new NativeMenuItem(child.@label);
menuItem.name = child.name();
}
else
{
menuItem = new NativeMenuItem(child.name());
menuItem.name = child.name();
}
menu.addItem(menuItem);
if (child.children().length() > 0)
{
menuItem.submenu = new NativeMenu();
addChildrenToMenu(menuItem.submenu,child.children());
}
}
return menuItem;
}
} //End class
} //End package
Bu sınıfa sahip bir menü oluşturmak, XML menü tanımını aşağıdaki şekilde onaylayın:
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 92
Yerel menülerle çalışma
var menuDefinition:XML =
<root>
<FileMenu label='File'>
<NewMenu label='New'>
<NewTextFile label='Text file'/>
<NewFolder label='Folder'/>
<NewProject label='Project'/>
</NewMenu>
<OpenCommand label='Open'/>
<SaveCommand label='Save'/>
</FileMenu>
<EditMenu label='Edit'>
<CutCommand label='Cut'/>
<CopyCommand label='Copy'/>
<PasteCommand label='Paste'/>
</EditMenu>
<FoodItems label='Food Items'>
<Jellyfish/>
<Tripe/>
<Gizzard/>
</FoodItems>
</root>;
var test:DeclarativeMenu = new DeclarativeMenu(menuDefinition);
Menü olaylarını dinlemek için kök menü düzeyinde dinleyebilir ve hangi komutun seçildiğini saptamak için
event.target.name özelliğini kullanabilirsiniz. Ayrıca menüdeki öğeleri ada göre arayabilir ve ayrı ayrı olay
dinleyicileri oluşturabilirsiniz.
Açılır menüleri görüntüleme
Menü display() yöntemini çağırarak herhangi bir NativeMenu nesnesini bir pencerenin üzerinde rasgele bir
zamanda ve yerde görüntüleyebilirsiniz. Yöntem, sahneye başvuru gerektirir; bu nedenle yalnızca uygulama sanal
alanındaki içerik menüyü açılır biçimde görüntüleyebilir.
Aşağıdaki yöntem, fare tıklatmasına karşılık olarak popupMenu adlı bir NativeMenu nesnesi tarafından tanımlanan
menüyü görüntüler:
private function onMouseClick(event:MouseEvent):void {
popupMenu.display(event.target.stage, event.stageX, event.stageY);
}
Not: Menünün doğrudan bir olaya karşılık olarak görüntülenmesi gerekmez. Herhangi bir yöntem display() işlevini
çağırabilir.
Menü olaylarını işleme
Kullanıcı menüyü veya bir menü öğesini seçtiğinde, menü olayları gönderir.
Menu sınıfları için olay özeti
Menü olaylarını işlemek için menülere veya ayrı ayrı öğelere olay dinleyicileri ekleyin.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 93
Yerel menülerle çalışma
Nesne
Gönderilen olaylar
NativeMenu
NativeMenuEvent.DISPLAYING
NativeMenuEvent.SELECT (alt öğelerden ve alt menülerden yayılan)
NativeMenuItem
NativeMenuEvent.SELECT
NativeMenuEvent.DISPLAYING (üst menüden yayılan)
ContextMenu
ContextMenuEvent.MENU_SELECT
ContextMenuItem
ContextMenuEvent.MENU_ITEM_SELECT
NativeMenu.SELECT
Menü olaylarını seç
Bir menü öğesini tıklatmayı işlemek için, NativeMenuItem nesnesine select olayına ilişkin bir olay dinleyicisi
ekleyin:
var menuCommandX:NativeMenuItem = new NativeMenuItem("Command X");
menuCommand.addEventListener(Event.SELECT, doCommandX)
Select olayı mevcut menülere baloncuk oluşturduğundan, bir üst menüdeki select olaylarını da dinleyebilirsiniz.
Menü düzeyinde dinleme sırasında, hangi menü komutunun seçildiğini belirlemek için olay nesnesinin target
özelliğini kullanabilirsiniz. Aşağıdaki örnek, seçilen komutun etiketini gösterir:
var colorMenuItem:NativeMenuItem = new NativeMenuItem("Choose a color");
var colorMenu:NativeMenu = new NativeMenu();
colorMenuItem.submenu = colorMenu;
var red:NativeMenuItem = new NativeMenuItem("Red");
var green:NativeMenuItem = new NativeMenuItem("Green");
var blue:NativeMenuItem = new NativeMenuItem("Blue");
colorMenu.addItem(red);
colorMenu.addItem(green);
colorMenu.addItem(blue);
if(NativeApplication.supportsMenu){
NativeApplication.nativeApplication.menu.addItem(colorMenuItem);
NativeApplication.nativeApplication.menu.addEventListener(Event.SELECT, colorChoice);
} else if (NativeWindow.supportsMenu){
var windowMenu:NativeMenu = new NativeMenu();
this.stage.nativeWindow.menu = windowMenu;
windowMenu.addItem(colorMenuItem);
windowMenu.addEventListener(Event.SELECT, colorChoice);
}
function colorChoice(event:Event):void {
var menuItem:NativeMenuItem = event.target as NativeMenuItem;
trace(menuItem.label + " has been selected");
}
ContextMenuItem sınıfını kullanıyorsanız, select olayını veya menuItemSelect olayını dinleyebilirsiniz.
menuItemSelect olayı size bağlam menüsünü içeren nesne hakkında ek bilgi verir, ancak mevcut menülere kabarcık
oluşturmaz.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 94
Yerel menülerle çalışma
Menü olaylarını görüntüleme
Menü açılışını işlemek için, menü görüntülenmeden önce gönderilen displaying olayı için dinleyici ekleyebilirsiniz.
Menüyü güncellemek için, örneğin öğeler ekleyerek veya kaldırarak ya da ayrı ayrı öğelerin etkin veya işaretli
durumlarını güncelleyerek görüntüleme olayını kullanabilirsiniz.
Örnek: Pencere ve uygulama menüsü
Aşağıdaki örnek, “Menü yapısı” sayfa 84'nda gösterilen menüyü oluşturur.
Menü, hem yalnızca pencere menülerini destekleyen Windows'ta, hem de yalnızca uygulama menülerini destekleyen
Mac OS X'te çalışmak üzere tasarlanmıştır. MenuExample sınıfı yapıcısı, ayrım yapmak için NativeWindow ve
NativeApplication sınıflarının statik supportsMenu özelliğini kontrol eder. Yapıcı, NativeWindow.supportsMenu
öğesi true olduğunda pencere için bir NativeMenu nesnesi oluşturur, daha sonra Dosya ile Düzen alt menülerini
oluşturur ve ekler. NativeApplication.supportsMenu öğesi true, yapıcı Dosya ve Düzen menülerini oluştururarak
bunları Mac OS X işletim sisteminin sağladığı var olan menüye ekler.
Örnek ayrıca, menü olay işlemesini de gösterir. Select olayı öğe düzeyinin yanı sıra menü düzeyinde de işlenir.
Seçilen öğeyi içeren menüden kök menüye kadarki zincirde bulunan her bir menü select olayını yanıtlar.
displaying olayı “Son Kullanılanları Aç” menüsüyle birlikte kullanılır. Menü açılmadan hemen önce, menüdeki
öğeler en son kullanılan Belgeler dizisinden (bu örnekte aslında değişmeyen) yenilenir. Bu örnekte gösterilmese de,
displaying olaylarını ayrı ayrı öğelerde de dinleyebilirsiniz.
package {
import
import
import
import
import
import
import
flash.display.NativeMenu;
flash.display.NativeMenuItem;
flash.display.NativeWindow;
flash.display.Sprite;
flash.events.Event;
flash.filesystem.File;
flash.desktop.NativeApplication;
public class MenuExample extends Sprite
{
private var recentDocuments:Array =
new Array(new File("app-storage:/GreatGatsby.pdf"),
new File("app-storage:/WarAndPeace.pdf"),
new File("app-storage:/Iliad.pdf"));
public function MenuExample()
{
var fileMenu:NativeMenuItem;
var editMenu:NativeMenuItem;
if (NativeWindow.supportsMenu){
stage.nativeWindow.menu = new NativeMenu();
stage.nativeWindow.menu.addEventListener(Event.SELECT, selectCommandMenu);
fileMenu = stage.nativeWindow.menu.addItem(new NativeMenuItem("File"));
fileMenu.submenu = createFileMenu();
editMenu = stage.nativeWindow.menu.addItem(new NativeMenuItem("Edit"));
editMenu.submenu = createEditMenu();
}
if (NativeApplication.supportsMenu){
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 95
Yerel menülerle çalışma
NativeApplication.nativeApplication.menu.addEventListener(Event.SELECT,
selectCommandMenu);
fileMenu = NativeApplication.nativeApplication.menu.addItem(new
NativeMenuItem("File"));
fileMenu.submenu = createFileMenu();
editMenu = NativeApplication.nativeApplication.menu.addItem(new
NativeMenuItem("Edit"));
editMenu.submenu = createEditMenu();
}
}
public function createFileMenu():NativeMenu {
var fileMenu:NativeMenu = new NativeMenu();
fileMenu.addEventListener(Event.SELECT, selectCommandMenu);
var newCommand:NativeMenuItem = fileMenu.addItem(new NativeMenuItem("New"));
newCommand.addEventListener(Event.SELECT, selectCommand);
var saveCommand:NativeMenuItem = fileMenu.addItem(new NativeMenuItem("Save"));
saveCommand.addEventListener(Event.SELECT, selectCommand);
var openRecentMenu:NativeMenuItem =
fileMenu.addItem(new NativeMenuItem("Open Recent"));
openRecentMenu.submenu = new NativeMenu();
openRecentMenu.submenu.addEventListener(Event.DISPLAYING,
updateRecentDocumentMenu);
openRecentMenu.submenu.addEventListener(Event.SELECT, selectCommandMenu);
return fileMenu;
}
public function createEditMenu():NativeMenu {
var editMenu:NativeMenu = new NativeMenu();
editMenu.addEventListener(Event.SELECT, selectCommandMenu);
var copyCommand:NativeMenuItem = editMenu.addItem(new NativeMenuItem("Copy"));
copyCommand.addEventListener(Event.SELECT, selectCommand);
copyCommand.keyEquivalent = "c";
var pasteCommand:NativeMenuItem =
editMenu.addItem(new NativeMenuItem("Paste"));
pasteCommand.addEventListener(Event.SELECT, selectCommand);
pasteCommand.keyEquivalent = "v";
editMenu.addItem(new NativeMenuItem("", true));
var preferencesCommand:NativeMenuItem =
editMenu.addItem(new NativeMenuItem("Preferences"));
preferencesCommand.addEventListener(Event.SELECT, selectCommand);
return editMenu;
}
private function updateRecentDocumentMenu(event:Event):void {
trace("Updating recent document menu.");
var docMenu:NativeMenu = NativeMenu(event.target);
for each (var item:NativeMenuItem in docMenu.items) {
docMenu.removeItem(item);
}
for each (var file:File in recentDocuments) {
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 96
Yerel menülerle çalışma
var menuItem:NativeMenuItem =
docMenu.addItem(new NativeMenuItem(file.name));
menuItem.data = file;
menuItem.addEventListener(Event.SELECT, selectRecentDocument);
}
}
private function selectRecentDocument(event:Event):void {
trace("Selected recent document: " + event.target.data.name);
}
private function selectCommand(event:Event):void {
trace("Selected command: " + event.target.label);
}
private function selectCommandMenu(event:Event):void {
if (event.currentTarget.parent != null) {
var menuItem:NativeMenuItem =
findItemForMenu(NativeMenu(event.currentTarget));
if (menuItem != null) {
trace("Select event for \"" +
event.target.label +
"\" command handled by menu: " +
menuItem.label);
}
} else {
trace("Select event for \"" +
event.target.label +
"\" command handled by root menu.");
}
}
private function findItemForMenu(menu:NativeMenu):NativeMenuItem {
for each (var item:NativeMenuItem in menu.parent.items) {
if (item != null) {
if (item.submenu == menu) {
return item;
}
}
}
return null;
}
}
}
97
Bölüm 13: Görev çubuğu simgeleri
Çoğu işletim sistemi, Mac OS X dock'u gibi uygulamayı temsil edecek bir simge içeren bir görev çubuğu sağlar. Adobe®
AIR® NativeApplication.nativeApplication.icon özelliği aracılığıyla uygulama görev çubuğu simgesiyle
etkileşik kurmak için bir arabirim sağlar.
Görev çubuğu simgeleri hakkında ek çevrimiçi bilgi
Görev çubuklarıyla çalışma hakkında daha fazla bilgiyi şu kaynaklardan bulabilirsiniz:
Hızlı Başlangıçlar (Adobe AIR Geliştirici Bağlantısı)
• Sistem tepsisi ve dock simgelerini kullanma
Dil Başvurusu
• DockIcon
• SystemTrayIcon
Adobe Geliştirici Bağlantısı Makaleleri ve Örnekleri
• Flash için Adobe AIR Geliştirici Bağlantısı (ara: 'AIR görev çubuğu simgeleri')
Görev çubuğu simgeleri hakkında
AIR, NativeApplication.nativeApplication.icon nesnesini otomatik olarak oluşturur. Nesne türü işletim
sistemine bağlı olarak DockIcon veya SystemTrayIcon olur. NativeApplication.supportsDockIcon ve
NativeApplication.supportsSystemTrayIcon özelliklerini kullanarak, AIR'in geçerli işletim sisteminde bu
InteractiveIcon alt sınıflarından hangisini desteklediğini belirleyebilirsiniz. InteractiveIcon temel sınıfı, simge için
kullanılan görüntüyü değiştirmek için kullanabileceğiniz width, height ve bitmaps özelliklerini sağlar. Ancak,
DockIcon veya SystemTrayIcon öğelerine özgü özelliklere yanlış işletim sisteminde erişilmesi, bir çalışma zamanı
hatası oluşturur.
Bir simge için kullanılan görüntüyü ayarlamak veya değiştirmek için, bir veya daha çok görüntü içeren bir dizi
oluşturun ve bu diziyi NativeApplication.nativeApplication.icon.bitmaps özelliğine atayın. Görev çubuğu
simgelerinin boyutu farklı işletim sistemlerinde farklı olabilir. Ölçeklemeye bağlı görüntü bozulmasını önlemek için
bitmaps dizisine görüntülerin birden çok boyutunu ekleyebilirsiniz. Birden çok görüntü sağladığınızda, AIR
gerektiğinde görüntüyü ölçekleyerek görev çubuğu simgesinin geçerli görüntü boyutuna en yakın boyutu seçer.
Aşağıdaki örnek, iki görüntüyü kullanarak görev çubuğu simgesine ilişkin görüntüyü ayarlar:
NativeApplication.nativeApplication.icon.bitmaps =
[bmp16x16.bitmapData, bmp128x128.bitmapData];
Simge görüntüsünü değiştirmek için bitmaps özelliğine yeni görüntüyü veya görüntüleri içeren bir dizi atayın.
Simgeyi, bir enterFrame or timer olayına yanıt olarak görüntüyü değiştirerek hareketlendirebilirsiniz.
Simgeyi Windows ve Linux'ta bildirim alanından kaldırmak veya Mac OS X'te varsayılan simge görünümünü geri
yüklemek için bitmaps öğesini boş bir dizi olarak ayarlayın:
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 98
Görev çubuğu simgeleri
NativeApplication.nativeApplication.icon.bitmaps = [];
Dock simgeleri
AIR, NativeApplication.supportsDockIcontrue olduğunda dock simgelerini destekler.
NativeApplication.nativeApplication.icon özelliği, dock üzerindeki uygulama simgesini temsil eder. (Pencere
dock simgesini değil.)
Not: AIR, Mac OS X altındaki dock üzerinde pencere simgelerini değiştirmeyi desteklemez. Ayrıca, uygulama dock
simgesindeki değişiklikler yalnızca uygulama çalışırken uygulanır — uygulama iptal edildiğinde simge normal
görünümüne geri döner.
Dock simgesi menüleri
Komutlar içeren bir NativeMenu nesnesi oluşturarak ve bu nesneyi
NativeApplication.nativeApplication.icon.menu özelliğine atayarak standart dock menüsüne komutlar
ekleyebilirsiniz. Menüdeki öğeler, standart dock simgesi menü öğelerinin üzerinde görüntülenir.
Dock'u zıplatma
NativeApplication.nativeApplication.icon.bounce() yöntemini çağırarak dock simgesini zıplatabilirsiniz.
bounce() priority parametresini bilgi amaçlı olarak ayarlarsanız, simge bir kez zıplar. Parametreyi kritik olarak
belirlerseniz, simge kullanıcı uygulamayı etkinleştirene kadar zıplar. Priority parametresine ilişkin sabitler
NotificationType sınıfında tanımlanır.
Not: Uygulama zaten etkinse, simge zıplamaz.
Dock simgesi olayları
Dock simgesi tıklatıldığında, NativeApplication nesnesi bir invoke olayı gönderir. Uygulama çalışmıyorsa, sistem
uygulamayı başlatır. Aksi halde, invoke olayı çalışan uygulama örneğine iletilir.
Sistem Tepsisi simgeleri
Şu anda Windows ve çoğu Linux dağıtımlarında olduğu gibi NativeApplication.supportsSystemTrayIcontrue
değerinde olduğunda, AIR sistem tepsisi simgelerini destekler. Windows ve Linux'ta, sistem tepsisi simgeleri görev
çubuğunun bildirim alanında görüntülenir. Simge, varsayılan olarak görüntülenir. Simgeyi görüntülemek için,
simgenin bitmaps özelliğine BitmapData nesneleri içeren bir dizi atayın. Simge görüntüsünü değiştirmek için
bitmaps öğesine yeni görüntüleri içeren bir dizi atayın. Simgeyi kaldırmak için bitmaps öğesini null değerine
ayarlayın.
Sistem tepsisi simge menüleri
Bir NativeMenu nesnesi oluşturup bu nesneyi NativeApplication.nativeApplication.icon.menu özelliğine
atayarak menüye sistem tepsisi simgesi ekleyebilirsiniz. (İşletim sistemi, varsayılan menü sağlamaz.) Sistem tepsisi
simge menülerine simgeyi sağ tıklatarak erişin.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 99
Görev çubuğu simgeleri
Sistem tepsisi simge araç ipuçları
Araç ipucu özelliğini ayarlayarak simgeye araç ipucu ekleyebilirsiniz:
NativeApplication.nativeApplication.icon.tooltip = "Application name";
Sistem tepsisi simge olayları
NativeApplication.nativeApplication.icon özelliği tarafından başvurulan SystemTrayIcon nesnesi, click, mouseDown,
mouseUp, rightClick, rightMouseDown ve rightMouseUp olayları için bir ScreenMouseEvent gönderir. Bu olayları
simge menüsüyle birlikte, görünür pencere olmadığında kullanıcıların uygulamanızla etkileşim kurmasına izin
vermek için kullanabilirsiniz.
Örnek: Pencere içermeyen bir uygulama oluşturma
Aşağıdaki örnek, bir sistem tepsisi simgesi içeren, ancak görünür pencere içermeyen bir AIR uygulaması oluşturur.
Sistem tepsisi simgesi, uygulamadan çıkmak için tek bir komut içeren bir menüye sahiptir.
package
{
import
import
import
import
import
import
import
import
import
import
flash.display.Loader;
flash.display.NativeMenu;
flash.display.NativeMenuItem;
flash.display.NativeWindow;
flash.display.Sprite;
flash.desktop.DockIcon;
flash.desktop.SystemTrayIcon;
flash.events.Event;
flash.net.URLRequest;
flash.desktop.NativeApplication;
public class SysTrayApp extends Sprite
{
public function SysTrayApp():void{
NativeApplication.nativeApplication.autoExit = false;
var icon:Loader = new Loader();
var iconMenu:NativeMenu = new NativeMenu();
var exitCommand:NativeMenuItem = iconMenu.addItem(new NativeMenuItem("Exit"));
exitCommand.addEventListener(Event.SELECT, function(event:Event):void {
NativeApplication.nativeApplication.icon.bitmaps = [];
NativeApplication.nativeApplication.exit();
});
if (NativeApplication.supportsSystemTrayIcon) {
NativeApplication.nativeApplication.autoExit = false;
icon.contentLoaderInfo.addEventListener(Event.COMPLETE, iconLoadComplete);
icon.load(new URLRequest("icons/AIRApp_16.png"));
var systray:SystemTrayIcon =
NativeApplication.nativeApplication.icon as SystemTrayIcon;
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 100
Görev çubuğu simgeleri
systray.tooltip = "AIR application";
systray.menu = iconMenu;
}
if (NativeApplication.supportsDockIcon){
icon.contentLoaderInfo.addEventListener(Event.COMPLETE,iconLoadComplete);
icon.load(new URLRequest("icons/AIRApp_128.png"));
var dock:DockIcon = NativeApplication.nativeApplication.icon as DockIcon;
dock.menu = iconMenu;
}
stage.nativeWindow.close();
}
private function iconLoadComplete(event:Event):void
{
NativeApplication.nativeApplication.icon.bitmaps =
[event.target.content.bitmapData];
}
}
}
Not: Örnek, uygulamanın icons alt dizininde AIRApp_16.png ve AIRApp_128.png adlı görüntü dosyaları olduğunu
varsayar. (Proje klasörünüze kopyalayabileceğiniz örnek simge dosyaları AIR SDK'da mevcuttur.)
Pencere görev çubuğu simge ve düğmeleri
Pencerelerin simgelenmiş temsilleri, kullanıcıların arka plandaki veya simge durumuna küçültülmüş pencerelere
kolayca erişebilmeleri için, genellikle dock veya görev çubuğunun pencere alanında görüntülenir. Mac OS X dock'u,
simge durumuna küçültülen her pencerenin yanı sıra, uygulamanız için de bir simge görüntüler. Microsoft Windows
ve Linux görev çubukları, uygulamanızda yer alan normal türdeki her pencere için program simgesi ve başlığı içeren
bir düğme görüntüler.
Görev çubuğu pencere düğmesini vurgulama
Bir pencere arka planda olduğunda, pencereyle ilişkin ilgilendiği bir olayın gerçekleştiğini kullanıcıya bildirebilirsiniz.
Mac OS X'te, kullanıcıyı uygulama dock simgesini zıplatarak bilgilendirebilirsiniz (“Dock'u zıplatma” sayfa 98
bölümünde açıklandığı gibi). Windows ve Linux'ta, NativeWindow örneğinin notifyUser() yöntemini çağırarak
pencere görev çubuğu düğmesini vurgulayabilirsiniz. Yönteme iletilen type parametresi, bildirimin aciliyetini belirler.
•
NotificationType.CRITICAL: kullanıcı pencereyi ön plana getirene kadar, pencere simgesi yanıp söner.
•
NotificationType.INFORMATIONAL: pencere simgesi renk değiştirerek vurgulanır.
Not: Linux'ta yalnızca bilgilendirici bildirim türü desteklenir. notifyUser() işlevine herhangi bir türdeki değerin
iletilmesi aynı etkiyi yaratacaktır.
Aşağıdaki ifade, bir pencerenin görev çubuğu düğmesini vurgular:
stage.nativeWindow.notifyUser(NotificationType.CRITICAL);
İşletim sisteminde pencere düzeyinde bildirimi desteklemeyenNativeWindow.notifyUser() yönteminin
çağrılması etkisizdir. Pencere bildiriminin desteklenip desteklenmediğini belirlemek için
NativeWindow.supportsNotification özelliğini kullanın.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 101
Görev çubuğu simgeleri
Görev çubuğu düğmeleri veya simgeleri içermeyen pencereler oluşturma
Windows işletim sisteminde, utility veya lightweight türüyle oluşturulan pencereler görev çubuğunda görünmez.
Görünür olmayan pencereler görev çubuğunda da görüntülenmez.
İlk pencerenin normal türünde olması gerektiğinden, görev çubuğunda görünen herhangi bir pencere içermeyen bir
uygulama oluşturmak için ilk pencereyi kapatmalı veya görünmez olarak bırakmalısınız. Uygulamayı iptal etmeden
uygulamanızdaki tüm pencereleri kpatmak için, son pencereyi kapatmadan önce NativeApplication nesnesinin
autoExit özelliğini false olarak ayarlayın. İlk pencerenin görünür olmasını engellemek için, uygulama tanımlayıcı
dosyasının <initalWindow> öğesine <visible>false</visible> özelliğini ekleyin (ve visible özelliğini true
olarak ayarlamayın veya pencerenin activate() yöntemini çağırmayın).
Uygulama tarafından açılan yeni pencerelerde, pencere yapıcısına iletilen NativeWindowInitOption nesnesinin type
özelliğini NativeWindowType.UTILITY veya NativeWindowType.LIGHTWEIGHT olarak ayarlayın.
Mac OS X'te, simge durumuna küçültülen pencereler dock görev çubuğunda görüntülenir. Pencereyi simge durumuna
küçültmek yerine gizlediğinizde, küçültülen simgenin görüntülenmesini engelleyebilirsiniz. Aşağıdaki örnek bir
nativeWindowDisplayState değişiklik olayını dinler ve pencere simge durumuna küçültüldüğünde bu olayı iptal
eder. Bunun yerine işleyici, pencerenin visible özelliğini false olarak ayarlar:
private function preventMinimize(event:NativeWindowDisplayStateEvent):void{
if(event.afterDisplayState == NativeWindowDisplayState.MINIMIZED){
event.preventDefault();
event.target.visible = false;
}
}
Mac OS X dock'unda bir pencere simge durumuna küçültülmüşse, visible özelliğini false olarak ayarladığınızda
dock simgesi kaldırılmaz. Kullanıcı yine de, pencerenin yeniden görünmesi için simgeyi tıklatabilir.
102
Bölüm 14: Dosya sistemiyle çalışma
Ana bilgisayarın dosya sistemine erişmek için, Adobe® AIR™ dosya sistemi API'si tarafından sağlanan sınıfları
kullanırsınız. Bu sınıfları kullanarak dizinlere ve dosyalara erişebilir ve bunları yönetebilir, oluşturabilir, dosyalara veri
yazabilir, vb. işlemler gerçekleştirebilirsiniz.
AIR Dosya API'si hakkında ek çevrimiçi bilgiler
Dosya API sınıflarını kullanma hakkında daha fazla bilgiye şu kaynaklardan ulaşabilirsiniz:
Hızlı Başlangıçlar (Adobe AIR Geliştirici Bağlantısı)
• Metin dosyası düzenleyicisi oluşturma
Dil Başvurusu
• File
• FileStream
• FileMode
Adobe Geliştirici Bağlantısı Makaleler ve Örnekler
• Flash için Adobe AIR Geliştirici Bağlantısı ('AIR filesystem'ı arayın)
AIR dosyası temel bilgileri
Adobe AIR hem dosyalara hem de klasörlere erişmek, bunları oluşturmak ve yönetmek için kullanabileceğiniz sınıflar
sağlar. flash.filesystem paketinde bulunan bu sınıflar şu şekilde kullanılır:
Dosya sınıfları
Açıklama
File
File nesnesi bir dosya veya dizin yolunu temsil eder. Bir file nesnesini, dosya veya klasörle etkileşim
başlatan bir dosyaya veya klasöre işaretçi oluşturmak için kullanırsınız.
FileMode
FileMode sınıfı, FileStream sınıfının open() ve openAsync() yöntemlerinin fileMode parametresinde
kullanılan dize sabitlerini tanımlar. Bu yöntemlerin fileMode parametresi, dosya açıldıktan sonra
FileStream nesnesi tarafından kullanılabilen, aralarında yazma, okuma, ekleme ve güncelleme bulunan
özellikleri belirler.
FileStream
FileStream nesnesi dosyaları okuma ve yazma için açmada kullanılır. Yeni veya var olan bir dosyaya işaret
eden bir File nesnesi oluşturduktan sonra o işaretçiyi FileStream nesnesine iletirsiniz, böylece dosyanın
içindeki verileri açıp işleyebilirsiniz.
File sınıfındaki bazı yöntemlerin hem senkronize hem de senkronize olmayan sürümleri vardır:
•
File.copyTo() veFile.copyToAsync()
•
File.deleteDirectory() ve File.deleteDirectoryAsync()
•
File.deleteFile() ve File.deleteFileAsync()
•
File.getDirectoryListing() ve File.getDirectoryListingAsync()
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 103
Dosya sistemiyle çalışma
•
File.moveTo() ve File.moveToAsync()
•
File.moveToTrash() ve File.moveToTrashAsync()
Ayrıca FileStream işlemlerinin senkronize veya senkronize olmayan şekilde çalışmasını FileStream nesnesinin dosyayı
açma şekli belirler: open() yöntemini çağırarak veya openAsync() yöntemini çağırarak.
Senkronize olmayan sürümler arka planda çalışan işlemleri başlatmanızı ve tamamlandığında (veya hata olayı
oluştuğunda) olayları göndermenizi sağlar. Bu senkronize olmayan işlemler arka planda sürerken, başka kod
çalışabilir. İşlemlerin senkronize olmayan sürümleriyle, işlevi çağıran File veya FileStream nesnesinin
addEventListener() yöntemini kullanarak olay dinleyicisi işlevleri oluşturmalısınız.
Senkronize sürümler sayesinde, olay dinleyicileri ayarlamaya dayanmayan daha basit kod yazabilirsiniz. Ancak,
senkronize bir yöntem çalışırken başka kod çalışamadığı için, görüntüleme nesnesi oluşturma ve animasyon gibi
önemli işlemler duraklatılabilir.
File nesneleriyle çalışma
File nesnesi dosya sistemindeki bir dosyaya veya dizine işaretçidir.
File sınıfı FileReference sınıfını genişletir. AIR'in yanı sıra Adobe® Flash® Player'da da mevcut olan FileReference sınıfı
bir dosyaya işaretçiyi temsil eder, ancak File sınıfı güvenlik nedenleriyle Flash Player'da açık olmayan özellikleri ve
yöntemleri ekler (tarayıcıda çalışan bir SWF dosyasında).
File sınıfı hakkında
File sınıfını aşağıdaki işlemler için kullanabilirsiniz:
• Kullanıcı dizini, kullanıcının documents dizini, uygulamanın başlatıldığı dizin ve uygulama dizini de dahil olmak
üzere özel dizinlerin yolunu alma
• Dosyaları ve dizinleri kopyalama
• Dosyaları ve dizinleri taşıma
• Dosyaları ve dizinleri silme (veya çöp kutusuna taşıma)
• Bir dizinde bulunan dosyaları ve dizinleri listeleme
• Geçici dosyalar ve klasörler oluşturma
Bir File nesnesi dosya yoluna işaret ettikten sonra, FileStream sınıfını kullanarak dosya verilerini okumak ve yazmak
için dosya yolunu kullanabilirsiniz.
File nesnesi henüz var olmayan bir dosyanın veya dizinin yoluna işaret edebilir. Böyle bir File nesnesini dosya veya
dizin oluştururken kullanabilirsiniz.
File nesnelerinin Yolları
Her File nesnesi, yolunu tanımlayan iki özelliğe sahiptir:
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 104
Dosya sistemiyle çalışma
Özellik
Açıklama
nativePath
Bir dosyanın platforma özgü yolunu belirtir. Örneğin Windows'ta bir yol "c:\Sample directory\test.txt"
olurken Mac OS'de "/Sample directory/test.txt" olabilir. nativePath özelliği, Windows'ta dizin ayırıcı
karakteri olarak ters eğik çizgi (\) karakterini ve Mac OS ile Linux'ta eğik çizgi (/) karakterini kullanır.
url
Bir dosyaya işaret etmek için, dosya URL şemasını kullanabilir. Örneğin Windows'ta bir yol
"file:///c:/Sample%20directory/test.txt" olurken Mac OS'de "file:///Sample%20directory/test.txt"
olabilir. Çalışma zamanı file öğesinin yanında başka özel URL şemaları da içerir ve bunlar
“Desteklenen URL şemaları” sayfa 108 bölümünde anlatılmaktadır
File sınıfı, Mac OS, Windows ve Linux'ta standart dizinlere işaret etmek üzere özellikler içerir.
File nesnesini bir dizine işaret etme
Bir File nesnesini bir dizine işaret etmesi için ayarlamanın farklı yolları vardır.
Kullanıcının ana dizinine işaret etme
Bir File nesnesini kullanıcının ana dizinine yönlendirebilirsiniz. Windows'ta ana dizin "Belgelerim" dizininin üst
öğesidir (örneğin "C:\Documents and Settings\userName\Belgelerim"). Mac OS'de bu Users/userName dizinidir. Bu,
Linux'ta /home/userName dizinidir. Aşağıdaki kod bir File nesnesini ana dizinin AIR Test alt dizinine işaret etmesi
için ayarlar:
var file:File = File.userDirectory.resolvePath("AIR Test");
Kullanıcının documents dizinine işaret etme
Bir File nesnesini kullanıcının documents dizinine yönlendirebilirsiniz. Windows'ta varsayılan konum "Belgelerim
dizinidir (örneğin, "C:\Documents and Settings\userName\My Documents"). Mac OS'de varsayılan dizin
Users/userName/Documents dizinidir. Linux'ta varsayılan dizin /home/userName/Documents dizinidir. Aşağıdaki
kod bir File nesnesini documents dizininin AIR Test alt dizinine işaret etmesi için ayarlar:
var file:File = File.documentsDirectory.resolvePath("AIR Test");
Masaüstü dizinine işaret etme
Bir File nesnesini masaüstüne işaret edebilirsiniz. Aşağıdaki kod bir File nesnesini masaüstünün AIR Test alt dizinine
işaret etmesi için ayarlar:
var file:File = File.desktopDirectory.resolvePath("AIR Test");
Uygulama depolama dizinine işaret etme
Bir File nesnesini uygulama depolama dizinine işaret edebilirsiniz. Her AIR uygulaması için, uygulama depolama
dizinini tanımlayan ilişkilendirilmiş, benzersiz bir yol vardır. Bu dizin her uygulama ve kullanıcı için benzersizdir. Bu
dizini kullanıcıya özgü, uygulamaya özgü verileri saklamak için kullanmak isteyebilirsiniz (kullanıcı verileri ve
tercihler dosyaları gibi). Örneğin aşağıdaki kod bir File nesnesini uygulama depolama dizininde bulunan bir tercihler
dosyası olan prefs.xml dosyasına işaret eder:
var file:File = File.applicationStorageDirectory;
file = file.resolvePath("prefs.xml";
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 105
Dosya sistemiyle çalışma
Uygulama depolama dizininin konumu kullanıcı adına, uygulama kimliğine ve yayıncı kimliğine bağlıdır:
• Mac OS'de—:
/Users/kullanıcı adı/Library/Preferences/applicationID.publisherID/Local Store/
Örneğin:
/Users/babbage/Library/Preferences/com.example.TestApp.02D88EEED35F84C264A183921344EEA353
A629FD.1/Local Store
• Windows'ta—Belgeler ve Ayarlar dizininde:
kullanıcı adı/Application Data/applicationID.publisherID/Local Store/
Örneğin:
C:\Documents and Settings\babbage\Application
Data\com.example.TestApp.02D88EEED35F84C264A183921344EEA353A629FD.1\Local Store
• Linux'ta:
/home/kullanıcı adı/.appdata/applicationID.publisherID/Local Store/
Örneğin:
/home/babbage/.appdata/com.example.TestApp.02D88EEED35F84C264A183921344EEA353A629FD.1/Loc
al Store
File.applicationStorageDirectory ile oluşturulan bir File nesnesinin URL'si (ve url özelliği), aşağıda
gösterildiği gibi app-storage URL şemasını kullanır (bkz. “Desteklenen URL şemaları” sayfa 108):
var dir:File = File.applicationStorageDirectory;
dir = dir.resolvePath("preferences");
trace(dir.url); // app-storage:/preferences
Uygulama dizinine işaret etme
Bir File nesnesini uygulamanın yüklendiği, uygulama dizini olarak bilinen dizine işaret edebilirsiniz. Bu dizine
File.applicationDirectory özelliğini kullanarak başvurabilirsiniz. Bu dizini uygulama tanımlayıcı dosyasını veya
uygulamayla yüklenen başka kaynakları incelemek için kullanabilirsiniz. Örneğin aşağıdaki kod bir File nesnesini
uygulama dizinindeki images adlı bir dizine işaret eder:
var dir:File = File.applicationDirectory;
dir = dir.resolvePath("images");
File.applicationDirectory ile oluşturulan bir File nesnesinin URL'si (ve url özelliği), aşağıda gösterildiği gibi app
URL şemasını kullanır (bkz. “Desteklenen URL şemaları” sayfa 108):
var dir:File = File.applicationDirectory;
dir = dir.resolvePath("images");
trace(dir.url); // app:/images
Dosya sistemi köküne işaret etme
File.getRootDirectories() yöntemi bir Windows bilgisayarındaki C: ve bağlanmış birimler gibi tüm kök
birimleri listeler. Bu yöntem, Mac OS ve Linux'ta her zaman bilgisayar için benzersiz bir kök dizin ("/" dizini)
döndürür.
Açık bir dizine işaret etme
Aşağıdaki örnekte olduğu gibi, File nesnesinin nativePath özelliğini ayarlayarak File nesnesini açık bir dizine işaret
edebilirsiniz (Windows'ta):
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 106
Dosya sistemiyle çalışma
var file:File = new File();
file.nativePath = "C:\\AIR Test\";
Göreceli yollara gitme
Belirli bir yola göreceli olan bir yol edinmek için resolvePath() yöntemini kullanabilirsiniz. Aşağıdaki kod bir File
nesnesini kullanıcının ana dizininin "AIR Test" alt dizinine işaret etmesi için ayarlar:
var file:File = File.userDirectory;
file = file.resolvePath("AIR Test");
Ayrıca, aşağıda gösterildiği gibi File nesnesini URL dizesine bağlı bir dizine işaret etmek için de nesnenin url özelliğini
kullanabilirsiniz:
var urlStr:String = "file:///C:/AIR Test/";
var file:File = new File()
file.url = urlStr;
Daha fazla bilgi için bkz. “Dosya yollarını değiştirme” sayfa 108.
Kullanıcının bir dizin seçmek için gözatmasını sağlama
File sınıfı, kullanıcının nesneye atamak için bir dizin seçebileceği sistem iletişim kutusu sağlayan
browseForDirectory() yöntemini içerir. browseForDirectory() yöntemi senkronize değildir. Kullanıcı bir dizin
seçip Aç düğmesini tıklatırsa bir select olayı veya kullanıcı İptal düğmesini tıklatırsa bir cancel olayı gönderir.
Örneğin aşağıdaki kod kullanıcının bir dizin seçmesine olanak tanır ve seçilirse dizin yolunu çıkarır:
var file:File = new File();
file.addEventListener(Event.SELECT, dirSelected);
file.browseForDirectory("Select a directory");
function dirSelected(e:Event):void {
trace(file.nativePath);
}
Uygulamanın çağrıldığı dizine işaret etme
Uygulama çağrıldığında gönderilen InvokeEvent nesnesinin currentDirectory özelliğini işaretleyerek bir
uygulamanın çağrıldığı dizin konumunu alabilirsiniz. Ayrıntılar için bkz. “Komut satırı argümanlarını yakalama”
sayfa 279.
File nesnesini bir dosyaya işaret etme
Bir File nesnesinin işaret ettiği dosyayı ayarlamanın farklı yolları vardır.
Açık dosya yoluna işaret etme
Belirli bir yola göreceli olan bir yol edinmek için resolvePath() yöntemini kullanabilirsiniz. Örneğin aşağıdaki kod
bir File nesnesini uygulama depolama dizininin içindeki bir log.txt dosyasına işaret etmek üzere ayarlar:
var file:File = File.applicationStorageDirectory;
file = file.resolvePath("log.txt");
Aşağıda gösterildiği gibi File nesnesini URL dizesine bağlı bir dosyaya veya dizine işaret etmek için de nesnenin url
özelliğini kullanabilirsiniz:
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 107
Dosya sistemiyle çalışma
var urlStr:String = "file:///C:/AIR Test/test.txt";
var file:File = new File()
file.url = urlStr;
Ayrıca URL'yi aşağıda olduğu gibi File() yapıcı işlevine de iletebilirsiniz:
var urlStr:String = "file:///C:/AIR Test/test.txt";
var file:File = new File(urlStr);
url özelliği her zaman URL'nin URI kodlu sürümünü döndürür (örneğin boşluklar "%20 ile değiştirilir):
file.url = "file:///c:/AIR Test";
trace(file.url); // file:///c:/AIR%20Test
Ayrıca açık bir yol ayarlamak için File nesnesinin nativePath özelliğini de kullanabilirsiniz. Örneğin aşağıdaki kod
Windows yüklü bir bilgisayarda çalıştırıldığında, File nesnesini, C: sürücüsünün AIR Test alt dizinindeki test.txt
dosyasına ayarlar:
var file:File = new File();
file.nativePath = "C:/AIR Test/test.txt";
Ayrıca bu yolu aşağıda olduğu gibi File() yapıcı işlevine de iletebilirsiniz:
var file:File = new File("C:/AIR Test/test.txt");
Windows'ta eğik çizgi (/) veya ters eğik çizgi (\) karakterini nativePath özelliği için yol sınırlayıcı olarak
kullanabilirsiniz. Mac OS ve Linux'ta, nativePath için yol sınırlayıcı olarak eğik çizgi (/) karakterini kullanın:
var file:File = new File(/Users/dijkstra/AIR Test/test.txt");
Daha fazla bilgi için bkz. “Dosya yollarını değiştirme” sayfa 108.
Bir dizindeki dosyaları numaralandırma
Bir dizinin kök düzeyinde dosyalara ve alt dizinlere işaret eden File nesnelerinin bir dizisini almak için File nesnesinin
getDirectoryListing() yöntemini kullanabilirsiniz. Daha fazla bilgi için bkz. “Dizinleri numaralandırma”
sayfa 113.
Kullanıcının bir dosya seçmek için gözatmasını sağlama
File sınıfı, kullanıcının nesneye atamak için bir dosya seçebileceği sistem iletişim kutusu sağlayan aşağıdaki yöntemleri
içerir.
•
browseForOpen()
•
browseForSave()
•
browseForOpenMultiple()
Bu yöntemlerin tümü senkronize olmayan yöntemlerdir. Kullanıcı bir dosya seçtiğinde (veya browseForSave()
durumunda hedef yol) browseForOpen() ve browseForSave() yöntemleri select olayını gönderir.
browseForOpen() ve browseForSave() yöntemleriyle, seçimden sonra hedef File nesnesi seçili dosyalara işaret eder.
Kullanıcı dosyaları seçtiğinde, browseForOpenMultiple() yöntemi bir selectMultiple olayı gönderir.
selectMultiple olayı, File nesneleri dizisi olan bir files özelliğine sahip olan (seçili dosyalara işaret eden)
FileListEvent türüdür.
Örneğin aşağıdaki kod kullanıcıya, kullanıcının bir dosya seçebileceği “Aç” iletişim kutusunu sunar:
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 108
Dosya sistemiyle çalışma
var fileToOpen:File = File.documentsDirectory;
selectTextFile(fileToOpen);
function selectTextFile(root:File):void
{
var txtFilter:FileFilter = new FileFilter("Text", "*.as;*.css;*.html;*.txt;*.xml");
root.browseForOpen("Open", [txtFilter]);
root.addEventListener(Event.SELECT, fileSelected);
}
function fileSelected(event:Event):void
{
trace(fileToOpen.nativePath);
}
Bir browse yöntemini çağırdığınızda uygulamada başka bir tarayıcı iletişim kutusu açıksa, çalışma zamanı bir Hata
istisnası atar.
Dosya yollarını değiştirme
Ayrıca aşağıdaki örneklerde olduğu gibi, var olan bir File nesnesinin yolunu resolvePath() yöntemini çağırarak veya
nesnenin nativePath ya da url özelliğini değiştirerek de değiştirebilirsiniz:
var file1:File = File.documentsDirectory;
file1 = file1.resolvePath("AIR Test");
trace(file1.nativePath); // C:\Documents and Settings\userName\My Documents\AIR Test
var file2:File = File.documentsDirectory;
file2 = file2.resolvePath("..");
trace(file2.nativePath); // C:\Documents and Settings\userName
var file3:File = File.documentsDirectory;
file3.nativePath += "/subdirectory";
trace(file3.nativePath); // C:\Documents and Settings\userName\My Documents\subdirectory
var file4:File = new File();
file4.url = "file:///c:/AIR Test/test.txt";
trace(file4.nativePath); // C:\AIR Test\test.txt
nativePath özelliğini kullanırken, Windows'ta dizin ayırıcı karakteri olarak eğik çizgi (/) veya ters eğik çizgi (\)
karakterini kullanın; Mac OS ve Linux'ta eğik çizgi (/) karakterini kullanın. Windows'ta bir dize değişmezinde eğik
çizgi karakterini iki kere yazmayı unutmayın.
Desteklenen URL şemaları
Bir File nesnesinin url özelliğini tanımlarken, aşağıdaki URL şemalarından herhangi birini kullanabilirsiniz:
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 109
Dosya sistemiyle çalışma
URL şeması
Açıklama
file
Dosya sisteminin köküne göreceli olan bir yol belirtmek için kullanın. Örneğin:
file:///c:/AIR Test/test.txt
URL standardı bir dosya URL'sinin file://<host>/<path> formunu alacağını belirtir. Özel bir durum
olarak <host>, "URL'nin yorumlandığı bilgisayar" olarak yorumlanan boş dize olabilir. Bu nedenle dosya
URL'leri genellikle üç eğik çizgiye (///) sahiptir.
app
Yüklü uygulamanın kök dizinine göreceli bir yol belirtmek için kullanın (yüklü uygulama için
application.xml dosyasını içeren dizin). Örneğin aşağıdaki yol, yüklü uygulamanın dizininin görüntüler alt
dizinine işaret eder:
app:/images
app-storage
Uygulama depolama dizinine göreceli bir yol belirtmek için kullanın. AIR her yüklenen uygulama için, o
uygulamaya özgü verilerin saklanmasına yönelik kullanışlı bir yer olan benzersiz bir uygulama depolama
dizini tanımlar. Örneğin aşağıdaki yol, uygulama depolama dizininin ayarlar alt dizininde bulunan bir
prefs.xml dosyasını işaret eder:
app-storage:/settings/prefs.xml
İki dosya arasındaki göreceli yolu bulma
İki dosya arasındaki göreceli yolu bulmak için getRelativePath() yöntemini kullanabilirsiniz:
var file1:File = File.documentsDirectory.resolvePath("AIR Test");
var file2:File = File.documentsDirectory
file2 = file2.resolvePath("AIR Test/bob/test.txt");
trace(file1.getRelativePath(file2)); // bob/test.txt
getRelativePath() yönteminin ikinci parametresi olan useDotDot parametresi, .. sözdiziminin üst dizinleri
göstermek için sonuçlarda döndürülmesine izin verir:
var file1:File = File.documentsDirectory;
file1 = file1.resolvePath("AIR Test");
var file2:File = File.documentsDirectory;
file2 = file2.resolvePath("AIR Test/bob/test.txt");
var file3:File = File.documentsDirectory;
file3 = file3.resolvePath("AIR Test/susan/test.txt");
trace(file2.getRelativePath(file1, true)); // ../..
trace(file3.getRelativePath(file2, true)); // ../../bob/test.txt
Dosya adlarının kurallı sürümlerini alma
Windows ve Mac OS'de dosya ve yol adları büyük/küçük harfe duyarlı değildir. Aşağıdaki örnekte iki File nesnesi aynı
dosyaya işaret etmektedir:
File.documentsDirectory.resolvePath("test.txt");
File.documentsDirectory.resolvePath("TeSt.TxT");
Ancak belgeler ve dizin adları büyük harf içerir. Örneğin aşağıda, aşağıdaki örneklerde olduğu gibi documents
dizininde AIR Test adlı bir klasör olduğunu varsayılmıştır:
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 110
Dosya sistemiyle çalışma
var file:File = File.documentsDirectory.resolvePath("AIR test");
trace(file.nativePath); // ... AIR test
file.canonicalize();
trace(file.nativePath); // ... AIR Test
canonicalize() yöntemi, dosya veya dizin adı için büyük/küçük harfle yazımı doğru biçimde kullanmak üzere
nativePath nesnesini dönüştürür. Büyük/küçük harfe duyarlı dosya sistemlerinde (Linux gibi), yalnızca
büyük/küçük harfle yazım açısından farklı olan adlara sahip birden çok dosya bulunuyorsa, canonicalize()
yöntemi, bulunan ilk dosyayla eşleşecek biçimde yolu ayarlar (dosya sistemi tarafından belirlenen düzende).
Aşağıdaki örneklerde gösterildiği gibi Windows'ta kısa dosya adlarını ("8.3" adlar) uzun dosya adlarına dönüştürmek
için canonicalize() yöntemini de kullanabilirsiniz:
var path:File = new File();
path.nativePath = "C:\\AIR~1";
path.canonicalize();
trace(path.nativePath); // C:\AIR Test
Paketlerle ve sembolik linklerle çalışma
Birçok işletim sistemi paket dosyalarını ve sembolik link dosyalarını destekler:
Paketler—Mac OS'de, dizinler paketler olarak belirlenebilir ve Mac OS Finder'da dizin olarak değil, tek bir dosya
olarak görünebilir.
Sembolik linkler—Mac OS, Linux ve Windows Vista, sembolik linkleri destekler. Sembolik linkler bir dosyanın
diskteki başka bir dosyaya veya dizine işaret etmesini sağlar. Sembolik linkler başka adlara benzer olsa da, aynı değildir.
Başka ad her zaman bir dosya olarak bildirilir (dizin olarak değil) ve başka ada veya kısayola okuma ya da yazma işlemi
hiçbir zaman işaret ettiği orijinal dosyayı veya dizini etkilemez. Diğer yandan sembolik link tam olarak işaret ettiği
dosya veya dizin gibi davranır. Bir dosya veya dizin olarak bildirilebilir ve sembolik linke okuma veya yazma işlemi
sembolik linkin kendisini değil, işaret ettiği dosyayı veya dizini etkiler. Ayrıca, Windows'ta birleşim noktasını (NTFS
dosya sisteminde kullanılan) referans alan bir File nesnesine ilişkin isSymbolicLink özelliği true olarak ayarlanır.
File sınıfı, bir File nesnesinin bir pakete veya sembolik linke başvurup başvurmadığını kontrol etmek için isPackage
ve isSymbolicLink özelliklerini içerir.
Aşağıdaki kod kullanıcının masaüstü dizini üzerinden, paket olmayan alt dizinleri listeleyerek yinelenir:
var desktopNodes:File = File.desktopDirectory.getDirectoryListing();
for (var i:uint = 0; i < desktopNodes.length; i++)
{
if (desktopNodes[i].isDirectory && !!desktopNodes[i].isPackage)
{
trace(desktopNodes[i].name);
}
}
Aşağıdaki kod kullanıcının masaüstü dizini üzerinden, sembolik linkler olmayan dosyaları ve dizinleri listeleyerek
yinelenir:
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 111
Dosya sistemiyle çalışma
var desktopNodes:File = File.desktopDirectory.getDirectoryListing();
for (var i:uint = 0; i < desktopNodes.length; i++)
{
if (!desktopNodes[i].isSymbolicLink)
{
trace(desktopNodes[i].name);
}
}
canonicalize() yöntemi, linkin başvurduğu dosyaya veya dizine işaret etmek için sembolik bir linkin yolunu
değiştirir. Aşağıdaki kod kullanıcının masaüstü dizini üzerinden yinelenir ve sembolik linkler olan dosyalar tarafından
başvurulan yolları bildirir:
var desktopNodes:File = File.desktopDirectory.getDirectoryListing();
for (var i:uint = 0; i < desktopNodes.length; i++)
{
if (desktopNodes[i].isSymbolicLink)
{
var linkNode:File = desktopNodes[i] as File;
linkNode.canonicalize();
trace(linkNode.nativePath);
}
}
Bir birimdeki kullanılabilir alanı belirleme
Bir File nesnesinin spaceAvailable özelliği, Dosya konumunda bayt olarak kullanılabilir olan alandır. Örneğin
aşağıdaki kod uygulama depolama dizininde kullanılabilir olan alanı kontrol eder:
trace(File.applicationStorageDirectory.spaceAvailable);
File nesnesi bir dizine başvurursa, spaceAvailable özelliği, dizinde dosyaların kullanabileceği alanı gösterir. File
nesnesi bir dosyaya başvurursa, spaceAvailable özelliği dosyanın büyütülebileceği alanı gösterir. Dosya konumu
yoksa, spaceAvailable özelliği 0'a ayarlanır. File nesnesi sembolik bir linke başvurursa, spaceAvailable özelliği
sembolik linkin işaret ettiği konumdaki kullanılabilir alana ayarlanır.
Genellikle bir dizin veya dosya için kullanılabilir olan alan, dizini veya dosyayı içeren birimdeki kullanılabilir alanla
aynıdır. Ancak kullanılabilir alan, kotaları ve dizin başına sınırlamaları hesaba katabilir.
Bir dosyayı veya dizini bir birime eklemek genellikle dosyanın gerçek boyutundan veya dizin içeriğinin boyutundan
daha fazla alan gerektirir. Örneğin işletim sistemi dizin bilgilerini saklamak için daha fazla alan gerektirebilir. Veya
gerekli disk kesimleri ek alan kullanabilir. Ayrıca kullanılabilir alanlar dinamik olarak değişir. Dolayısıyla bildirilen
alanın tamamını dosya depolama için ayıramazsınız. Dosya sistemine yazma hakkında bilgi için bkz. “Dosyaları
okuma ve dosyalara yazma” sayfa 116.
Dosya sistemi bilgilerini alma
File sınıfı, dosya sistemi hakkında bazı yararlı bilgiler sağlayan aşağıdaki statik özellikleri içerir:
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 112
Dosya sistemiyle çalışma
Özellik
Açıklama
File.lineEnding
Ana bilgisayar işletim sistemi tarafından kullanılan satır sonlandırıcı karakter dizisi. Bu, Mac OS ve
Linux'ta satır besleme karakteridir. Bu, Windows'ta arkasından satır besleme karakteri gelen satır başı
karakteridir.
File.separator
Ana bilgisayar işletim sisteminin yol bileşeni ayırıcı karakteri. Bu, Mac OS ve Linux'ta eğik çizgi (/)
karakteridir. Bu, Windows'ta ters eğik çizgi (\) karakteridir.
File.systemCharset
Ana bilgisayar işletim sistemi tarafından dosyalar için kullanılan varsayılan kodlama. Bu, işletim
sistemi tarafından kullanılan diline karşılık gelen karakter kümesiyle de ilgilidir.
Capabilities sınıfı da dosyalarla çalışırken yararlı olabilecek sistem bilgileri içerir:
Özellik
Açıklama
Capabilities.hasIME
Oynatıcının bir giriş yöntemi düzenleyicisi (IME) yüklü (true) bir sistem üzerinde mi, yüklü olmayan
(false) bir sistem üzerinde mi çalıştığını belirtir.
Capabilities.language
Oynatıcının üzerinde çalıştığı sistemin dil kodunu belirtir.
Capabilities.os
Geçerli işletim sistemini belirtir.
Dizinlerle çalışma
Çalışma zamanı size yerel dosya sistemindeki dizinlerle çalışmaya yönelik özellikler sağlar.
Dizinlere işaret eden File nesneleri oluşturma hakkında bilgi için bkz. “File nesnesini bir dizine işaret etme” sayfa 104.
Dizin oluşturma
File.createDirectory() yöntemi bir dizin oluşturmanızı sağlar. Örneğin aşağıdaki kod, kullanıcının ana dizininin
alt dizini olarak AIR Test adlı bir dosya oluşturur.
var dir:File = File.userDirectory.resolvePath("AIR Test");
dir.createDirectory();
Dizin varsa, createDirectory() yöntemi bir işlem gerçekleştirmez.
Ayrıca bazı modlarda FileStream nesnesi dosyaları açarken dizin oluşturur. Bir FileStream örneğini
FileMode.APPEND veya FileMode.WRITE olarak ayarlı FileStream() yapıcı kümesinin fileMode parametresiyle
başlattığınızda, eksik dizinler oluşturulur. Daha fazla bilgi için bkz. “Dosyaları okuma ve dosyalara yazma için iş akışı”
sayfa 117.
Geçici bir dizin oluşturma
File sınıfı, aşağıdaki örnekte olduğu gibi Sistem için geçici bir dizin klasöründe bir dizin oluşturan
createTempDirectory() yöntemini içerir.
var temp:File = File.createTempDirectory();
createTempDirectory() yöntemi otomatik olarak benzersiz bir geçici dizin oluşturur. (Yeni bir benzersiz konum
belirlemekle uğraşmamış olursunuz.)
Geçici bir dizini, bir uygulama oturumu için kullanılan geçici dosyaları saklamak için kullanabilirsiniz. Sistem geçici
dizininde yeni, benzersiz geçici dosyalar oluşturmak için bir createTempFile() yöntemi bulunduğunu unutmayın.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 113
Dosya sistemiyle çalışma
Otomatik olarak silinmediği için, uygulamayı kapamadan önce geçici dizini silmek isteyebilirsiniz.
Dizinleri numaralandırma
Bir dizindeki dosyalara ve alt klasörlere işaret eden bir File nesneleri dizisini almak için, File nesnesinin
getDirectoryListing() veya getDirectoryListingAsync() yöntemini kullanabilirsiniz.
Örneğin aşağıdaki kod kullanıcının documents dizininin (alt dizinleri incelemeden) içeriğini listeler.
var directory:File = File.documentsDirectory;
var contents:Array = directory.getDirectoryListing();
for (var i:uint = 0; i < contents.length; i++)
{
trace(contents[i].name, contents[i].size);
}
Yöntemin senkronize olmayan sürümünü kullanırken, directoryListing olay nesnesi, dizinlerle ilgili File
nesnelerinin dizisi olan bir files özelliğine sahiptir:
var directory:File = File.documentsDirectory;
directory.getDirectoryListingAsync();
directory.addEventListener(FileListEvent.DIRECTORY_LISTING, dirListHandler);
function dirListHandler(event:FileListEvent):void
{
var contents:Array = event.files;
for (var i:uint = 0; i < contents.length; i++)
{
trace(contents[i].name, contents[i].size);
}
}
Dizinleri kopyalama ve taşıma
Bir dizini, bir dosyayı kopyalamak veya taşımak için kullanacağınız yöntemlerin aynılarını kullanarak kopyalayabilir
veya taşıyabilirsiniz. Örneğin aşağıdaki kod bir dizini senkronize olarak kopyalar:
var sourceDir:File = File.documentsDirectory.resolvePath("AIR Test");
var resultDir:File = File.documentsDirectory.resolvePath("AIR Test Copy");
sourceDir.copyTo(resultDir);
copyTo() yönteminin overwrite parametresi için true değerini belirttiğinizde, mevcut bir hedef dizindeki tüm
dosyalar ve klasörler silinir ve yerine kaynak dizindeki dosyalar ve klasörler konur (hedef dosya kaynak dizinde olmasa
bile).
copyTo() yönteminin newLocation parametresi olarak belirttiğiniz dizin, sonuçta oluşan dizinin yolunu belirtir;
sonuçta oluşan dizini içerecek olan üst dizini belirtmez.
Ayrıntılar için bkz. “Dosyaları kopyalama ve taşıma” sayfa 115.
Dizin içeriğini silme
File sınıfı bir deleteDirectory() ve bir deleteDirectoryAsync() yöntemi içerir. İlki senkronize, ikincisi
senkronize olmayan bir şekilde çalışan bu yöntemler dizinleri siler (bkz. “AIR dosyası temel bilgileri” sayfa 102). Her
iki yöntem de deleteDirectoryContents parametresini içerir (Boolean değeri alır); bu parametre true olarak
ayarlıyken (varsayılan değer false değeridir) yönteme yapılan çağrı boş olmayan dizinleri siler; aksi takdirde yalnızca
boş dizinler silinir.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 114
Dosya sistemiyle çalışma
Örneğin aşağıdaki kod kullanıcının documents dizininin AIR Test alt dizinini senkronize olarak siler:
var directory:File = File.documentsDirectory.resolvePath("AIR Test");
directory.deleteDirectory(true);
Aşağıdaki kod kullanıcının documents dizininin AIR Test alt dizinini senkronize olmayan bir şekilde siler:
var directory:File = File.documentsDirectory.resolvePath("AIR Test");
directory.addEventListener(Event.COMPLETE, completeHandler)
directory.deleteDirectoryAsync(true);
function completeHandler(event:Event):void {
trace("Deleted.")
}
Ayrıca, bir dizini Sistem çöp kutusuna taşımak için kullanabileceğiniz moveToTrash() ve moveToTrashAsync()
yöntemleri de bulunmaktadır. Ayrıntılar için bkz. “Bir dosyayı çöp kutusuna taşıma” sayfa 116.
Dosyalarla çalışma
AIR dosya API'sini kullanarak uygulamalarınıza temel dosya etkileşim özellikleri ekleyebilirsiniz. Örneğin dosyaları
okuyabilir, yazabilir, kopyalayabilir ve silebilir, vb. işlemler gerçekleştirebilirsiniz. Uygulamalarınız yerel dosya
sistemine erişebileceği için, önceden yapmadıysanız “AIR güvenliği” sayfa 23 bölümüne bakın.
Not: Bir dosya türünü AIR uygulamasıyla ilişkilendirebilirsiniz. (Böylece uygulama çift tıklatılarak açılabilir.)
Ayrıntılar için bkz. “Dosya ilişkilendirmelerini yönetme” sayfa 286.
Dosya bilgilerini alma
File sınıfı, bir File nesnesinin işaret ettiği dosya veya dizin hakkında bilgi sağlayan aşağıdaki özellikleri içerir:
Dosya özelliği
Açıklama
creationDate
Yerel diskteki dosyanın oluşturulma tarihi.
creator
Geçersiz—extension özelliğini kullanın. (Bu özellik dosyanın Macintosh oluşturucu türünü bildirir, bu
yalnızca Mac OS X'ten önceki Mac OS sürümlerinde kullanılır.)
exists
Başvurulan dosyanın veya dizinin var olup olmadığı.
extension
Son noktanın (".") arkasından gelen (noktayı içermeyen) adın bir parçası olan dosya uzantısı. Dosya
adında nokta yoksa, uzantı null değerine sahiptir.
icon
Dosya için tanımlanan simgeleri içeren bir Icon nesnesi.
isDirectory
File nesnesi başvurusunun bir dizine yönelik olup olmadığı.
modificationDate
Yerel diskteki dosyanın veya dizinin son değiştirilme tarihi.
name
Yerel diskteki dosyanın veya dizinin adı (varsa dosya uzantısını da içeren).
nativePath
Ana bilgisayar işletim sistemi temsilcisindeki tam yol. Bkz. “File nesnelerinin Yolları” sayfa 103.
parent
File nesnesi tarafından temsil edilen klasörü veya dosyayı içeren klasör. File nesnesi dosya sisteminin
kökündeki bir dosyaya veya dizine başvuruyorsa, bu özellik null değerindedir.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 115
Dosya sistemiyle çalışma
Dosya özelliği
Açıklama
size
Yerel diskteki dosyanın bayt olarak boyutu.
type
Geçersiz—extension özelliğini kullanın. (Macintosh'ta bu özellik dört karakterli dosya türüdür, bu tür
yalnızca Mac OS X'ten önceki Mac OS sürümlerinde kullanılır.)
url
Dosyanın veya dizinin URL'si. Bkz. “File nesnelerinin Yolları” sayfa 103.
Bu özellikler hakkında ayrıntılı bilgi için ActionScript 3.0 Dil ve Bileşen Başvurusu
(http://www.adobe.com/go/learn_air_aslr_tr) bölümündeki File sınıfı girişine bakın.
Dosyaları kopyalama ve taşıma
File sınıfı dosyaları veya dizinleri kopyalamak için iki yöntem içerir: copyTo() ve copyToAsync(). File sınıfı dosyaları
veya dizinleri taşımak için iki yöntem içerir: moveTo() ve moveToAsync(). copyTo() ve moveTo() yöntemleri
senkronize çalışır; copyToAsync() ve moveToAsync() yöntemleri senkronize olmayan bir şekilde çalışır (bkz. “AIR
dosyası temel bilgileri” sayfa 102).
Bir dosyayı kopyalamak veya taşımak için iki File nesnesi ayarlarsınız. Biri kopyalanacak veya taşınacak olan dosyaya
işaret eder, bu copy veya move yöntemini çağıran nesnedir; diğeri hedef (sonuç) yoluna işaret eder.
Aşağıdaki örnek bir test.txt dosyasını kullanıcı documents dizininin AIR Test alt dizininden aynı dizindeki copy.txt
adlı dosyaya taşır:
var original:File = File.documentsDirectory.resolvePath("AIR Test/test.txt");
var newFile:File = File.resolvePath("AIR Test/copy.txt");
original.copyTo(newFile, true);
Bu örnekte copyTo() yönteminin overwrite parametresinin (ikinci parametre) değeri true olarak ayarlıdır. Bu
değeri true olarak ayarlayarak var olan bir hedef dosyanın üzerine yazılır. Bu parametre isteğe bağlıdır. Bu değeri
false (varsayılan değer) olarak ayarlarsanız, hedef dosya mevcutsa işlem bir IOErrorEvent olayı gönderir (ve dosya
kopyalanmaz).
copy ve move yöntemlerinin “Senkronize olmayan” sürümleri senkronize olmayan bir şekilde çalışır. Aşağıdaki kodda
olduğu gibi, görev veya hata durumlarının tamamlanmasını izlemek için addEventListener() yöntemini kullanın:
var original = File.documentsDirectory;
original = original.resolvePath("AIR Test/test.txt");
var destination:File = File.documentsDirectory;
destination = destination.resolvePath("AIR Test 2/copy.txt");
original.addEventListener(Event.COMPLETE, fileMoveCompleteHandler);
original.addEventListener(IOErrorEvent.IO_ERROR, fileMoveIOErrorEventHandler);
original.moveToAsync(destination);
function fileMoveCompleteHandler(event:Event):void {
trace(event.target); // [object File]
}
function fileMoveIOErrorEventHandler(event:IOErrorEvent):void {
trace("I/O Error.");
}
File sınıfı ayrıca File.moveToTrash() ve File.moveToTrashAsync() yöntemlerini de içerir, bu yöntemler bir
dosyayı veya dizini sistem çöp kutusuna taşır.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 116
Dosya sistemiyle çalışma
Bir dosyayı silme
File sınıfı bir deleteFile() ve bir deleteFileAsync() yöntemi içerir. İlki senkronize, ikincisi senkronize olmayan
bir şekilde çalışan bu yöntemler dosyaları siler (bkz. “AIR dosyası temel bilgileri” sayfa 102).
Örneğin aşağıdaki kod kullanıcının documents dizinindeki test.txt dosyasını senkronize olarak siler:
var file:File = File.documentsDirectory.resolvePath("test.txt");
file.deleteFile();
Aşağıdaki kod kullanıcının documents dizininin test.txt dosyasını senkronize olmayan bir şekilde siler:
var file:File = File.documentsDirectory.resolvePath("test.txt");
file.addEventListener(Event.COMPLETE, completeHandler)
file.deleteFileAsync();
function completeHandler(event:Event):void {
trace("Deleted.")
}
Ayrıca, bir dosyayı veya dizini Sistem çöp kutusuna taşımak için kullanabileceğiniz moveToTrash() ve
moveToTrashAsync() yöntemleri de bulunmaktadır. Ayrıntılar için bkz. “Bir dosyayı çöp kutusuna taşıma” sayfa 116.
Bir dosyayı çöp kutusuna taşıma
File sınıfı bir moveToTrash() ve bir moveToTrashAsync() yöntemi içerir. Bu yöntemler bir dosyayı veya dizini Sistem
çöp kutusuna gönderir, ilki senkronize, ikincisi senkronize olmayan bir şekilde çalışır (bkz. “AIR dosyası temel
bilgileri” sayfa 102).
Örneğin aşağıdaki kod kullanıcının documents dizinindeki test.txt dosyasını senkronize olarak Sistem çöp kutusuna
gönderir:
var file:File = File.documentsDirectory.resolvePath("test.txt");
file.moveToTrash();
Geçici bir dosya oluşturma
File sınıfı, aşağıdaki örnekte olduğu gibi Sistem için geçici bir dizin klasöründe bir dosya oluşturan
createTempFile() yöntemini içerir.
var temp:File = File.createTempFile();
createTempFile() yöntemi otomatik olarak benzersiz bir geçici dosya oluşturur. (Yeni bir benzersiz konum
belirlemekle uğraşmamış olursunuz.)
Geçici bir dosyayı, bir uygulama oturumu için kullanılan bilgileri geçici olarak saklamak için kullanabilirsiniz. Ayrıca
Sistem geçici dizininde benzersiz geçici bir dizin oluşturmak için createTempDirectory() yönteminin
bulunduğunu unutmayın.
Otomatik olarak silinmediği için, uygulamayı kapamadan önce geçici dosyayı silmek isteyebilirsiniz.
Dosyaları okuma ve dosyalara yazma
FileStream sınıfı sayesinde AIR uygulamaları dosya sistemine okuyabilir ve yazabilir.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 117
Dosya sistemiyle çalışma
Dosyaları okuma ve dosyalara yazma için iş akışı
Dosyaları okuma ve dosyalara yazma için iş akışı şu şekildedir.
Yola işaret eden bir File nesnesini başlatın.
Bu, birlikte çalışmak istediğiniz dosyanın (veya daha sonra oluşturacağınız dosyanın) yoludur.
var file:File = File.documentsDirectory;
file = file.resolvePath("AIR Test/testFile.txt");
Bu örnek File nesnesini başlatmak için File nesnesinin File.documentsDirectory özelliğini ve resolvePath()
yöntemini kullanır. Ancak bir File nesnesini bir dosyaya işaret etmenin başka birçok yolu vardır. Daha fazla bilgi için
bkz. “File nesnesini bir dosyaya işaret etme” sayfa 106.
Bir FileStream nesnesini başlatın.
FileStream nesnesinin open() veya openAsync() yöntemini çağırın.
Çağırdığınız yöntem, dosyayı senkronize işlemler için mi, senkronize olmayan işlemler için mi açmak istediğinize
bağlı olarak değişir. File nesnesini open yönteminin file parametresi olarak kullanın. fileMode parametresi için,
FileMode sınıfından dosyayı kullanma şeklinizi belirten bir sabit belirtin.
Örneğin aşağıdaki kod bir dosya oluşturmak ve var olan verilerin üzerine yazmak için kullanılan bir FileStream nesnesi
başlatır:
var fileStream:FileStream = new FileStream();
fileStream.open(file, FileMode.WRITE);
Daha fazla bilgi için bkz. “Bir FileStream nesnesi başlatma ve dosyaları açma ve kapama” sayfa 118 ve “FileStream açma
modları” sayfa 118.
Dosyayı senkronize olmayan bir şekilde açtıysanız (openAsync() yöntemini kullanarak), FileStream nesnesi için
olay dinleyicileri oluşturun ve ekleyin.
Bu olay dinleyicisi yöntemleri FileStream nesnesi tarafından, verilerin dosyadan okunması, G/Ç hatalarıyla
karşılaşılması veya yazılacak verilerin tamamının yazılması gibi çeşitli durumlarda gönderilen olaylara yanıt verir.
Ayrıntılar için bkz. “Senkronize olmayan bir şekilde açılan FileStream nesnesi tarafından oluşturulan olaylar ve
senkronize olmayan programlama” sayfa 122.
Verileri okuma ve yazma için kodu gerektiği şekilde dahil etme.
FileStream sınıfının okuma ve yazmayla ilgili birçok yöntemi vardır. (Her biri "read" veya "write" ifadesiyle başlar.)
Veri okumak veya yazmak için kullanmayı seçtiğiniz yöntem, hedef dosyadaki verilerin formatına bağlıdır.
Örneğin hedef dosyadaki veriler UTF kodlu metinse, readUTFBytes() ve writeUTFBytes() yöntemlerini
kullanabilirsiniz. Verileri bayt dizileri olarak işlemek istiyorsanız, readByte(), readBytes(), writeByte() ve
writeBytes() yöntemlerini kullanabilirsiniz. Ayrıntılar için bkz. “Veri formatları ve kullanılacak okuma ve yazma
yöntemlerini seçme” sayfa 123.
Dosyayı senkronize olmayan bir şekilde açtıysanız, bir read yöntemini çağırmadan önce yeterli verinin kullanılabilir
olduğundan emin olun. Ayrıntılar için bkz. “FileStream nesnesinin okuma arabelleği ve bytesAvailable özelliği”
sayfa 121.
Bir dosyaya yazmadan önce kullanılabilir disk alanını kontrol etmek istiyorsanız, File nesnesinin spaceAvailable
özelliğini kontrol edebilirsiniz. Daha fazla bilgi için bkz. “Bir birimdeki kullanılabilir alanı belirleme” sayfa 111.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 118
Dosya sistemiyle çalışma
Dosyayla çalışmanız bittiğinde FileStream nesnesinin close() yöntemini çağırın.
Böylece dosya diğer uygulamalar tarafından kullanılabilir hale gelir.
Ayrıntılar için bkz. “Bir FileStream nesnesi başlatma ve dosyaları açma ve kapama” sayfa 118.
Dosyaları okumak ve yazmak için FileStream sınıfı kullanan örnek bir uygulama görmek için, Adobe AIR Geliştirici
Merkezi'ndeki şu makalelere bakın:
• Metin dosyası düzenleyicisi oluşturma
FileStream nesneleriyle çalışma
FileStream sınıfı dosyaları açmak, okumak ve yazmak için yöntemler tanımlar.
FileStream açma modları
FileStream nesnesinin open() ve openAsync() yöntemlerinin her biri bir fileMode parametresi içerir, bu parametre
bir dosya akışı için, aşağıdakiler de dahil olmak üzere bazı özellikler tanımlar:
• Dosyadan okuma özelliği
• Dosyaya yazma özelliği
• Verilerin her zaman dosyanın sonuna eklenip eklenmeyeceği (yazarken)
• Dosya yoksa ne yapılacağı (üst dizinleri de olmadığında)
Aşağıda çeşitli dosya modları verilmiştir (open() ve openAsync() yöntemlerinin fileMode parametresi olarak
belirtebileceğiniz):
Dosya modu
Açıklama
FileMode.READ
Dosyanın yalnızca okuma için açık olduğunu belirtir.
FileMode.WRITE
Dosyanın yalnızca yazma için açık olduğunu belirtir. Dosya yoksa, FileStream nesnesi açıldığında
oluşturulur. Dosya varsa, var olan tüm veriler silinir.
FileMode.APPEND
Dosyanın yalnızca ekleme için açık olduğunu belirtir. Dosya yoksa oluşturulur. Dosya varsa, var olan
verilerin üzerine yazılmaz ve tüm yazma işlemleri dosyanın sonundan başlar.
FileMode.UPDATE
Dosyanın yalnızca okuma ve yazma için açık olduğunu belirtir. Dosya yoksa oluşturulur. Dosyaya rastgele
okuma/yazma erişimi için bu modu belirtin. Dosyadaki herhangi bir konumdan okuma işlemi
gerçekleştirebilirsiniz ve dosyaya yazarken, yalnızca yazılan baytlar var olan baytların üzerine yazar.
(Diğer baytlar değişmeden kalır.)
Bir FileStream nesnesi başlatma ve dosyaları açma ve kapama
Bir FileStream nesnesini açtığınızda, nesneyi bir dosyaya veri okumak ve yazmak için kullanılabilir hale getirirsiniz.
FileStream nesnesini, FileStream nesnesinin open() veya openAsync() yöntemine File nesnesini ileterek açarsınız:
var myFile:File = File.documentsDirectory.resolvePath("AIR Test/test.txt");
var myFileStream:FileStream = new FileStream();
myFileStream.open(myFile, FileMode.READ);
fileMode parametresi (open() ve openAsync() yöntemlerinin ikinci parametresi), dosyanın açılacağı modu belirtir:
okuma, yazma, ekleme veya güncelleme için. Ayrıntılar için önceki bölümlerden “FileStream açma modları” sayfa 118
bölümüne bakın.
openAsync() yöntemini dosyayı senkronize olmayan dosya işlemleri için açmak üzere kullanırsanız, senkronize
olmayan olayları işlemek için olay dinleyicileri ayarlayın:
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 119
Dosya sistemiyle çalışma
var myFile:File = File.documentsDirectory.resolvePath("AIR Test/test.txt");
var myFileStream:FileStream = new FileStream();
myFileStream.addEventListener(Event.COMPLETE, completeHandler);
myFileStream.addEventListener(ProgressEvent.PROGRESS, progressHandler);
myFileStream.addEventListener(IOErrorEvent.IOError, errorHandler);
myFileStream.open(myFile, FileMode.READ);
function completeHandler(event:Event):void {
// ...
}
function progressHandler(event:ProgressEvent):void {
// ...
}
function errorHandler(event:IOErrorEvent):void {
// ...
}
Dosya, open() veya openAsync() yöntemlerinden hangisini kullandığınıza bağlı olarak senkronize veya senkronize
olmayan işlemler için açılır. Ayrıntılar için bkz. “AIR dosyası temel bilgileri” sayfa 102.
fileMode parametresini FileStream nesnesinin open yönteminde FileMode.READ veya FileMode.UPDATE olarak
ayarlarsanız, siz FileStream nesnesini açar açmaz veriler okuma arabelleğine okunur. Ayrıntılar için bkz. “FileStream
nesnesinin okuma arabelleği ve bytesAvailable özelliği” sayfa 121.
İlişkilendirilen dosyayı kapatmak için FileStream nesnesinin close() yöntemini çağırabilirsiniz, böylece dosyayı
diğer uygulamalar tarafından kullanılabilir hale getirirsiniz.
FileStream nesnesinin position özelliği
FileStream nesnesinin position özelliği, sonraki read veya write yönteminde verilerin nereye okunduğunu veya
yazıldığını belirler.
Bir okuma veya yazma işleminden önce, position özelliğini dosyada geçerli bir konuma ayarlayın.
Örneğin aşağıdaki kod "hello" dizesini (UTF kodlamada) dosyada konum 8'de yazar:
var myFile:File = File.documentsDirectory.resolvePath("AIR Test/test.txt");
var myFileStream:FileStream = new FileStream();
myFileStream.open(myFile, FileMode.UPDATE);
myFileStream.position = 8;
myFileStream.writeUTFBytes("hello");
Bir FileStream nesnesini ilk açtığınızda, position özelliği 0'a ayarlıdır.
Bir okuma işleminden önce position değeri en az 0 ve dosyadaki bayt sayısından (dosyadaki var olan konumlar) az
olmalıdır.
position özelliğinin değeri yalnızca aşağıdaki durumlarda değiştirilir:
•
position özelliğini açık olarak ayarladığınızda.
• Bir read yöntemini çağırdığınızda.
• Bir write yöntemini çağırdığınızda.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 120
Dosya sistemiyle çalışma
FileStream nesnesinin read veya write yöntemini çağırdığınızda, position özelliği hemen okuduğunuz veya
yazdığınız bayt sayısı kadar artırılır. Kullandığınız read yöntemine bağlı olarak, position özelliği okumak için
belirttiğiniz bayt sayısı kadar veya kullanılabilir bayt sayısı kadar artırılır. Bir read veya write yöntemini sonradan
çağırdığınızda, yeni konumdan başlayarak okur veya yazar.
var myFile:File = File.documentsDirectory.resolvePath("AIR Test/test.txt");
var myFileStream:FileStream = new FileStream();
myFileStream.open(myFile, FileMode.UPDATE);
myFileStream.position = 4000;
trace(myFileStream.position); // 4000
myFileStream.writeBytes(myByteArray, 0, 200);
trace(myFileStream.position); // 4200
Ancak bir istisna söz konusudur: Ekleme modunda açılmış bir FileStream için, write yöntemine yapılan bir çağrıdan
sonra position özelliği değişmez. (Ekleme modunda veriler, position özelliğinin değerinden bağımsız olarak her
zaman dosyanın sonuna yazılır.)
Senkronize olmayan işlemler için açılan bir dosyada, kodun bir sonraki satırı çalıştırılmadan yazma işlemi
tamamlanmaz. Ancak birden çok senkronize olmayan yöntemi sıralı olarak çağırabilirsiniz ve çalışma zamanı onları
sırayla çalıştırır:
var myFile:File = File.documentsDirectory.resolvePath("AIR Test/test.txt");
var myFileStream:FileStream = new FileStream();
myFileStream.openAsync(myFile, FileMode.WRITE);
myFileStream.writeUTFBytes("hello");
myFileStream.writeUTFBytes("world");
myFileStream.addEventListener(Event.CLOSE, closeHandler);
myFileStream.close();
trace("started.");
closeHandler(event:Event):void
{
trace("finished.");
}
Bu kod için izleme çıktısı şöyledir:
started.
finished.
position değerini bir read veya write yöntemini çağırdıktan hemen sonra (veya istediğiniz zaman) belirtebilirsiniz,
böylece bir sonraki okuma veya yazma işlemi o konumdan başlar. Örneğin, aşağıdaki kod position özelliğini
writeBytes() işlemine bir çağrı yapıldıktan hemen sonra ayarlar ve yazma işlemi tamamlandıktan sonra bile
position o değere ayarlanır (300):
var myFile:File = File.documentsDirectory.resolvePath("AIR Test/test.txt");
var myFileStream:FileStream = new FileStream();
myFileStream.openAsync(myFile, FileMode.UPDATE);
myFileStream.position = 4000;
trace(myFileStream.position); // 4000
myFileStream.writeBytes(myByteArray, 0, 200);
myFileStream.position = 300;
trace(myFileStream.position); // 300
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 121
Dosya sistemiyle çalışma
FileStream nesnesinin okuma arabelleği ve bytesAvailable özelliği
Okuma özelliklerine sahip bir FileStream nesnesi (open() veya openAsync() yönteminin fileMode parametresinin
READ veya UPDATE olarak ayarlı olduğu) açıldığında çalışma zamanı, verileri dahili bir arabellekte saklar. FileStream
nesnesi, siz dosyayı açar açmaz (FileStream nesnesinin open() veya openAsync() yöntemini çağırarak) verileri
arabelleğe okumaya başlar.
Aşağıdaki kodda gösterildiği gibi (dosyanın en az 100 bayttan oluştuğunu varsayar), senkronize işlemler için açılan bir
dosyada (open() yöntemi kullanılarak), position işaretçisini herhangi bir geçerli konuma ayarlayabilirsiniz
(dosyanın sınırları içinde) ve herhangi bir miktardaki veriyi okumaya başlayabilirsiniz (dosyanın sınırları içinde):
var myFile:File = File.documentsDirectory.resolvePath("AIR Test/test.txt");
var myFileStream:FileStream = new FileStream();
myFileStream.open(myFile, FileMode.READ);
myFileStream.position = 10;
myFileStream.readBytes(myByteArray, 0, 20);
myFileStream.position = 89;
myFileStream.readBytes(myByteArray, 0, 10);
Read yöntemleri, bir dosyanın senkronize veya senkronize olmayan işlemler için açıldığına bakılmaksızın, okuma
işlemini her zaman bytesAvalable özelliği tarafından temsil edilen "kullanılabilir" baytlardan gerçekleştirir.
Senkronize olarak okurken, dosyadaki tüm baytlar her zaman kullanılabilirdir. Senkronize olmayan bir şekilde okuma
yaparken, progress olayları tarafından bildirilen senkronize olmayan arabellek dolumları dizisinde, baytlar,
position özelliği tarafından belirtilen konumdan başlayarak kullanılabilir olur.
Senkronize işlemler için açılan dosyalarda, bytesAvailable özelliği her zaman position özelliğinden dosyanın
sonuna kadar olan bayt sayısını temsil edecek şekilde ayarlıdır. (Dosyadaki tüm baytlar her zaman okunabilir.)
Senkronize olmayan işlemler için açılan dosyalarda, okuma arabelleğinin bir read yöntemini çağırmadan önce yeterli
veri tüketmiş olduğundan emin olmanız gerekir. Senkronize olmayan bir şekilde açılmış bir dosyada, okuma işlemi
ilerledikçe, dosyadaki veriler okuma işlemi başlatıldığında belirtilen position öğesinden başlayarak arabelleğe eklenir
ve okunan her baytla bytesAvailable özelliği artar. bytesAvailable özelliği, position özelliği tarafından belirtilen
konumdaki baytla başlayarak arabelleğin sonuna kadar kullanılabilir olan baytların sayısını gösterir. FileStream
nesnesi düzenli aralıklarla bir progress olayı gönderir.
Senkronize olmayan bir şekilde açılan dosyada, veriler okuma arabelleğinde kullanılabilir oldukça, FileStream nesnesi
düzenli aralıklarla progress olayını gönderir. Örneğin aşağıdaki kod, arabelleğe okundukça verileri bytes adlı bir
ByteArray nesnesine okur:
var bytes:ByteArray = new ByteArray();
var myFile:File = File.documentsDirectory.resolvePath("AIR Test/test.txt");
var myFileStream:FileStream = new FileStream();
myFileStream.addEventListener(ProgressEvent.PROGRESS, progressHandler);
myFileStream.openAsync(myFile, FileMode.READ);
function progressHandler(event:ProgressEvent):void
{
myFileStream.readBytes(bytes, myFileStream.position, myFileStream.bytesAvailable);
}
Senkronize olmayan bir şekilde açılan dosyada, yalnızca okuma arabelleğindeki veriler okunabilir. Ayrıca siz verileri
okudukça, veriler okuma arabelleğinden kaldırılır. Okuma işlemleri için, okuma işlemini çağırmadan önce verilerin
okuma arabelleğinde bulunduğundan emin olmanız gerekir. Örneğin aşağıdaki kod, dosyada konum 4000'den
başlayarak 8000 bayt veri okur:
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 122
Dosya sistemiyle çalışma
var myFile:File = File.documentsDirectory.resolvePath("AIR Test/test.txt");
var myFileStream:FileStream = new FileStream();
myFileStream.addEventListener(ProgressEvent.PROGRESS, progressHandler);
myFileStream.addEventListener(Event.COMPLETE, completed);
myFileStream.openAsync(myFile, FileMode.READ);
myFileStream.position = 4000;
var str:String = "";
function progressHandler(event:Event):void
{
if (myFileStream.bytesAvailable > 8000 )
{
str += myFileStream.readMultiByte(8000, "iso-8859-1");
}
}
FileStream nesnesi bir yazma işlemi boyunca verileri okuma arabelleğine okumaz. Bir yazma işlemi tamamlandığında
(yazma arabelleğindeki tüm veriler dosyaya yazılır), FileStream nesnesi yeni bir okuma arabelleğine başlar
(ilişkilendirilen FileStream nesnesinin okuma özellikleriyle açıldığı varsayılarak) ve position özelliği tarafından
belirtilen konumdan başlayarak okuma arabelleğine veri okumaya başlar. position özelliği yazılan son baytın
konumu veya kullanıcı yazma işleminden sonra position nesnesi için farklı bir değer belirtirse farklı bir konum
olabilir.
Senkronize olmayan bir şekilde açılan FileStream nesnesi tarafından oluşturulan olaylar ve
senkronize olmayan programlama
Bir dosya senkronize olmayan bir şekilde açıldığında (openAsync() yöntemi kullanılarak), dosyaları okuma ve yazma
işlemi senkronize olmayan bir şekilde gerçekleştirilir. Veriler okuma arabelleğine okunduğu ve çıktı verileri yazıldığı
için, diğer ActionScript kodu çalıştırılabilir.
Bu, FileStream nesnesi tarafından oluşturulan senkronize olmayan bir şekilde açılan olaylar için kaydolmanız gerektiği
anlamına gelir.
Aşağıdaki kodda olduğu gibi, progress olayı için kaydolduğunuzda yeni veriler okuma işlemi için kullanılabilir
olduğunda size bilgi verilebilir:
var myFile:File = File.documentsDirectory.resolvePath("AIR Test/test.txt");
var myFileStream:FileStream = new FileStream();
myFileStream.addEventListener(ProgressEvent.PROGRESS, progressHandler);
myFileStream.openAsync(myFile, FileMode.READ);
var str:String = "";
function progressHandler(event:ProgressEvent):void
{
str += myFileStream.readMultiByte(myFileStream.bytesAvailable, "iso-8859-1");
}
Aşağıdaki kodda olduğu gibi complete olayı için kaydolarak tüm verileri okuyabilirsiniz:
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 123
Dosya sistemiyle çalışma
var myFile:File = File.documentsDirectory.resolvePath("AIR Test/test.txt");
var myFileStream:FileStream = new FileStream();
myFileStream.addEventListener(Event.COMPLETE, completed);
myFileStream.openAsync(myFile, FileMode.READ);
var str:String = "";
function completeHandler(event:Event):void
{
str = myFileStream.readMultiByte(myFileStream.bytesAvailable, "iso-8859-1");
}
Senkronize olmayan okuma işleminin gerçekleşmesi için giriş verilerinin arabelleğe alınma şekline oldukça benzer bir
şekilde, senkronize olmayan bir akışa yazdığınız veriler arabelleğe alınır ve dosyaya senkronize olmayan bir şekilde
yazılır. Veriler bir dosyaya yazıldıkça, FileStream nesnesi düzenli aralıklarla bir OutputProgressEvent nesnesi
gönderir. OutputProgressEvent nesnesi, yazılmak için kalan bayt sayısına ayarlı bir bytesPending özelliği içerir.
Belki de bir ilerleme iletişim kutusu görüntülemek için bu arabellek gerçekten bir dosyaya yazıldığı için,
outputProgress olayı için bilgi almak üzere kaydolabilirsiniz. Ancak genelde bunu yapmanıza gerek yoktur.
Özellikle, yazılmamış baytları dikkate almadan close() yöntemini çağırabilirsiniz. FileStream nesnesi veri yazmaya
devam eder ve son bayt dosyaya yazıldıktan ve alttaki dosya kapatıldıktan sonra close olayı iletilir.
Veri formatları ve kullanılacak okuma ve yazma yöntemlerini seçme
Her dosya diskteki bir bayt kümesidir. ActionScript'te bir dosyadan gelen veriler her zaman bir ByteArray olarak
temsil edilebilir. Örneğin aşağıdaki kod verileri bir dosyadan bytes adlı bir ByteArray nesnesine okur:
var myFile:File = File.documentsDirectory.resolvePath("AIR Test/test.txt");
var myFileStream:FileStream = new FileStream();
myFileStream.addEventListener(Event.COMPLETE, completeHandler);
myFileStream.openAsync(myFile, FileMode.READ);
var bytes:ByteArray = new ByteArray();
function completeHandler(event:Event):void
{
myFileStream.readBytes(bytes, 0, myFileStream.bytesAvailable);
}
Benzer şekilde aşağıdaki kod verileri bytes adlı bir ByteArray nesnesinden bir dosyaya yazar:
var myFile:File = File.documentsDirectory.resolvePath("AIR Test/test.txt");
var myFileStream:FileStream = new FileStream();
myFileStream.open(myFile, FileMode.WRITE);
myFileStream.writeBytes(bytes, 0, bytes.length);
Ancak genellikle verileri bir ActionScript ByteArray nesnesinde saklamak istemezsiniz. Genellikle veri dosyası
belirtilen dosya formatındadır.
Örneğin dosyadaki veriler metin dosyası formatında olabilir ve bu tür verileri bir String nesnesinde temsil etmek
isteyebilirsiniz.
Bu nedenle FileStream sınıfı, ByteArray nesnelerinin dışındaki türlere ve türlerden yapılacak veri okuma ve yazma
işlemleri için read ve write yöntemleri içerir. Örneğin readMultiByte() yöntemi sayesinde, aşağıdaki kodda olduğu
gibi verileri bir dosyadan okuyup bir dizede saklayabilirsiniz:
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 124
Dosya sistemiyle çalışma
var myFile:File = File.documentsDirectory.resolvePath("AIR Test/test.txt");
var myFileStream:FileStream = new FileStream();
myFileStream.addEventListener(Event.COMPLETE, completed);
myFileStream.openAsync(myFile, FileMode.READ);
var str:String = "";
function completeHandler(event:Event):void
{
str = myFileStream.readMultiByte(myFileStream.bytesAvailable, "iso-8859-1");
}
readMultiByte() yönteminin ikinci parametresi, ActionScript'in verileri yorumlamak için kullandığı metin
formatını belirtir (örnekte "iso-8859-1"). ActionScript, yaygın karakter kümesi kodlamalarını destekler ve bunlar
ActionScript 3.0 Dil Başvurusu'nda listelenmiştir (bkz. http://livedocs.macromedia.com/flex/2/langref/charsetcodes.html linkinde Desteklenen karakter kümeleri).
FileStream sınıfı ayrıca readUTFBytes() yöntemini de içerir, bu yöntem UTF-8 karakter kümesini kullanarak okuma
arabelleğinden verileri bir dizeye okur. UTF-8 karakter kümesindeki karakterler çeşitli uzunluklarda olduğu için,
readUTFBytes() öğesini progress olayına yanıt veren bir yöntemde kullanmayın, okuma arabelleğinin sonundaki
veriler eksik bir karakteri temsil edebilir. (Bu ayrıca readMultiByte() yöntemini çeşitli uzunluklardaki karakter
kodlamasıyla kullanırken de geçerlidir.) Bu nedenle FileStream nesnesi complete olayını gönderdiğinde veri
kümesinin tamamını okuyun.
Ayrıca String nesneleriyle ve metin dosyalarıyla çalışmak için, writeMultiByte() ve writeUTFBytes() gibi benzer
write yöntemleri de vardır.
readUTF() ve writeUTF() yöntemleri de (readUTFBytes() ve writeUTFBytes() yöntemleriyle karıştırılmamalıdır)
metin verilerini bir dosyaya okur ve yazar, ancak onlar metin verilerinden önce, metin verilerinin uzunluğunu belirten
verilerin geldiğini varsayar, bu da standart metin dosyaları için yaygın bir uygulama değildir.
Bazı UTF kodlu metin dosyaları "UTF-BOM" (bayt sırası işareti) karakteriyle başlar, bu karakter kodlama formatının
yanı sıra endian olduğunu belirtir ( UTF-16 veya UTF-32 gibi).
Bir dosyaya okuma ve yazma örneği için bkz. “Örnek: Bir XML dosyasını XML nesnesine okuma” sayfa 125.
readObject() ve writeObject(), karmaşık ActionScript nesneleri için veri saklamak ve almak için pratik yollardır.
Veriler AMF'de kodlanmıştır (ActionScript Message Format). Bu format ActionScript'e aittir. AIR, Flash Player, Flash
Media Server ve Flex Data Services dışındaki uygulamalarda, bu formattaki verilerle çalışmayı sağlayacak dahili API'ler
bulunmamaktadır.
Başka read ve write yöntemleri (readDouble() ve writeDouble() gibi) vardır. Ancak bunları kullanırsanız, dosya
formatının bu yöntemler tarafından tanımlanan verilerin formatlarıyla eşleştiğinden emin olun.
Dosya formatları genellikle basit metin formatlarından daha karmaşıktır. Örneğin bir MP3 dosyası, yalnızca belirli
MP3 dosyalarına özgü olan açma ve kod çözme algoritmalarıyla yorumlanabilen sıkıştırılmış veriler içerir. MP3
dosyaları da dosya hakkında meta etiket bilgilerine (bir şarkının başlığı ve sanatçı gibi) sahip ID3 etiketleri içerebilir.
ID3 formatının birden çok sürümü vardır, ancak bunlardan en basiti (ID3 sürüm 1) “Örnek: Rastgele erişimle veri
okuma ve yazma” sayfa 126 bölümünde anlatılmaktadır.
Diğer dosya formatları (görüntüler, veri tabanları, uygulama belgeleri, vb.) farklı yapılara sahiptir ve ActionScript'te
onların verileriyle çalışmak için, verilerin nasıl yapılandırıldığını anlamanız gerekir.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 125
Dosya sistemiyle çalışma
load() ve save() yöntemlerini kullanma
Flash Player 10, FileReference sınıfına load() ve save() yöntemlerini eklemiştir. Bu yöntemler AIR 1.5'te de bulunur
ve File sınıfı yöntemleri FileReference sınıfından miras alır. Bu yöntemler kullanıcıların Flash Player'da dosya
verilerini yüklemeleri ve kaydetmeleri için güvenli bir yol sağlamak üzere tasarlanmıştır. Ancak, AIR uygulamaları bu
yöntemleri dosyaları senkronize olmayan şekilde yükleme ve kaydetmenin kolay bir yolu olarak da kullanabilir.
Örneğin, aşağıdaki kod bir dizeyi metin dosyasına kaydeder.
var file:File = File.applicationStorageDirectory.resolvePath("test.txt");
var str:String = "Hello.";
file.addEventListener(Event.COMPLETE, fileSaved);
file.save(str);
function fileSaved(event:Event):void
{
trace("Done.");
}
save() yönteminin data parametresi bir String, XML veya ByteArray değeri alabilir. Argüman bir String veya XML
değeri olduğunda, yöntem dosyayı UTF-8 kodlu bir metin dosyası olarak kaydeder.
Bu kod örneği yürütüldüğünde, uygulama kullanıcının kaydedilen dosya hedefini seçtiği bir iletişim kutusu
görüntüler.
Aşağıdaki kod, UTF-8 kodlu metin dosyasından bir dize yükler:
var file:File = File.applicationStorageDirectory.resolvePath("test.txt");
file.addEventListener(Event.COMPLETE, loaded);
file.load();
var str:String;
function loaded(event:Event):void
{
var bytes:ByteArray = file.data;
str = bytes.readUTFBytes(bytes.length);
trace(str);
}
FileStream sınıfı, load() ve save() yöntemlerinin sağladığından daha fazla işlev sağlar:
• FileStream sınıfını kullanarak, verileri senkronize ve senkronize olmayan biçimde okuyabilir ve yazabilirsiniz.
• FileStream sınıfını kullanarak, bir dosyaya artımlı olarak yazabilirsiniz.
• FileStream sınıfının kullanılması rastgele erişim için dosya açabilmenizi sağlar (dosyanın herhangi bir bölümünden
okuyarak veya herhangi bir bölümüne yazarak).
• FileStream sınıfı, open() veya openAsync() yönteminin fileMode parametresini ayarlayarak dosyaya olan
erişiminizin türünü belirlemenize olanak verir.
• FileStream sınıfı, kullanıcıya Açma veya Kaydetme iletişim kutusunu sunmadan verileri kaydedebilmenizi sağlar.
• FileStream sınıfıyla verileri okuma sırasında bayt dizileri dışındaki türleri doğrudan kullanabilirsiniz.
Örnek: Bir XML dosyasını XML nesnesine okuma
Aşağıdaki örnekler, XML verileri içeren bir metin dosyasına okuma ve yazma işlemlerinin nasıl yapılacağını gösterir.
Dosyadan okumak için, File ve FileStream nesnelerini başlatın, FileStream nesnesinin readUTFBytes() yöntemini
çağırın ve dizeyi bir XML nesnesine dönüştürün:
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 126
Dosya sistemiyle çalışma
var file:File = File.documentsDirectory.resolvePath("AIR Test/preferences.xml");
var fileStream:FileStream = new FileStream();
fileStream.open(file, FileMode.READ);
var prefsXML:XML = XML(fileStream.readUTFBytes(fileStream.bytesAvailable));
fileStream.close();
Benzer şekilde dosyaya veri yazmak da, uygun File ve FileStream nesnelerini ayarlayıp FileStream nesnesinin write
yöntemini çağırmak kadar kolaydır. XML verilerinin dize sürümünü write yöntemine aşağıdaki kodda olduğu gibi
iletin:
var prefsXML:XML = <prefs><autoSave>true</autoSave></prefs>;
var file:File = File.documentsDirectory.resolvePath("AIR Test/preferences.xml");
fileStream = new FileStream();
fileStream.open(file, FileMode.WRITE);
var outputString:String = '<?xml version="1.0" encoding="utf-8"?>\n';
outputString += prefsXML.toXMLString();
fileStream.writeUTFBytes(outputString);
fileStream.close();
Bu örnekler readUTFBytes() ve writeUTFBytes() yöntemlerini kullanır, çünkü dosyaların UTF-8 formatında
olduğunu varsayar. Değilse, farklı bir yöntem kullanmanız gerekebilir (bkz. “Veri formatları ve kullanılacak okuma ve
yazma yöntemlerini seçme” sayfa 123).
Önceki örnekler senkronize işlem için açılmış FileStream nesnelerini kullanır. Senkronize olmayan işlemler (olaylara
yanıt vermek için olay dinleyicisi işlevlerine dayanan) için de dosyalar açabilirsiniz. Örneğin aşağıdaki kod, bir XML
dosyasının senkronize olmayan şekilde nasıl okunacağını gösterir:
var file:File = File.documentsDirectory.resolvePath("AIR Test/preferences.xml");
var fileStream:FileStream = new FileStream();
fileStream.addEventListener(Event.COMPLETE, processXMLData);
fileStream.openAsync(file, FileMode.READ);
var prefsXML:XML;
function processXMLData(event:Event):void
{
prefsXML = XML(fileStream.readUTFBytes(fileStream.bytesAvailable));
fileStream.close();
}
processXMLData() yöntemi, dosyanın tamamı okuma arabelleğine okunduğu zaman çağrılır (FileStream nesnesi
complete olayını gönderdiğinde). Okunan verilerin dize sürümünü alması için readUTFBytes() yöntemini çağırır
ve o dizeye dayalı olarak prefsXML adlı bir XML nesnesi oluşturur.
Örnek: Rastgele erişimle veri okuma ve yazma
MP3 dosyaları, dosyanın başında veya sonunda yer alan, kaydı tanımlayan meta verileri içeren bölümler olan ID3
etiketlerine sahip olabilir. ID3 etiket formatının farklı sürümleri vardır. Bu örnek, en basit ID3 formatını içeren (ID3
sürüm 1.0) MP3 dosyasından, dosyadaki rastgele konumlara okuma ve yazma işleminin gerçekleştirildiği anlamına
gelen "dosya verilerine rastgele erişim" kullanılarak nasıl veri okunacağını ve yazılacağını gösterir.
ID3 sürüm 1 etiketini içeren bir MP3 dosyası, ID3 verilerini dosyanın sonunda, son 128 baytta içerir.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 127
Dosya sistemiyle çalışma
Bir dosyaya rastgele okuma/yazma erişimi için erişirken, open() veya openAsync() yönteminin fileMode
parametresi olarak FileMode.UPDATE öğesini belirtmek gerekir:
var file:File = File.documentsDirectory.resolvePath("My Music/Sample ID3 v1.mp3");
var fileStr:FileStream = new FileStream();
fileStr.open(file, FileMode.UPDATE);
Böylece dosyaya hem okur hem de yazarsınız.
Dosyayı açtıktan sonra, position işaretçisini, dosyanın sonundan 128 bayt önce konumuna getirebilirsiniz:
fileStr.position = file.size - 128;
Bu kod position özelliğini dosyada bu konuma ayarlar, çünkü ID3 v1.0 formatı, ID3 etiket verilerinin dosyanın son
128 baytında saklandığını belirtir. Bu belirtim ayrıca şunu da gösterir:
• Etiketin ilk 3 baytı "TAG" dizesini içerir.
• Sonraki 30 karakter, bir dize olarak MP3 parçasının başlığını içerir.
• Sonraki 30 karakter, bir dize olarak sanatçının adını içerir.
• Sonraki 30 karakter, bir dize olarak albümün adını içerir.
• Sonraki 4 karakter, bir dize olarak yılı içerir.
• Sonraki 30 karakter, bir dize olarak yorumu içerir.
• Sonraki bayt, parçanın türünü belirten bir kod içerir.
• Tüm metin verileri ISO 8859-1 formatındadır.
id3TagRead() yöntemi, okunduktan sonra verileri kontrol eder (complete olayından sonra):
function id3TagRead():void
{
if (fileStr.readMultiByte(3, "iso-8859-1").match(/tag/i))
{
var id3Title:String = fileStr.readMultiByte(30, "iso-8859-1");
var id3Artist:String = fileStr.readMultiByte(30, "iso-8859-1");
var id3Album:String = fileStr.readMultiByte(30, "iso-8859-1");
var id3Year:String = fileStr.readMultiByte(4, "iso-8859-1");
var id3Comment:String = fileStr.readMultiByte(30, "iso-8859-1");
var id3GenreCode:String = fileStr.readByte().toString(10);
}
}
Ayrıca dosyada rastgele erişimli yazma işlemi de gerçekleştirebilirsiniz. Örneğin id3Title değişkenini baş harfinin
doğru şekilde büyütüldüğünden emin olmak için ayrıştırabilirsiniz (String sınıfının yöntemlerini kullanarak) ve
ardından aşağıdaki gibi, dosyaya newTitle adlı değiştirilmiş bir dize yazabilirsiniz:
fileStr.position = file.length - 125;
// 128 - 3
fileStr.writeMultiByte(newTitle, "iso-8859-1");
ID3 sürüm 1 standardına uymak için, newTitle dizesinin uzunluğu, sonunda karakter kodu 0 ile tamponlu 30
karakter olmalıdır (String.fromCharCode(0)).
128
Bölüm 15: Sürükle ve bırak
Kullanıcı arabirimi sürükle ve bırak hareketlerini desteklemek için, sürükle ve bırak API'sindeki sınıfları kullanın. Bu
anlamda hareket kullanıcı tarafından gerçekleştirilen, hem işletim sistemi hem de uygulamanız tarafından aracı
olunan, bilgi kopyalamak, taşımak veya link vermek için bir amaç ifade eden bir eylemdir. Dışarı sürükleme hareketi,
kullanıcı bir nesneyi bileşenin veya uygulamanın dışına sürüklediğinde oluşur. Dışarı sürükleme hareketi, kullanıcı bir
nesneyi bileşenin veya uygulamanın dışından içeri sürüklediğinde oluşur.
Sürükle ve bırak API'siyle kullanıcının uygulamalar arasında ve bir uygulama içerisindeki bileşenler arasında veri
sürüklemesini sağlayabilirsiniz. Desteklenen aktarım formatları şunlardır:
• Bitmapler
• Dosyalar
• HTML formatlı metin
• Metin
• Zengin Metin Formatlı veriler
• URL'ler
• Serileştirilmiş nesneler
• Nesne başvuruları (yalnızca kaynak uygulama içinde geçerli)
Sürükleme ve bırakma hakkında ek çevrimiçi bilgiler
Sürükle ve bırak API'siyle çalışma hakkında daha fazla bilgi için şu kaynaklardan yararlanabilirsiniz:
Hızlı Başlangıçlar (Adobe AIR Geliştirici Bağlantısı)
• Sürükle ve bırak ve kopyala ve yapıştır işlemlerini destekleme
Dil Başvurusu
• NativeDragManager
• NativeDragOptions
• Clipboard
• NativeDragEvent
Adobe Geliştirici Bağlantısı Makaleler ve Örnekler
• Flash için Adobe AIR Geliştirici Bağlantısı ('AIR sürükleme ve bırakma'yı arayın)
Sürükleme ve bırakma temel bilgileri
Sürükle ve bırak API'si aşağıdaki sınıfları içerir.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 129
Sürükle ve bırak
Paket
Sınıflar
flash.desktop
•
NativeDragManager
•
NativeDragOptions
•
Clipboard
•
NativeDragActions
•
ClipboardFormat
•
ClipboardTransferModes
Sürükle ve bırak API'siyle kullanılan sabitler aşağıdaki sınıflarda tanımlanır:
flash.events
•
NativeDragActions
•
ClipboardFormat
•
ClipboardTransferModes
NativeDragEvent
Sürükle ve bırak hareket sahneleri
Sürükle ve bırak hareketinin üç sahnesi vardır:
Başlatma Kullanıcı, fare düğmesini basılı tutarak bir bileşeni veya bileşendeki öğeyi sürükleyerek sürükle ve bırak
işlemini başlatır. Sürüklenen öğenin kaynağı olan bileşen genellikle sürükleme başlatıcısı olarak belirlenir ve
nativeDragStart ve nativeDragComplete olaylarını gönderir. Adobe® AIR™ uygulaması, mouseDown veya
mouseMove olayına yanıt olarak NativeDragManager.doDrag() yöntemini çağırarak bir sürükleme işlemi başlatır.
Sürükleme işlemi AIR uygulamasının dışından başlatıldıysa nativeDragStart veya nativeDragComplete olaylarını
gönderecek başlatıcı nesne bulunmaz.
Sürükleme Fare düğmesini basılı tutarken kullanıcı fare imlecini başka bir bileşene, uygulamaya veya masaüstüne
taşır.Sürükleme işlemi devam ederken, başlatıcı nesne nativeDragUpdate olaylarını gönderir. Kullanıcı fareyi AIR
uygulamasındaki olası bir bırakma hedefinin üzerine taşıdığında, bırakma hedefi bir nativeDragEnter olayı
gönderir. Olay işleyicisi, sürüklenen verilerin hedef tarafından kabul edilecek bir formatta mevcut olup olmadığını
belirlemek için olay nesnesini denetleyebilir, mevcutsa NativeDragManager.acceptDragDrop() yöntemini
çağırarak kullanıcının verileri bırakmasını sağlar.
Sürükleme hareketi etkileşimli bir nesnenin üzerinde kaldığı sürece, bu nesne nativeDragOver olaylarını gönderir.
Sürükleme hareketi etkileşimli nesneyi bıraktığında, bir nativeDragExit olayı gönderir.
Bırakma Kullanıcı fare düğmesini uygun bir bırakma hedefinin üzerinde serbest bırakır. Hedef bir AIR uygulaması veya
bileşeni olduğunda, hedef nesne bir nativeDragDrop olayı gönderir. Olay işleyicisi olay nesnesinden aktarılan verilere
erişebilir. Hedef, AIR'in dışındaysa, bırakma işlemini işletim sistemi veya başka bir uygulama yapar. Her iki durumda
da, başlatan nesne bir nativeDragComplete olayı gönderir (sürükleme AIR'in içinden başlatıldıysa).
NativeDragManager sınıfı hem içeri hem de dışarı sürükleme hareketlerini kontrol eder. NativeDragManager sınıfının
tüm üyeleri statiktir, bu sınıfın bir örneğini oluşturmayın.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 130
Sürükle ve bırak
Clipboard nesnesi
Bir uygulamanın veya bileşenin içine ya da dışına sürüklenen veriler bir Clipboard nesnesinde bulunmaktadır. Tek bir
Clipboard nesnesi, başka bir uygulamanın verileri anlayıp kullanabilmesi olasılığını arttırmak için aynı bilgilerin farklı
temsillerini kullanılabilir hale getirebilir. Örneğin bir görüntü, görüntü verisi, serileştirilmiş Bitmap nesnesi veya bir
dosya olarak dahil edilebilir. Bir formatta veri oluşturma işlemi, veriler okunana kadar çağrılmayan bir oluşturma
işlevine ertelenebilir.
Bir sürükleme hareketi başladıktan sonra Clipboard nesnesine yalnızca nativeDragEnter, nativeDragOver ve
nativeDragDrop olayları için olay işleyicisinin içinden erişilebilir. Sürükleme hareketi bittikten sonra Clipboard
nesnesi okunamaz veya yeniden kullanılamaz.
Bir uygulama nesnesi başvuru olarak ve serileştirilmiş bir nesne olarak aktarılabilir. Başvurular yalnızca kaynak
uygulama içinde geçerlidir. Serileştirilmiş nesne aktarımları AIR uygulamaları arasında geçerlidir, ancak yalnızca
serileştirildiğinde ve serileştirmesi kaldırıldığında geçerliliği devam eden nesnelerle kullanılabilir. Serileştirilen
nesneler dize tabanlı veri aktarım formatı olan ActionScript 3 (AMF3) için Action Message Format'e dönüştürülür.
Flex çerçevesiyle çalışma
Çoğu durumda, Flex uygulamaları oluştururken Adobe® Flex™ sürükle ve bırak API'sini kullanmak daha yararlıdır.
AIR'de bir Flex uygulaması çalıştırıldığında (AIR NativeDragManager öğesini dahili şekilde kullanır), Flex çerçevesi
eşdeğer bir özellik kümesi sağlar. Flex ayrıca, bir uygulama veya bileşen daha kısıtlayıcı bir tarayıcı ortamında
çalışırken, daha sınırlı bir özellik setini korur. AIR sınıfları, AIR çalışma zamanı ortamının dışında çalışan bileşenlerde
veya uygulamalarda kullanılamaz.
Dışarı sürükleme hareketini destekleme
Dışarı sürükleme hareketini desteklemek için, mouseDown olayına yanıt olarak bir Clipboard nesnesi oluşturmalı ve
NativeDragManager.doDrag() yöntemine göndermelisiniz. Ardından uygulamanız, kullanıcı hareketi
tamamladığında veya iptal ettiğinde ne yapacağını belirlemek için başlatan nesnedeki nativeDragComplete olayını
dinleyebilir.
Verileri aktarım için hazırlama
Verileri veya bir nesneyi sürüklemeye hazırlamak için, bir Clipboard nesnesi oluşturun ve bir veya birden fazla
formatta aktarılacak bilgileri ekleyin. Otomatik olarak yerel pano formatlarına çevrilebilecek verileri iletmek için
standart veri formatlarını ve nesneleri iletmek için uygulama tanımlı formatları kullanabilirsiniz. Belirli bir formata
aktarılacak bilgileri dönüştürmek hesaplama yönünden pahalıysa, dönüştürmeyi gerçekleştirmesi için bir işleyici
işlevinin adını verebilirsiniz. Yalnızca alıcı bileşen veya uygulama ilişkilendirilen formatı okursa işlev çağrılır. Pano
formatları hakkında daha fazla bilgi için bkz. ActionScript 3.0 Programlama Kopyalama ve Yapıştırma bölümü
(http://www.adobe.com/go/learn_fl_cs4_programmingAS3_tr).
Aşağıdaki örnek birçok formatta bitmap içeren bir Clipboard nesnesinin nasıl oluşturulacağını gösterir: bir Bitmap
nesnesi, bir yerel bitmap formatı ve bitmapin ilk yüklendiği dosyayı içeren bir dosya listesi formatı:
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 131
Sürükle ve bırak
import flash.desktop.Clipboard;
import flash.display.Bitmap;
import flash.filesystem.File;
public function createClipboard(image:Bitmap, sourceFile:File):Clipboard{
var transfer:Clipboard = new Clipboard();
transfer.setData("CUSTOM_BITMAP", image, true); //Flash object by value and by reference
transfer.setData(ClipboardFormats.BITMAP_FORMAT, image.bitmapData, false);
transfer.setData(ClipboardFormats.FILE_LIST_FORMAT, new Array(sourceFile), false);
return transfer;
}
Dışarı sürükleme işlemi başlatma
Bir sürükleme işlemi başlatmak için, mouse down olayına yanıt olarak NativeDragManager.doDrag() yöntemini
çağırın. doDrag() yöntemi, aşağıdaki parametreleri alan statik bir yöntemdir:
Parametre
Açıklama
initiator
Sürükleme işleminin kaynaklandığı ve dragStart ve dragComplete olaylarını gönderen nesne. Başlatıcı
etkileşimli bir nesne olmalıdır.
clipboard
Aktarılacak verileri içeren Clipboard nesnesi. Clipboard nesnesine, sürükleme ve bırakma sırası boyunca
gönderilen NativeDragEvent nesnelerinde başvurulur.
dragImage
(İsteğe bağlı) Sürükleme sırasında görüntülenecek bir BitmapData nesnesi. Görüntü bir alpha değeri
belirtebilir. (Not: Microsoft Windows görüntüleri sürüklemek için her zaman sabit alfa soldurma uygular.)
offset
(İsteğe bağlı) Sürükleme görüntüsünün fare etkin noktasından uzaklığını belirten Point nesnesi. Sürükleme
görüntüsünü fare imlecine göre yukarı ve sola taşımak için negatif koordinatlar kullanın. Uzaklık
sağlanmamışsa, sürükleme görüntüsünün sol üst köşesi farenin etkin noktasında konumlandırılmıştır.
actionsAllowed
(İsteğe bağlı) Sürükleme işlemi için hangi eylemlerin (kopyala, taşı veya bağla) geçerli olduğunu belirten bir
NativeDragOptions nesnesi. Hiç argüman sağlanmamışsa, tüm eylemlere izin verilir. Olası bir sürükleme
hedefinin izin verilen eylemlerin hedef bileşenin amacına uygun olup olmadığını kontrol etmesini sağlamak
için NativeDragEvent nesnelerinde DragOptions nesnesine başvurulur. Örneğin “trash” bileşeni yalnızca
taşıma eylemine izin veren sürükleme hareketlerini kabul edebilir.
Aşağıdaki örnek bir dosyadan yüklenen bitmap nesnesi için sürükleme işleminin nasıl başlatılacağını anlatır. Örnek,
bir görüntü yükler ve bir mouseDown olayında sürükleme işlemini başlatır.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 132
Sürükle ve bırak
package
{
import flash.desktop.NativeDragManager;
import mx.core.UIComponent;
import flash.display.Sprite;
import flash.display.Loader;
import flash.system.LoaderContext;
import flash.net.URLRequest;
import flash.geom.Point;
import flash.desktop.Clipboard;
import flash.display.Bitmap;
import flash.filesystem.File;
import flash.events.Event;
import flash.events.MouseEvent;
public class DragOutExample extends UIComponent Sprite {
protected var fileURL:String = "app:/image.jpg";
protected var display:Bitmap;
private function init():void {
loadImage();
}
private function onMouseDown(event:MouseEvent):void {
var bitmapFile:File = new File(fileURL);
var transferObject:Clipboard = createClipboard(display, bitmapFile);
NativeDragManager.doDrag(this,
transferObject,
display.bitmapData,
new Point(-mouseX,-mouseY));
}
public function createClipboard(image:Bitmap, sourceFile:File):Clipboard {
var transfer:Clipboard = new Clipboard();
transfer.setData("bitmap",
image,
true);
// ActionScript 3 Bitmap object by value and by reference
transfer.setData(ClipboardFormats.BITMAP_FORMAT,
image.bitmapData,
false);
// Standard BitmapData format
transfer.setData(ClipboardFormats.FILE_LIST_FORMAT,
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 133
Sürükle ve bırak
new Array(sourceFile),
false);
// Standard file list format
return transfer;
}
private function loadImage():void {
var url:URLRequest = new URLRequest(fileURL);
var loader:Loader = new Loader();
loader.load(url,new LoaderContext());
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadComplete);
}
private function onLoadComplete(event:Event):void {
display = event.target.loader.content;
var flexWrapper:UIComponent = new UIComponent();
flexWrapper.addChild(event.target.loader.content);
addChild(flexWrapper);
flexWrapper.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
}
}
}
Dışarı sürükleme aktarımını tamamlama
Kullanıcı sürüklenen öğeyi fare düğmesini serbest bırakarak bıraktığında, başlatıcı nesne bir nativeDragComplete
olayı gönderir. Olay nesnesinin dropAction özelliğini kontrol edip uygun eylemi gerçekleştirebilirsiniz. Örneğin
eylem NativeDragAction.MOVE, olduğunda, kaynak öğeyi orijinal konumundan kaldırabilirsiniz. Kullanıcı, imleç
uygun bir bırakma hedefinin dışındayken, fare düğmesini serbest bırakarak sürükleme hareketini iptal edebilir.
Sürükleme yöneticisi iptal edilmiş bir hareket için dropAction özelliğini NativeDragAction.NONE olarak ayarlar.
İçeri sürükleme hareketini destekleme
İçeri sürükleme hareketini desteklemek için, uygulamanız (genelde uygulamanızın görsel bir bileşeni)
nativeDragEnter veya nativeDragOver olaylarına yanıt vermelidir.
Genel bir bırakma işleminin adımları
Bırakma işlemi için tipik olay sırası aşağıdaki gibidir:
1 Kullanıcı clipboard nesnesini bir bileşenin üzerine sürükler.
2 Bileşen bir nativeDragEnter olayı gönderir.
3 nativeDragEnter olay işleyici, kullanılabilir veri formatlarını ve izin verilen eylemleri kontrol etmek için olay
nesnesini inceler. Bileşen bırakmayı işleyebilirse, NativeDragManager.acceptDragDrop() öğesini çağırır.
4 NativeDragManager fare imlecini, nesnenin bırakıldığını gösterecek şekilde değiştirir.
5 Kullanıcı nesneyi bileşenin üzerine bırakır.
6 Alıcı bileşen bir nativeDragDrop olayı gönderir.
7 Alıcı bileşen, istenen formattaki verileri olay nesnesinin içindeki Clipboard nesnesinden okur.
8 Sürükleme hareketi bir AIR uygulamasının içinden kaynaklandıysa, başlatan etkileşimli nesne bir
nativeDragComplete olayı gönderir. Hareket AIR uygulamasının dışından kaynaklandıysa, geribildirim
gönderilmez.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 134
Sürükle ve bırak
Bir içeri sürükleme hareketini onaylama
Kullanıcı bir pano öğesini görsel bir bileşenin sınırlarının içine sürüklediğinde, bileşen nativeDragEnter ve
nativeDragOver olaylarını gönderir. Bileşenin pano öğesini kabul edip edemeyeceğini belirlemek için, bu olayların
işleyicileri, olay nesnesinin clipboard ve allowedActions özelliklerini kontrol edebilir. Olay işleyici, bileşenin
bırakma işlemini kabul edebileceğini bildirmek için alıcı bileşene bir başvuru ileterek
NativeDragManager.acceptDragDrop() yöntemini çağırmalıdır. Birden fazla kayıtlı olay dinleyicisi
acceptDragDrop() yöntemini çağırırsa, listedeki son işleyici önceliğe sahiptir. Fare kabul eden nesnenin
sınırlarından çıkıp nativeDragExit olayını tetikleyene kadar, acceptDragDrop() çağrısı geçerliliğini korur.
doDrag() öğesine iletilen allowedActions parametresinde birden fazla eyleme izin veriliyorsa, kullanıcı bir
değiştirici tuşunu basılı tutarak izin verilen eylemlerden hangilerini gerçekleştirmeyi düşündüğünü belirtebilir.
Sürükleme yöneticisi, kullanıcıya, bırakma işlemini tamamlasaydı hangi eylemin gerçekleşeceğini göstermek üzere
imleç görüntüsünü değiştirir. İstenen eylem, NativeDragEvent nesnesinin dropAction özelliği tarafından bildirilir.
Sürükleme hareketi için eylem kümesi yalnızca tavsiye amaçlıdır. Aktarımda yer alan bileşenlerin uygun davranışı
uygulaması gereklidir. Örneğin bir taşıma eylemini tamamlamak için, sürükleme başlatıcısı sürüklenen öğeyi
sürükleyebilir ve bırakma hedefi bunu ekleyebilir.
Sürükleme hedefiniz NativeDragManager sınıfının dropAction özelliğini ayarlayarak, sürükleme eylemini üç olası
eylemden biriyle sınırlayabilir. Kullanıcı klavyeyi kullanarak farklı bir eylem seçmeyi denerse, NativeDragManager
unavailable imleci görüntüler. Hem nativeDragEnter hem de nativeDragOver olayları için, işleyicilerdeki
dropAction özelliğini ayarlayın.
Aşağıdaki örnek, bir nativeDragEnter veya nativeDragOver olayı için olay işleyicisini gösterir. Sürüklenen pano
metin formatlı veriler içeriyorsa, bu işleyici yalnızca içeri sürükleme hareketini kabul eder.
import flash.desktop.NativeDragManager;
import flash.events.NativeDragEvent;
public function onDragIn(event:NativeDragEvent):void{
NativeDragManager.dropAction = NativeDragActions.MOVE;
if(event.clipboard.hasFormat(ClipboardFormats.TEXT_FORMAT)){
NativeDragManager.acceptDragDrop(this); //'this' is the receiving component
}
}
Bırakmayı tamamlama
Kullanıcı sürüklenen öğeyi hareketi kabul eden etkileşimli bir nesnenin üzerine bıraktığında, etkileşimli nesne bir
nativeDragDrop olayı gönderir. Bu olayın işleyicisi verileri olay nesnesinin clipboard özelliğinden ayıklayabilir.
Pano uygulama tanımlı bir format içerdiğinde, Clipboard nesnesinin getData() yöntemine iletilen transferMode
parametresi sürükleme yöneticisinin bir başvuruyu mu, yoksa nesnenin serileştirilmiş bir sürümünü mü
döndürdüğünü belirler.
Aşağıdaki örnek nativeDragDrop olayı için bir olay işleyicisini gösterir:
import flash.desktop.Clipboard;
import flash.events.NativeDragEvent;
public function onDrop(event:NativeDragEvent):void {
if (event.clipboard.hasFormat(ClipboardFormats.TEXT_FORMAT)) {
var text:String =
String(event.clipboard.getData(ClipboardFormats.TEXT_FORMAT,
ClipboardTransferMode.ORIGINAL_PREFERRED));
}
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 135
Sürükle ve bırak
Olay işleyicisinden çıkıldıktan sonra, Clipboard nesnesi geçerliliğini kaybeder. Nesneye veya verilerine erişme girişimi,
hata oluşmasına neden olur.
Bir bileşenin görünümünü güncelleme
Bir bileşen görünümünü NativeDragEvent olaylarına dayalı olarak güncelleyebilir. Aşağıdaki tablo tipik bir bileşenin
farklı olaylara yanıt olarak yapacağı değişiklikleri açıklar:
Olay
Açıklama
nativeDragStart
Başlatan etkileşimli nesne nativeDragStart olayını, sürükleme hareketinin bu etkileşimli nesneden
kaynaklandığına dair görsel geribildirim sağlamak için kullanabilir.
nativeDragUpdate
Başlatan etkileşimli nesne, nativeDragUpdate olayını, hareket sırasında durumunu güncellemek için
kullanabilir.
nativeDragEnter
Olası alıcı etkileşimli nesne bu olayı odağı kendine çekmek veya bırakma işlemini kabul edip edemeyeceğini
görsel olarak belirtmek için kullanabilir.
nativeDragOver
Olası alıcı etkileşimli nesne bu olayı, farenin sokak haritası görüntüsü gibi karmaşık bir bileşenin "sıcak"
bölgesine girmesi gibi farenin etkileşimli nesne içerisindeki hareketine yanıt vermek için kullanabilir.
nativeDragExit
Olası alıcı etkileşimli nesne bu olayı, bir sürükleme hareketi sınırlarının dışına taşındığında durumunu geri
yüklemek için kullanabilir.
nativeDragComplete
Alıcı etkileşimli nesne bu olayı, listeden bir öğeyi kaldırmak gibi ilişkilendirilen veri modelini güncellemek veya
görsel durumunu geri yüklemek için kullanabilir.
İçeri sürükleme hareketi sırasında fare konumunu izleme
Sürükleme hareketi bir bileşenin üzerinde kaldığında, bu bileşen nativeDragOver olaylarını gönderir. Bu olaylar her
birkaç milisaniyede bir ve farenin her hareketinde gönderilir. nativeDragOver olay nesnesi, farenin bileşen
üzerindeki konumunu belirlemek için kullanılabilir. Fare konumuna erişimi olmak, alıcı bileşenin karmaşık olduğu,
ancak alt bileşenlerden oluşmadığı durumlarda yararlı olabilir. Örneğin, uygulamanız bir sokak haritası içeren bir
bitmap görüntülediyse ve kullanıcı içlerine bilgi sürüklediğinde haritadaki bölgelerin vurgulanmasını istediyseniz,
harita içinde fare konumunu izlemek için nativeDragOver olayında bildirilen fare koordinatlarını kullanabilirsiniz.
HTML Sürükle ve bırak
HTML tabanlı bir uygulamaya veya uygulamadan (veya bir HTMLLoader öğesinde görüntülenen HTML'e veya
HTML'den) veri sürüklemek için, HTML drag ve drop olaylarını kullanabilirsiniz. HTML sürükle ve bırak API'si
sayesinde HTML içeriğindeki DOM öğelerine ve bu öğelerden veri sürükleyebilirsiniz.
Not: Ayrıca, HTML içeriğine sahip HTMLLoader nesnesindeki olayları dinleyerek de AIR NativeDragEvent ve
NativeDragManager API'lerini kullanabilirsiniz. Ancak HTML API'si HTML DOM ile daha başarılı bir şekilde
entegredir ve size, varsayılan davranışın kontrolünü sağlar.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 136
Sürükle ve bırak
Varsayılan sürükle ve bırak davranışı
HTML ortamı metin, görüntüler ve URL'leri de içeren sürükle ve bırak hareketleri için varsayılan davranış sağlar.
Varsayılan davranışı kullanarak her zaman bu tür verileri bir öğenin dışına sürükleyebilirsiniz. Ancak, bir öğeye
yalnızca metin sürükleyebilirsiniz ve yalnızca sayfanın düzenlenebilir bir bölgesinde bulunan öğelere
sürükleyebilirsiniz. Bir sayfanın düzenlenebilir bölgeleri arasında veya içinde metni sürüklediğinizde, varsayılan
davranış bir taşıma eylemi gerçekleştirir. Düzenlenemeyen bir bölgeden veya uygulamanın dışından düzenlenebilir
bölgeye metin sürüklediğinizde, varsayılan davranış bir kopyalama eylemi gerçekleştirir.
drag-and-drop olaylarını kendiniz işleyerek varsayılan davranışı geçersiz kılabilirsiniz. Varsayılan davranışı iptal
etmek için, drag-and-drop olayları için gönderilen nesnelerin preventDefault() yöntemlerini çağırmalısınız.
Seçilen eylemi gerçekleştirmek için gerekli olduğundan, verileri bırakma hedefine ekleyebilir ve sürükleme
kaynağından kaldırabilirsiniz.
Varsayılan olarak kullanıcı istediği metni seçip sürükleyebilir ve görüntüleri ve linkleri sürükleyebilir. -webkit-userselect WebKit CSS özelliğini, bir HTML öğesinin nasıl seçilebileceğini kontrol etmek için kullanabilirsiniz. Örneğin
-webkit-user-select öğesini none olarak ayarlarsanız, öğe içerikleri seçilebilir olmaz ve sürüklenemez. -webkituser-drag CSS özelliğini, bir öğenin bütün olarak sürüklenip sürüklenemeyeceğini kontrol etmek için de
kullanabilirsiniz. Ancak öğenin içerikleri ayrı öğeler olarak kabul edilir. Kullanıcı hala metnin seçili bir kısmını
sürükleyebilir. Daha fazla bilgi için bkz. “CSS Uzantıları” sayfa 221.
HTML'de sürükleme ve bırakma olayları
Bir sürükleme işleminin kaynaklandığı başlatıcı öğe tarafından gönderilen olaylar şunlardır:
Olay
Açıklama
dragstart
Kullanıcı sürükleme hareketini başlattığında gönderilir. Bu olayın işleyicisi gerekirse olay nesnesinin
preventDefault() yöntemini çağırarak sürüklemeyi engelleyebilir. Sürüklenen verilerin kopyalanabildiğini,
verilere link verilebildiğini veya taşınabildiğini kontrol etmek için, effectAllowed özelliğini ayarlayın. Seçilen
metin, görüntüler ve bağlantılar varsayılan davranış tarafından panoya konur, ancak olay nesnesinin
dataTransfer özelliğini kullanarak sürükleme hareketi için farklı veriler ayarlayabilirsiniz.
drag
Sürükleme hareketi boyunca kesintisiz gönderilir.
dragend
Kullanıcı sürükleme hareketini bitirmek için fare düğmesini serbest bıraktığında gönderilir.
Sürükleme hedefi tarafından gönderilen olaylar şunlardır:
Olay
Açıklama
dragover
Sürükleme hareketi öğenin sınırları içerisinde kaldığı sürece kesintisiz gönderilir. Bu olayın işleyicisi
dataTransfer.dropEffect özelliğini, kullanıcı fare düğmesini serbest bırakırsa bırakmanın kopyalama, taşıma
veya link verme eylemlerinden hangisiyle sonuçlanacağını göstermek için ayarlamalıdır.
dragenter
Sürükleme hareketi öğenin sınırlarına girdiğinde gönderilir.
Bir dragenter olay işleyicisindeki dataTransfer nesnesinin herhangi bir özelliğini değiştirirseniz, bu
değişiklikler bir sonraki dragover olayı tarafından hızla geçersiz kılınır. Diğer yandan, bir dragenter ve ilk
dragover olayı arasında, farklı özellikler ayarlanmışsa imlecin yanıp sönmesine neden olabilecek kısa bir
gecikme yaşanır. Birçok durumda, her iki olay için de aynı olay işleyicisini kullanabilirsiniz.
dragleave
Sürükleme hareketi öğenin sınırlarından çıktığında gönderilir.
drop
Kullanıcı verileri öğeye bıraktığında gönderilir. Sürüklenen verilere yalnızca bu olayın işleyicisinde erişilebilir.
Bu olaylara yanıt olarak gönderilen olay nesnesi, mouse olayına benzerdir. (clientX, clientY) ve (screenX,
screenY) gibi mouse olayı özelliklerini, fare konumunu belirlemek için kullanabilirsiniz.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 137
Sürükle ve bırak
Bir drag olayı nesnesinin en önemli özelliği, sürüklenen verileri içeren dataTransfer öğesidir. dataTransfer nesnesi
aşağıdaki özelliklere ve yöntemlere sahiptir:
Özellik veya Yöntem
Açıklama
effectAllowed
Sürüklemenin kaynağı tarafından izin verilen efekt. Genellikle dragstart olayının işleyicisi bu değeri ayarlar. Bkz.
“HTML'de sürükleme efektleri” sayfa 138.
dropEffect
Hedef veya kullanıcı tarafından seçilen efekt. dragover veya dragenter olay işleyicisinde dropEffect
öğesini ayarlarsanız, AIR, fare imlecini, kullanıcı fare düğmesini serbest bıraktığında oluşacak efekti gösterecek
şekilde günceller. dropEffect kümesi izin verilen efektlerden biriyle eşleşmezse, bırakma işlemine izin
verilmez ve kullanılamaz imleci görüntülenir. En son dragover veya dragenter olayına yanıt olarak bir
dropEffect ayarlamadıysanız, kullanıcı standart işletim sistemi değiştirici tuşlarını kullanarak izin verilen
efektler arasından seçim yapabilir.
Son efekt, dragend için gönderilen nesnenin dropEffect özelliği tarafından bildirilir. Kullanıcı fare
düğmesini uygun hedefin dışında serbest bırakarak bırakma işlemini iptal ederse, dropEffectnone olarak
ayarlanır.
types
dataTransfer nesnesinde mevcut olan her veri formatı için MIME türü dizeleri içeren bir dizi.
getData(mimeType)
mimeType parametresi tarafından belirtilen formattaki verileri alır.
getData() yöntemi yalnızca drop olayına yanıt olarak çağrılabilir.
setData(mimeType)
dataTransfer öğesine mimeType parametresi tarafından belirtilen formattaki verileri ekler. Her MIME türü
için setData() öğesini çağırarak birden çok formatta veri ekleyebilirsiniz. Varsayılan sürükleme davranışı
tarafından dataTransfer nesnesine yerleştirilen tüm veriler temizlenir.
setData() yöntemi yalnızca dragstart olayına yanıt olarak çağrılabilir.
clearData(mimeType)
mimeType parametresi tarafından belirtilen formattaki tüm verileri temizler.
setDragImage(image,
offsetX, offsetY)
Özel bir sürükleme görüntüsü ayarlar. setDragImage() yöntemi yalnızca dragstart olayına yanıt olarak
çağrılabilir.
HTML sürükle ve bırak için MIME türleri
Bir HTML drag-and-drop olayının dataTransfer nesnesiyle kullanılacak MIME türleri şunlardır:
Veri formatı
MIME türü
Metin
"text/plain"
HTML
"text/html"
URL
"text/uri-list"
Bitmap
"image/x-vnd.adobe.air.bitmap"
Dosya listesi
"application/x-vnd.adobe.air.file-list"
Uygulama tanımlı dizeler de dahil olmak üzere diğer MIME dizelerini de kullanabilirsiniz. Ancak diğer uygulamalar
aktarılan verileri tanımayabilir veya kullanmayabilir. dataTransfer nesnesine beklenen formatta veriler eklemek
sizin sorumluluğunuzdadır.
Önemli: Yalnızca uygulama sanal alanında kod çalıştırma, bırakılan dosyalara erişebilir. Uygulama dışı sanal alanda
bir File nesnesinin herhangi bir özelliğini okuma veya ayarlama girişiminde bulunmak bir güvenlik hatasına neden olur.
Daha fazla bilgi için bkz. “Uygulama dışı HTML sanal alanlarındaki dosya bırakmaları işleme” sayfa 141.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 138
Sürükle ve bırak
HTML'de sürükleme efektleri
Sürükleme hareketinin başlatıcısı, dragstart olayının işleyicisindeki dataTransfer.effectAllowed özelliğini
ayarlayarak izin verilen sürükleme efektlerini sınırlandırabilir. Aşağıdaki dize değerleri kullanılabilir:
Dize değeri
Açıklama
"none"
Hiçbir sürükleme hareketine izin verilmez.
"copy"
Orijinali yerinde kalarak veriler hedefe kopyalanır.
"link"
Orijinaline giden bir link kullanılarak veriler bırakma hedefiyle paylaşılır.
"move”
Veriler hedefe kopyalanır ve orijinal konumundan kaldırılır.
"copyLink"
Veriler kopyalanabilir veya verilere link verilebilir.
"copyMove"
Veriler kopyalanabilir veya taşınabilir.
"linkMove"
Verilere link verilebilir veya veriler taşınabilir.
"all"
Veriler kopyalanabilir, taşınabilir veya verilere link verilebilir. All, varsayılan davranışı engellediğinizde oluşan
varsayılan efekttir.
Sürükleme hareketinin hedefi, kullanıcı bırakmayı tamamlarsa gerçekleştirilen eylemi göstermek için
dataTransfer.dropEffect özelliğini ayarlayabilir. Bırakma efekti izin verilen efektlerden biriyse, sistem uygun
kopyala, taşı veya link ver imlecini görüntüler. Değilse, sistem kullanılamaz imlecini görüntüler. Hedef tarafından
bırakma efekti ayarlanmamışsa, kullanıcı değiştirici tuşlarını kullanarak izin verilen eylemler arasından seçim
yapılabilir.
Hem dragover hem de dragenter olaylarının işleyicilerindeki dropEffect değerini ayarlayın:
function doDragStart(event) {
event.dataTransfer.setData("text/plain","Text to drag");
event.dataTransfer.effectAllowed = "copyMove";
}
function doDragOver(event) {
event.dataTransfer.dropEffect = "copy";
}
function doDragEnter(event) {
event.dataTransfer.dropEffect = "copy";
}
Not: dragenter için işleyicideki dropEffect özelliğini her zaman ayarlamanız gerekse de, sonraki dragover olayının
özelliği varsayılan değere sıfırladığını unutmayın. Her iki olaya yanıt olarak da dropEffect öğesini ayarlayın.
Bir HTML öğesinden veri sürüklemek
Varsayılan davranış, bir HTML sayfasındaki içeriğin çoğunun sürüklenerek kopyalanmasına izin verir.
Sürüklenmesine izin verilen içeriği, -webkit-user-select ve -webkit-user-drag CSS özelliklerini kullanarak
kontrol edebilirsiniz.
dragstart olayı için işleyicideki varsayılan dışarı sürükleme davranışını geçersiz kılın. Sürükleme hareketine kendi
verilerinizi koymak için, olay nesnesinin dataTransfer özelliğinin setData() yöntemini çağırın.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 139
Sürükle ve bırak
Varsayılan davranışa bağlı olmadığınızda bir kaynak nesnenin hangi sürükleme efektlerini desteklediğini belirtmek
için, dragstart olayı için gönderilen olay nesnesinin dataTransfer.effectAllowed özelliğini ayarlayın.
İstediğiniz efekt kombinasyonunu seçebilirsiniz. Örneğin bir kaynak öğesi hem kopyalama hem de link verme
efektlerini destekliyorsa, özelliği "copyLink" olarak ayarlayın.
Sürüklenen verileri ayarlama
dataTransfer özelliğini kullanarak sürükleme hareketi için verileri dragstart olayının işleyicisine ekleyin. Panoya
veri koymak için, aktarılacak MIME türünü ve verileri ileterek dataTransfer.setData() yöntemini kullanın.
Örneğin uygulamanızda imageOfGeorge kimliğine sahip bir görüntü öğesi varsa, aşağıdaki dragstart olay işleyicisini
kullanabilirsiniz. Bu örnek George'un bir resminin birçok veri formatındaki temsillerini ekler, bu da diğer
uygulamaların sürüklenen verileri kullanabilme olasılığını artırır.
function dragStartHandler(event){
event.dataTransfer.effectAllowed = "copy";
var dragImage = document.getElementById("imageOfGeorge");
var dragFile = new air.File(dragImage.src);
event.dataTransfer.setData("text/plain","A picture of George");
event.dataTransfer.setData("image/x-vnd.adobe.air.bitmap", dragImage);
event.dataTransfer.setData("application/x-vnd.adobe.air.file-list",
new Array(dragFile));
}
Not: dataTransfer nesnesinin setData() yöntemini çağırdığınızda, varsayılan sürükle ve bırak davranışı tarafından
hiç veri eklenmez.
Bir HTML öğesine veri sürükleme
Varsayılan davranış metnin yalnızca sayfanın düzenlenebilir bölgelerine sürüklenmesine izin verir. Öğenin açılış
etiketine contenteditable niteliği eklenerek bir öğenin ve alt öğelerinin düzenlenebilir hale getirilebileceğini
belirtebilirsiniz. Ayrıca, belge nesnesi designMode özelliğini "on" yaparak bir belgenin tamamını düzenlenebilir hale
getirebilirsiniz.
Sürüklenen verileri kabul edebilen herhangi bir öğe için dragenter, dragover ve drop olaylarını işleyerek, bir sayfada
alternatif içeri sürükleme davranışını destekleyebilirsiniz.
İçeri sürüklemeyi etkinleştirme
İçeri sürükleme hareketini işlemek için, öncelikle varsayılan davranışı iptal etmeniz gerekir. Bırakma hedefleri olarak
kullanmak istediğiniz herhangi bir HTML öğesindeki dragenter ve dragover olaylarını dinleyin. Bu olayların
işleyicilerinde, gönderilen olay nesnesinin preventDefault() yöntemini çağırın. Varsayılan davranışın iptal edilmesi
sayesinde, düzenlenemeyen bölgeler de bırakma işlemi alabilir.
Bırakılan verileri alma
ondrop olayı için işleyicideki bırakılan verilere erişebilirsiniz:
function doDrop(event){
droppedText = event.dataTransfer.getData("text/plain");
}
Panoya verileri okumak için, okunacak veri formatının MIME türünü ileterek dataTransfer.getData() yöntemini
kullanın. Hangi veri formatlarının kullanılabilir olduğunu, dataTransfer nesnesinin types özelliğini kullanarak
bulabilirsiniz. types dizisi, kullanılabilir her formatın MIME türü dizesini içerir.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 140
Sürükle ve bırak
dragenter veya dragover olaylarında varsayılan davranışı iptal etiğinizde, bırakılan tüm verileri belgede uygun yere
koymaktan siz sorumlu olursunuz. Bir fare konumunu bir öğenin içindeki ekleme noktasına dönüştürebilecek API
mevcut değildir. Bu sınırlama, ekleme türü sürükleme hareketlerinin uygulanmasını zorlaştırabilir.
Örnek: Varsayılan HTML içeri sürükleme davranışını geçersiz kılma
Bu örnek, bırakılan öğede mevcut olan her veri formatını gösteren bir tablo görüntüleyen bir bırakma hedefi uygular.
Varsayılan davranış metnin, linklerin ve görüntülerin uygulama içerisinde sürüklenmesini sağlamak için kullanılır.
Örnek, bırakma hedefi olarak işlev gören div öğesi için varsayılan içeri sürükleme davranışını geçersiz kılar.
Düzenlenemeyen içeriğin içeri sürükleme hareketini kabul etmesini sağlamada anahtar adım, hem dragenter hem de
dragover olayları için gönderilen olay nesnesinin preventDefault() yöntemini çağırmaktır. İşleyici, drop olayına
yanıt olarak, aktarılan verileri HTML satır öğesine dönüştürür ve satırı görüntüleme için bir tabloya ekler.
<html>
<head>
<title>Drag-and-drop</title>
<script language="javascript" type="text/javascript" src="AIRAliases.js"></script>
<script language="javascript">
function init(){
var target = document.getElementById('target');
target.addEventListener("dragenter", dragEnterOverHandler);
target.addEventListener("dragover", dragEnterOverHandler);
target.addEventListener("drop", dropHandler);
var source = document.getElementById('source');
source.addEventListener("dragstart", dragStartHandler);
source.addEventListener("dragend", dragEndHandler);
emptyRow = document.getElementById("emptyTargetRow");
}
function dragStartHandler(event){
event.dataTransfer.effectAllowed = "copy";
}
function dragEndHandler(event){
air.trace(event.type + ": " + event.dataTransfer.dropEffect);
}
function dragEnterOverHandler(event){
event.preventDefault();
}
var emptyRow;
function dropHandler(event){
for(var prop in event){
air.trace(prop + " = " + event[prop]);
}
var row = document.createElement('tr');
row.innerHTML = "<td>" + event.dataTransfer.getData("text/plain") + "</td>" +
"<td>" + event.dataTransfer.getData("text/html") + "</td>" +
"<td>" + event.dataTransfer.getData("text/uri-list") + "</td>" +
"<td>" + event.dataTransfer.getData("application/x-vnd.adobe.air.file-list") +
"</td>";
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 141
Sürükle ve bırak
var imageCell = document.createElement('td');
if((event.dataTransfer.types.toString()).search("image/x-vnd.adobe.air.bitmap") > 1){
imageCell.appendChild(event.dataTransfer.getData("image/xvnd.adobe.air.bitmap"));
}
row.appendChild(imageCell);
var parent = emptyRow.parentNode;
parent.insertBefore(row, emptyRow);
}
</script>
</head>
<body onLoad="init()" style="padding:5px">
<div>
<h1>Source</h1>
<p>Items to drag:</p>
<ul id="source">
<li>Plain text.</li>
<li>HTML <b>formatted</b> text.</li>
<li>A <a href="http://www.adobe.com">URL.</a></li>
<li><img src="icons/AIRApp_16.png" alt="An image"/></li>
<li style="-webkit-user-drag:none;">
Uses "-webkit-user-drag:none" style.
</li>
<li style="-webkit-user-select:none;">
Uses "-webkit-user-select:none" style.
</li>
</ul>
</div>
<div id="target" style="border-style:dashed;">
<h1 >Target</h1>
<p>Drag items from the source list (or elsewhere).</p>
<table id="displayTable" border="1">
<tr><th>Plain text</th><th>Html text</th><th>URL</th><th>File list</th><th>Bitmap
Data</th></tr>
<tr
id="emptyTargetRow"><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</
td></tr>
</table>
</div>
</div>
</body>
</html>
Uygulama dışı HTML sanal alanlarındaki dosya bırakmaları işleme
Uygulama dışı içerik, dosyalar bir AIR uygulamasına sürüklendiğinde ortaya çıkan File nesnelerine erişemez. Bu File
nesnelerinden birini sanal alan köprüsü kullanarak uygulama içeriğine göndermek de mümkün değildir. (Nesne
özelliklerine serileştirme sırasında erişilmelidir.) Ancak yine de HTMLLoader nesnesinde AIR nativeDragDrop
olaylarını dinleyerek uygulamanızdaki dosyaları bırakabilirsiniz.
Normalde bir kullanıcı uygulama dışı içerik barındıran bir çerçeveye dosya bırakırsa, drop olayı alt öğeden üst öğeye
yayılmaz. Ancak HTMLLoader (bir AIR uygulamasındaki tüm HTML içeriğinin konteyneri) tarafından gönderilen
olaylar HTML olay akışının bir parçası olmadığı için, hala uygulama içeriğindeki drop olayını alabilirsiniz.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 142
Sürükle ve bırak
Bir dosya bırakma için olayı almak üzere, üst belge, window.htmlLoader tarafından sağlanan başvuruyu kullanarak
HTMLLoader nesnesine bir olay dinleyicisi ekler:
window.htmlLoader.addEventListener("nativeDragDrop",function(event){
var filelist = event.clipboard.getData(air.ClipboardFormats.FILE_LIST_FORMAT);
air.trace(filelist[0].url);
});
Aşağıdaki örnek, uzak sanal alana alt sayfa yükleyen bir üst belge kullanır (http://localhost/). Üst öğe HTMLLoader
nesnesindeki nativeDragDrop olayını dinler ve dosya url'sini izler.
<html>
<head>
<title>Drag-and-drop in a remote sandbox</title>
<script language="javascript" type="text/javascript" src="AIRAliases.js"></script>
<script language="javascript">
window.htmlLoader.addEventListener("nativeDragDrop",function(event){
var filelist = event.clipboard.getData(air.ClipboardFormats.FILE_LIST_FORMAT);
air.trace(filelist[0].url);
});
</script>
</head>
<body>
<iframe src="child.html"
sandboxRoot="http://localhost/"
documentRoot="app:/"
frameBorder="0" width="100%" height="100%">
</iframe>
</body>
</html>
Alt belge, HTML dragenter ve dragover olay işleyicilerindeki Event nesnesi preventDefault() yöntemini
engelleyerek geçerli bir bırakma hedefi sunmalıdır, yoksa drop olayı gerçekleşemez.
<html>
<head>
<title>Drag and drop target</title>
<script language="javascript" type="text/javascript">
function preventDefault(event){
event.preventDefault();
}
</script>
</head>
<body ondragenter="preventDefault(event)" ondragover="preventDefault(event)">
<div>
<h1>Drop Files Here</h1>
</div>
</body>
</html>
Daha fazla bilgi için bkz. “HTML ve JavaScript'te programlama” sayfa 223.
143
Bölüm 16: Kopyalama ve yapıştırma
Sistem panosundan ve sistem panosuna bilgi yapıştırmak için pano API'sindeki sınıfları kullanın. Adobe® AIR™
uygulamasına veya Adobe® AIR™ uygulamasından aktarılabilecek veri formatları şunlardır:
• Bitmapler
• Dosyalar
• Metin
• HTML formatlı metin
• Zengin Metin Formatlı veriler
• URL dizeleri
• Serileştirilmiş nesneler
• Nesne başvuruları (yalnızca kaynak uygulama içinde geçerli)
Adobe Flash Player 10, AIR 1.0'da tanıtılan kopyalama ve yapıştırma işlevini ekledi. Bu bölümde, Adobe AIR'e özgü
kopyalama ve yapıştırma işlevi tartışılmaktadır. Bu paylaşımlı işlev hakkındaki ayrıntılar için bkz. Kopyalama ve
yapıştırma (Adobe ActionScript 3.0 Programlama kitabı.
Kopyalama ve yapıştırma hakkında ek çevrimiçi bilgiler
Bu kaynaklardan kopyalama ve yapıştırma hakkında daha fazla bilgi edinebilirsiniz:
Hızlı Başlangıçlar (Adobe AIR Geliştirici Bağlantısı)
• Sürükle ve bırak ve kopyala ve yapıştır işlevlerini destekleme
Dil Başvurusu
• Clipboard
• ClipboardFormats
• ClipboardTransferMode
Daha Fazla Bilgi
• Kopyalama ve yapıştırma (Adobe ActionScript 3.0 Programlama kitabı)
• Flash için Adobe AIR Geliştirici Bağlantısı ('AIR kopyalama ve yapıştırma'yı arayın)
HTML kopyala ve yapıştır
HTML ortamı kopyalama ve yapıştırma için kendi olay kümesini ve varsayılan davranışı sağlar. Yalnızca uygulama
sanal alanındaki kod çalıştırma, AIR Clipboard.generalClipboard nesnesini kullanarak sistem panosuna
doğrudan erişebilir. Uygulama dışı bir sanal alandaki JavaScript kodu, HTML belgesindeki bir öğe tarafından
gönderilen copy veya paste olaylarından birine yanıt olarak gönderilen olay nesnesini kullanarak panoya erişebilir.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 144
Kopyalama ve yapıştırma
Copy ve paste olayları şunları içerir: copy, cut ve paste. Bu olaylar için gönderilen nesne clipboardData özelliğiyle
panoya erişim sağlar.
Varsayılan Davranış
Varsayılan olarak AIR, klavye kısayolu veya bağlam menüsü tarafından oluşturulabilen kopyala komutuna yanıt
olarak seçili öğeleri kopyalar. Düzenlenebilir bölgeler içerisinde, AIR, kes komutuna yanıt olarak metni keser veya
yapıştır komutuna yanıt olarak metni imlecin bulunduğu yere veya seçime yapıştırır.
Varsayılan davranışı engellemek için, olay işleyiciniz gönderilen olay nesnesinin preventDefault() yöntemini
çağırabilir.
olay nesnesinin clipboardData özelliğini kullanma
Copy veya paste olaylarından birinin sonucu olarak gönderilen olay nesnesinin clipboardData özelliği sayesinde,
pano verilerini okuyabilir ve yazabilirsiniz.
Bir copy veya cut olayını işlerken panoya yazmak için, kopyalanacak verileri ve MIME türünü ileten clipboardData
nesnesinin setData() yöntemini kullanın:
function customCopy(event){
event.clipboardData.setData("text/plain", "A copied string.");
}
Yapıştırılan verilere erişmek için, veri formatının MIME türünü ileten clipboardData nesnesinin getData()
yöntemini kullanabilirsiniz. Kullanılabilir formatlar types özelliği tarafından bildirilir.
function customPaste(event){
var pastedData = event.clipboardData("text/plain");
}
getData() yöntemine ve types özelliğine yalnızca paste olayı tarafından gönderilen olay nesnesinde erişilebilir.
Aşağıdaki örnek bir HTML sayfasında varsayılan kopyalama ve yapıştırma davranışının nasıl geçersiz kılınacağını
gösterir. copy olay işleyicisi, kopyalanan metni italik yapar ve HTML metni olarak panoya yapıştırır. cut olay işleyicisi
seçili verileri panoya kopyalar ve belgeden kaldırır. paste işleyicisi pano içeriklerini HTML olarak ekler ve eklemeyi
kalın metin olarak biçimlendirir.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 145
Kopyalama ve yapıştırma
<html>
<head>
<title>Copy and Paste</title>
<script language="javascript" type="text/javascript">
function onCopy(event){
var selection = window.getSelection();
event.clipboardData.setData("text/html","<i>" + selection + "</i>");
event.preventDefault();
}
function onCut(event){
var selection = window.getSelection();
event.clipboardData.setData("text/html","<i>" + selection + "</i>");
var range = selection.getRangeAt(0);
range.extractContents();
event.preventDefault();
}
function onPaste(event){
var insertion = document.createElement("b");
insertion.innerHTML = event.clipboardData.getData("text/html");
var selection = window.getSelection();
var range = selection.getRangeAt(0);
range.insertNode(insertion);
event.preventDefault();
}
</script>
</head>
<body onCopy="onCopy(event)"
onPaste="onPaste(event)"
onCut="onCut(event)">
<p>Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium
doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore
veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam
voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur
magni dolores eos qui ratione voluptatem sequi nesciunt.</p>
</body>
</html>
Kopyalama ve yapıştırma için menü komutları ve tuş
girişleri
Kopyalama ve yapıştırma işlevleri genellikle menü işlevleri ve klavye kısayollarıyla tetiklenir. OS X'te, kopyala ve
yapıştır komutlarına sahip bir düzenleme menüsü işletim sistemi tarafından otomatik olarak oluşturulur, ancak kendi
kopyalama ve yapıştırma işlevlerinizi eklemek için bu menü komutlarına dinleyici eklemeniz gerekir. Windows'ta,
sistem kromunu kullanan herhangi bir pencereye yerel bir düzenleme menüsü ekleyebilirsiniz. (Ayrıca Flex ve
ActionScript ile yerel olmayan menüler oluşturabilirsiniz veya HTML içeriğinde DHTML kullanabilirsiniz, ancak bu
konu, bu açıklamanın kapsamına girmemektedir.)
Klavye kısayollarına yanıt olarak kopyala ve yapıştır komutlarını tetiklemek için, yerel bir uygulamada veya pencere
menüsünde ilgili komut öğelerine tuş eşdeğerleri atayabilir veya doğrudan tuş girişlerini dinleyebilirsiniz.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 146
Kopyalama ve yapıştırma
Bir menü komutuyla kopyalama veya yapıştırma işlemi başlatma
Kopyalama veya yapıştırma işlemini bir menü komutuyla tetiklemek için, işleyici işlevlerinizi çağıran menü öğelerinde
select olayı için dinleyiciler eklemeniz gerekir.
İşleyici işleviniz çağrıldığında, sahnenin focus özelliği kullanılarak kopyalanacak veya yapıştırılacak nesneyi
bulabilirsiniz. Ardından, kopyalama, kesme veya yapıştırma mantığını yürütmek için odaklanılan nesnenin ilgili
yöntemini (veya hiçbir nesnenin odağı yoksa genel bir geri dönme yöntemini) çağırabilirsiniz. Örneğin aşağıdaki copy
olay işleyicisi, odaklanılan nesnenin doğru türde olup olmadığını, bu durumda Scrap adlı bir sınıfı kontrol eder ve daha
sonra nesnenin doCopy() yöntemini çağırır.
function copyCommand(event:Event):void{
if(NativeApplication.nativeApplication.activeWindow.stage.focus is Scrap){
Scrap(NativeApplication.nativeApplication.activeWindow.stage.focus).doCopy();
} else {
NativeApplication.nativeApplication.copy();
}
}
Örnekteki copyCommand() odaklanılan nesnenin sınıfını tanımazsa, NativeApplication copy() yöntemini çağırır.
NativeApplication copy() yöntemi odaklanılan nesneye dahili bir kopyala komutu gönderir. Nesne kopyalama ve
yapıştırma işlevini dahili olarak uygulayan yerleşik bir sınıfsa, nesne komutu gerçekleştirir. Şu anda yerleşik olan
sınıflar yalnızca Textfield ve HTMLLoader sınıflarıdır. Diğer etkileşimli nesneler copy olayını gönderir. Kesme,
yapıştırma, tümünü seçme ve yalnızca TextArea için temizleme, geri alma ve yineleme için benzer komutlar
kullanılabilir.
HTML içeriğinde varsayılan kopyalama ve yapıştırma davranışı, NativeApplication düzenleme komutları kullanılarak
tetiklenebilir. Aşağıdaki örnek düzenlenebilir bir HTML belgesi için bir düzenleme menüsü oluşturur:
Bir önceki örnek Mac OS X'te uygulama menüsünü değiştirir, ancak var olan öğeleri bularak ve onlara olay
dinleyicileri ekleyerek de varsayılan Düzen menüsünü kullanabilirsiniz.
Kopyala veya yapıştır komutunu çağırmak için bir bağlam menüsü kullanırsanız, hangi nesnenin kopyala veya yapıştır
komutu için uygun hedef olduğunu belirlemek için menü açıldığında veya bir öğe seçildiğinde gönderilen
ContextMenuEvent nesnesinin contextMenuOwner özelliğini kullanabilirsiniz.
Mac OS X'te varsayılan menü öğelerini bulma
Mac OS X'teki uygulama menüsünde varsayılan düzen menüsünü ve belirli kopyala, kes ve yapıştır komut öğelerini
bulmak için, NativeMenuItem nesnelerinin label özelliğini kullanarak menü hiyerarşisi içinde arama yapabilirsiniz.
Örneğin aşağıdaki işlev bir adı alır ve menüde eşleşen etikete sahip öğeyi bulur.
private function findItemByName(menu:NativeMenu,
name:String,
recurse:Boolean = false):NativeMenuItem{
var searchItem:NativeMenuItem = null;
for each (var item:NativeMenuItem in menu.items){
if(item.label == name){
searchItem = item;
break;
}
if((item.submenu != null) && recurse){
searchItem = findItemByName(item.submenu, name);
}
}
return searchItem;
}
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 147
Kopyalama ve yapıştırma
Aramaya alt menüleri de dahil etmek için recurse parametresini true olarak veya yalnızca iletilen menüyü dahil
etmek için false olarak ayarlayabilirsiniz.
Tuş girişiyle kopyala veya yapıştır komutu başlatma
Uygulamanız kopyalama ve yapıştırma için yerel pencere veya uygulama menüleri kullanıyorsa, klavye kısayollarını
uygulamak için menü öğelerine tuş eşdeğerleri ekleyebilirsiniz.
Uygulamanız kopyalama ve yapıştırma için yerel pencere veya uygulama menüleri kullanıyorsa, klavye kısayollarını
uygulamak için menü öğelerine tuş eşdeğerleri ekleyebilirsiniz. Aksi takdirde, aşağıdaki örnekte gösterildiği gibi
kendiniz ilgili tuş girişlerini dinleyebilirsiniz.
private function init():void{
stage.addEventListener(KeyboardEvent.KEY_DOWN, keyListener);
}
private function keyListener(event:KeyboardEvent):void{
if(event.ctrlKey){
event.preventDefault();
switch(String.fromCharCode(event.charCode)){
case "c":
NativeApplication.nativeApplication.copy();
break;
case "x":
NativeApplication.nativeApplication.cut();
break;
case "v":
NativeApplication.nativeApplication.paste();
break;
case "a":
NativeApplication.nativeApplication.selectAll();
break;
case "z":
NativeApplication.nativeApplication.undo();
break;
case "y":
NativeApplication.nativeApplication.redo();
break;
}
}
}
HTML içeriğinde kopyalama ve yapıştırma için klavye kısayolları varsayılan olarak uygulanır. Kopyalama ve
yapıştırma için sıklıkla kullanılan tüm tuş girişlerini, anahtar olay dinleyicisi kullanarak bindirmek mümkün değildir.
Varsayılan davranışı geçersiz kılmanız gerekiyorsa, copy ve paste olaylarının kendilerini dinlemek daha başarılı bir
strateji olur.
148
Bölüm 17: Bayt dizileriyle çalışma
ByteArray sınıfı, esasında bayt dizisi olan ikili veri akışını okumanızı veya ikili veri akışına yazmanızı sağlar. Bu sınıf
verilere en basit şekilde erişmek için bir yol sağlar. Bilgisayar verileri baytlardan veya 8 bitlik gruplardan oluştuğu için,
verilerin bayt olarak okunabilmesi, sınıf ve erişim yöntemi olmayan verilere erişebildiğiniz anlamına gelir. ByteArray
sınıfı, bir bitmapten ağda dolaşan veri akışına kadar bayt düzeyinde herhangi bir veri akışını ayrıştırmanızı sağlar.
writeObject() yöntemi, bir nesneyi serileştirilmiş Action Message Format (AMF) olarak ByteArray öğesine
yazmanızı sağlar; readObject() yöntemi ise ByteArray öğesinden orijinal veri türü değişkenine kadar, serileştirilmiş
bir nesneyi okumanızı sağlar. Görüntüleme listesine yerleştirilebilen nesneler olan görüntüleme nesneleri dışındaki
tüm nesneleri serileştirebilirsiniz. Ayrıca custom sınıfı çalışma zamanı için kullanılabilirse, serileştirilmiş nesneleri
tekrar custom sınıfı örneklerine atayabilirsiniz. Bir nesneyi AMF'ye dönüştürdükten sonra, bir ağ bağlantısı üzerinden
etkili bir şekilde aktarabilir veya bir dosyaya kaydedebilirsiniz.
Burada anlatılan örnek Adobe® AIR™ uygulaması bir .zip dosyasını, .zip dosyasının içerdiği dosya listesini çıkartarak
ve onları masaüstüne yazarak bayt akışını işleme örneği olarak okur.
ByteArray okuma ve yazma
ByteArray sınıfı, flash.utils paketinin bir parçasıdır. ActionScript 3.0'da ByteArray nesnesi oluşturmak için, aşağıdaki
örnekte gösterildiği gibi ByteArray sınıfını içe aktarın ve yapıcıyı çağırın:
import flash.utils.ByteArray;
var stream:ByteArray = new ByteArray();
ByteArray yöntemleri
Anlamlı bir veri akışı, istediğiniz bilgiyi bulmak için analiz edebileceğiniz bir format olarak organize edilir. Örneğin
basit bir çalışan dizisindeki kayıt büyük olasılıkla kimlik numarası, ad, adres, telefon numarası vb. içerir. MP3 ses
dosyası, indirilmekte olan dosyanın başlığını, yazarını, albümü, yayınlanma tarihini ve türünü belirten bir Kimlik3
etiketi içerir. Format sayesinde, veri akışındaki verileri hangi sırada bekleyeceğinizi bilirsiniz. Bayt akışını mantıklı bir
şekilde okuyabilirsiniz.
ByteArray sınıfı bir veri akışından okumayı ve veri akışına yazmayı kolaylaştıran birçok yöntem içerir. Bunlardan
bazıları readBytes() ve writeBytes(), readInt() ve writeInt(), readFloat() ve writeFloat(),
readObject() ve writeObject() ve readUTFBytes() ve writeUTFBytes() yöntemleridir. Bu yöntemler sayesinde
veri akışından verileri belirli veri türleri değişkenlerinde okuyabilir ve belirli veri türlerini doğrudan ikili veri akışına
yazabilirsiniz.
Örneğin aşağıdaki kod basit bir dize dizisini ve kayar nokta sayısını okur ve her öğeyi ByteArray öğesine yazar. Dizinin
organizasyonu sayesinde kod, verileri yazmak için uygun ByteArray yöntemlerini (writeUTFBytes() ve
writeFloat()) çağırabilir. Yinelenen veri modeli sayesinde diziyi bir döngüyle okuyabilirsiniz.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 149
Bayt dizileriyle çalışma
// The following example reads a simple Array (groceries), made up of strings
// and floating-point numbers, and writes it to a ByteArray.
import flash.utils.ByteArray;
// define the grocery list Array
var groceries:Array = ["milk", 4.50, "soup", 1.79, "eggs", 3.19, "bread" , 2.35]
// define the ByteArray
var bytes:ByteArray = new ByteArray();
// for each item in the array
for (var i:int = 0; i < groceries.length; i++) {
bytes.writeUTFBytes(groceries[i++]); //write the string and position to the next item
bytes.writeFloat(groceries[i]);// write the float
trace("bytes.position is: " + bytes.position);//display the position in ByteArray
}
trace("bytes length is: " + bytes.length);// display the length
position özelliği
position özelliği, okuma veya yazma sırasında ByteArray öğesini dizine alan işaretçinin geçerli konumunu saklar.
position özelliğinin başlangıç değeri, aşağıdaki kodda da gösterildiği gibi 0'dır (sıfır):
var bytes:ByteArray = new ByteArray();
trace("bytes.position is initially: " + bytes.position); // 0
Bir ByteArray öğesinden okuma veya ByteArray öğesine yazma işlemi gerçekleştirdiğinizde, kullandığınız yöntem,
position özelliğini okunan veya yazılan son baytın hemen ardından konuma işaret edecek şekilde güncelleştirir.
Örneğin aşağıdaki kod ByteArray öğesine bir dize yazar ve sonrasında position özelliği, ByteArray öğesindeki dizenin
hemen ardından bayta işaret eder.
var bytes:ByteArray = new ByteArray();
trace("bytes.position is initially: " + bytes.position); // 0
bytes.writeUTFBytes("Hello World!");
trace("bytes.position is now: " + bytes.position);// 12
Benzer şekilde, bir okuma işlemi de okunan bayt sayısını position özelliğine göre artırır.
var bytes:ByteArray = new ByteArray();
trace("bytes.position is initially: " + bytes.position); // 0
bytes.writeUTFBytes("Hello World!");
trace("bytes.position is now: " + bytes.position);// 12
bytes.position = 0;
trace("The first 6 bytes are: " + (bytes.readUTFBytes(6)));//Hello
trace("And the next 6 bytes are: " + (bytes.readUTFBytes(6)));// World!
Söz konusu uzaklıkta okumak veya yazmak için position özelliğini ByteArray öğesinde belirli bir konuma
ayarlayabilirsiniz.
bytesAvailable ve length özellikleri
length ve bytesAvailable özellikleri, ByteArray öğesinin ne kadar süreceğini ve geçerli konumdan sonuna kadar
kaç baytı kaldığını gösterir. Aşağıdaki örnek bu özellikleri nasıl kullanabileceğinizi gösterir. Örnek, metnin bir Dizesini
ByteArray öğesine yazar ve ardından, “a” ile veya son ile karşılaşana kadar (bytesAvailable <= 0) bir kerede bir bayt
olacak şekilde ByteArray öğesini okur.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 150
Bayt dizileriyle çalışma
var bytes:ByteArray = new ByteArray();
var text:String = "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Vivamus etc.";
bytes.writeUTFBytes(text); // write the text to the ByteArray
trace("The length of the ByteArray is: " + bytes.length);// 70
bytes.position = 0; // reset position
while (bytes.bytesAvailable > 0 && (bytes.readUTFBytes(1) != 'a')) {
//read to letter a or end of bytes
}
if (bytes.position < bytes.bytesAvailable) {
trace("Found the letter a; position is: " + bytes.position); // 23
trace("and the number of bytes available is: " + bytes.bytesAvailable);// 47
}
endian özelliği
Bilgisayarlar çok baytlı, yani saklanması için 1 bayttan fazla bellek gereken sayıları saklama yöntemlerine göre farklılık
gösterebilir. Örneğin bir tam sayı belleğin 4 baytını veya 32 bitini kaplayabilir. Bazı bilgisayarlar öncelikle sayının en
yüksek değerli baytını en düşük bellek adresinde saklar, diğer bilgisayarlar ise öncelikle en düşük değerli baytı saklar.
Bilgisayarın veya bayt sıralamasının bu niteliği, big endian (önce en yüksek değerli bayt) veya little endian (önce en
düşük değerli bayt) olarak adlandırılır. Örneğin 0x31323334 sayısı big endian ve little endian bayt sıralaması için
aşağıdaki gibi saklanır, a0, 4 bayt arasında en düşük bellek adresini ve a3 en yüksek olanı temsil eder:
Big
Endian
Big
Endian
Big
Endian
Big
Endian
a0
a1
a2
a3
31
32
33
34
Little
Endian
Little
Endian
Little
Endian
Little
Endian
a0
a1
a2
a3
34
33
32
31
ByteArray sınıfının endian özelliği, işlediğiniz çok baytı sayılar için bu bayt sırasını belirtmenizi sağlar. Bu özellik için
kabul edilebilir değerler "bigEndian" veya "littleEndian" değerleridir ve Endian sınıfı, endian özelliğini bu
dizelerle ayarlamak için BIG_ENDIAN ve LITTLE_ENDIAN sabitlerini tanımlar.
compress() ve uncompress() yöntemleri
compress() yöntemi sayesinde bir ByteArray öğesini, parametre olarak belirttiğiniz bir sıkıştırma algoritmasına göre
sıkıştırabilirsiniz. uncompress() yöntemi sayesinde, sıkıştırılmış bir ByteArray öğesini sıkıştırma algoritmasına göre
genişletebilirsiniz. compress() ve uncompress() yöntemlerini çağırdıktan sonra, bayt dizisinin uzunluğu yeni
uzunluğa ve position özelliği sona ayarlanır.
CompressionAlgorithm sınıfı, sıkıştırma algoritmasını belirtmek için kullanabileceğiniz sabitleri tanımlar. AIR, hem
deflate hem de zlib algoritmalarını destekler. deflate sıkıştırma algoritması, zlib, gzip ve bazı zip uygulamaları gibi
birçok sıkıştırma formatında kullanılır. zlib sıkıştırılmış veri formatı http://www.ietf.org/rfc/rfc1950.txt adresinde ve
deflate sıkıştırma algoritması http://www.ietf.org/rfc/rfc1951.txt adresinde anlatılmaktadır.
Aşağıdaki örnek, bytes adındaki ByteArray öğesini deflate algoritması kullanarak sıkıştırır:
bytes.compress(CompressionAlgorithm.DEFLATE);
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 151
Bayt dizileriyle çalışma
Aşağıdaki örnek sıkıştırılmış bir ByteArray öğesini deflate algoritması kullanarak genişletir:
bytes.uncompress(CompressionAlgorithm.DEFLATE);
Nesneleri okuma ve nesnelere yazma
readObject() ve writeObject() yöntemleri, serileştirilmiş Action Message Format (AMF) olarak kodlanmış
şekilde ByteArray öğesinden bir nesne okur ve ByteArray öğesine bir nesne yazar. AMF, Adobe tarafından oluşturulan
ve Netstream, NetConnection, NetStream, LocalConnection ve Paylaşılan Nesneleri de içeren çeşitli ActionScript 3.0
sınıfları tarafından kullanılan özel bir mesaj protokolüdür.
Tek baytlı tür işaretleyicisi, ardından gelen kodlanmış verilerin türünü açıklar. AMF aşağıdaki 13 veri türünü kullanır:
value-type = undefined-marker | null-marker | false-marker | true-marker | integer-type |
double-type | string-type | xml-doc-type | date-type | array-type | object-type |
xml-type | byte-array-type
Kodlanmış veriler, işaretleyici null veya true ya da false gibi, hiçbir verinin kodlanmadığı tek bir olası değer temsil
edene kadar tür işaretleyicisini izler.
AMF'nin iki sürümü vardır: AMF0 ve AMF3. AMF 0, karmaşık nesneleri başvuruya göre göndermeyi destekler ve uç
noktaların nesne ilişkilerini geri yüklemesini sağlar. AMF 3, nesne özelliklerini ve dizeleri nesne başvurularına ek
olarak başvuruya göre göndererek ve ActionScript 3.0 uygulamasında tanıtılan yeni veri türlerini destekleyerek AMF
0'ı iyileştirir. ByteArray.objectEcoding özelliği, nesne verilerinin kodlanmasında kullanılan AMF sürümünü
belirtir. flash.net.ObjectEncoding sınıfı, AMF sürümünü belirtmeye yönelik sabitleri tanımlar:
ObjectEncoding.AMF0 ve ObjectEncoding.AMF3.
import flash.filesystem.*;
import flash.utils.ByteArray;
// Label component must be in Library
import fl.controls.Label;
var bytes:ByteArray = new ByteArray();
var myLabel:Label = new Label();
myLabel.move(150, 150);
myLabel.width = 200;
addChild(myLabel);
var myXML:XML =
<order>
<item id='1'>
<menuName>burger</menuName>
<price>3.95</price>
</item>
<item id='2'>
<menuName>fries</menuName>
<price>1.45</price>
</item>
</order>
// Write XML object to ByteArray
bytes.writeObject(myXML);
bytes.position = 0;//reset position to beginning
bytes.compress(CompressionAlgorithm.DEFLATE);// compress ByteArray
outFile("order", bytes);
myLabel.text = "Wrote order file to desktop!";
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 152
Bayt dizileriyle çalışma
function outFile(fileName:String, data:ByteArray):void {
var outFile:File = File.desktopDirectory; // dest folder is desktop
outFile = outFile.resolvePath(fileName); // name of file to write
var outStream:FileStream = new FileStream();
// open output file stream in WRITE mode
outStream.open(outFile, FileMode.WRITE);
// write out the file
outStream.writeBytes(data, 0, data.length);
// close it
outStream.close();
}
readObject() yöntemi, serileştirilmiş AMF'deki bir nesneyi ByteArray öğesinden okur ve belirtilen türde bir nesnede
saklar. Aşağıdaki örnek order dosyasını masaüstünden ByteArray öğesine (inBytes) okur, genişletir ve orderXML
XML nesnesinde saklamak için readObject() öğesini çağırır. Örnek, her düğümü görüntüleme için bir metin alanına
eklemek üzere for each() döngü yapısı kullanır. Örnek ayrıca objectEncoding özelliğinin değerini de, order
dosyasının içeriğine yönelik bir üstbilgiyle birlikte görüntüler.
import flash.filesystem.*;
import flash.utils.ByteArray;
// TextArea component must be in Library
import fl.controls.TextArea;
var inBytes:ByteArray = new ByteArray();
// define text area for displaying XML content
var myTxt:TextArea = new TextArea();
myTxt.width = 550;
myTxt.height = 400;
addChild(myTxt);
//display objectEncoding and file heading
myTxt.text = "Object encoding is: " + inBytes.objectEncoding + "\n\n" + "order file: \n\n";
readFile("order", inBytes);
inBytes.position = 0; // reset position to beginning
inBytes.uncompress(CompressionAlgorithm.DEFLATE);
inBytes.position = 0;//reset position to beginning
// read XML Object
var orderXML:XML = inBytes.readObject();
//for each node in orderXML
for each(var child:XML in orderXML) {
// append child node to text area
myTxt.text += child + "\n";
}
// read specified file into byte array
function readFile(fileName:String, data:ByteArray) {
var inFile:File = File.desktopDirectory; // source folder is desktop
inFile = inFile.resolvePath(fileName); // name of file to read
var inStream:FileStream = new FileStream();
inStream.open(inFile, FileMode.READ);
inStream.readBytes(data, 0, data.length);
inStream.close();
}
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 153
Bayt dizileriyle çalışma
ByteArray örneği: Bir .zip dosyasını okuma
Bu örnek, farklı türlerde birçok dosya içeren basit bir .zip dosyasının nasıl okunacağını gösterir. Bu işlemi her dosyanın
meta verilerinden ilgili verileri ayıklayarak, her dosyayı bir ByteArray öğesine genişleterek ve dosyayı masaüstüne
yazarak yapar.
Bir .zip dosyasının genel yapısı PKWARE Inc.in belirtimine dayalıdır, bu belirtim
http://www.pkware.com/documents/casestudies/APPNOTE.TXT adresinde bulunmaktadır. İlki, .zip arşivindeki ilk
dosyanın dosya üstbilgisi ve dosya verileridir, ardından her ek dosyanın dosya üstbilgisi ve dosya veri çifti gelir. (Dosya
üstbilgisinin yapısı daha ileride anlatılmaktadır.) İkincisi, .zip dosyası isteğe bağlı olarak bir veri tanımlayıcı kaydı
içerir (genellikle çıktı zip dosyası diske kaydedilmek yerine bellekte oluşturulduğunda). Üçüncü olarak, birçok ilave
isteğe bağlı öğe bulunmaktadır: arşiv şifre çözme üstbilgisi, arşiv ek veri kaydı, merkezi dizin yapısı, Zip64 merkezi
dizin kaydının sonu, Zip64 merkezi dizin bulucunun sonu ve merkezi dizin kaydının sonu.
Bu örnekteki kod yalnızca klasör içermeyen zip dosyalarının ayrıştırılması için yazılmıştır ve veri tanımlayıcı kayıtları
beklemez. Son veri dosyasını izleyen tüm bilgileri yoksayar.
Her dosya için dosya üstbilgi formatı şöyledir:
dosya üstbilgisi imzası
4 bayt
gerekli sürüm
2 bayt
genel amaçlı bit bayrağı
2 bayt
sıkıştırma yöntemi
2 bayt (8=DEFLATE; 0=SIKIŞTIRILMAMIŞ)
dosyanın son değiştirilme zamanı
2 bayt
dosyanın son değiştirilme tarihi
2 bayt
crc-32
4 bayt
sıkıştırılmış boyut
4 bayt
sıkıştırılmamış boyut
4 bayt
dosya adı uzunluğu
2 bayt
ek alan uzunluğu
2 bayt
dosya adı
değişken
ek alan
değişken
Dosya üstbilgisinin ardından gerçek dosya verileri gelir, bu veriler sıkıştırma yöntemi bayrağına bağlı olarak
sıkıştırılmış veya sıkıştırılmamış olabilir. Dosya verileri sıkıştırılmamışsa bayrak 0'dır (sıfır), DEFLATE algoritması
kullanılarak sıkıştırılmışsa 8'dir veya diğer sıkıştırma algoritmaları kullanılmışsa başka bir değerdir.
Bu örneğin kullanıcı arabirimi bir etiket ve bir metin alanından oluşur (taFiles). Uygulama aşağıdaki bilgileri .zip
dosyasında karşılaştığı her dosyanın metin alanına yazar: dosya adı, sıkıştırılmış boyut ve sıkıştırılmamış boyut.
Programın başlangıcı aşağıdaki görevleri gerçekleştirir:
• Gerekli sınıfları içeri aktarır
import flash.filesystem.*;
import flash.utils.ByteArray;
import flash.events.Event;
• Kullanıcı arabirimini tanımlar
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 154
Bayt dizileriyle çalışma
import fl.controls.*;
//requires TextArea and Label components in the Library
var taFiles = new TextArea();
var output = new Label();
taFiles.setSize(320, 150);
taFiles.move(10, 30);
output.move(10, 10);
output.width = 150;
output.text = "Contents of HelloAir.zip";
addChild(taFiles);
addChild(output);
•
bytes ByteArray öğesini tanımlar
var bytes:ByteArray = new ByteArray();
• Dosya üstbilgisinden meta verileri saklamak için değişkenleri tanımlar
//
var
var
var
var
var
var
var
var
variables for reading fixed portion of file header
fileName:String = new String();
flNameLength:uint;
xfldLength:uint;
offset:uint;
compSize:uint;
uncompSize:uint;
compMethod:int;
signature:int;
• .zip dosyasını temsil etmek için File (zfile) ve FileStream (zStream) nesnelerini tanımlar ve dosyaların
ayıklandığı .zip dosyasının konumunu belirtir—masaüstü dizininde “HelloAIR.zip” adlı bir dosya.
// File variables for accessing .zip file
var zfile:File = File.desktopDirectory.resolvePath("HelloAIR.zip");
var zStream:FileStream = new FileStream();
Program .zip dosyasını OKUMA modunda açarak başlar.
zStream.open(zfile, FileMode.READ);
Ardından, sayısal alanların bayt sıralamasında en düşük değerli baytın önce geldiğini göstermek için bytes öğesinin
endian özelliğini LITTLE_ENDIAN olarak ayarlar.
bytes.endian = Endian.LITTLE_ENDIAN;
Sonra while() ifadesi, dosya akışındaki geçerli konum dosya boyutundan büyük veya dosya boyutuna eşit olana kadar
devam eden bir döngü başlatır.
while (zStream.position < zfile.size)
{
Döngüdeki ilk ifade dosya akışının ilk 30 baytını ByteArray bytes öğesine okur. İlk 30 bayt, ilk dosya üstbilgisinin
sabit boyutlu parçasını oluşturur.
// read fixed metadata portion of local file header
zStream.readBytes(bytes, 0, 30);
Sonra kod, 30 baytlık üstbilginin ilk baytlarından bir tam sayı (signature) okur. ZIP formatı tanımı, her dosya
üstbilgi imzasının onaltılık değer 0x04034b50 olduğunu belirtir; imza farklıysa bu, kodun, .zip dosyasının dosya
kısmının ötesine taşındığı ve ayıklanacak dosya olmadığı anlamına gelir. Bu durumda kod, bayt sırasının sonunu
beklemek yerine hemen while döngüsünden çıkar.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 155
Bayt dizileriyle çalışma
bytes.position = 0;
signature = bytes.readInt();
// if no longer reading data files, quit
if (signature != 0x04034b50)
{
break;
}
Kodun sonraki kısmı üstbilgi baytını uzaklık konumu 8'de okur ve değeri compMethod değişkeninde saklar. Bu bayt,
bu dosyayı sıkıştırmak için kullanılan sıkıştırma yöntemini gösteren bir değer içerir. Birçok sıkıştırma yöntemi
kullanılabilir, ancak uygulamada neredeyse tüm .zip dosyaları DEFLATE sıkıştırma algoritmasını kullanmaktadır.
Geçerli dosya DEFLATE sıkıştırmayla sıkıştırıldıysa compMethod 8'dir; dosya sıkıştırılmamışsa, compMethod 0'dır.
bytes.position = 8;
compMethod = bytes.readByte();
// store compression method (8 == Deflate)
İlk 30 baytın ardından, üstbilginin dosya adını ve büyük olasılıkla ek bir alan içeren üstbilginin değişken uzunluklu
kısmı gelir. Değişken offset bu kısmın boyutunu saklar. Boyut, uzaklık 26 ve 28'deki üstbilgilerden okunan dosya adı
uzunluğu ve ek alan uzunluğu toplanarak hesaplanır.
offset = 0;// stores length of variable portion of metadata
bytes.position = 26; // offset to file name length
flNameLength = bytes.readShort();// store file name
offset += flNameLength; // add length of file name
bytes.position = 28;// offset to extra field length
xfldLength = bytes.readShort();
offset += xfldLength;// add length of extra field
Sonra program offset değişkeninde saklanan bayt sayısı için dosya üstbilgisinin değişken uzunluklu kısmını okur.
// read variable length bytes between fixed-length header and compressed file data
zStream.readBytes(bytes, 30, offset);
Program, dosya adını üstbilginin değişken uzunluk kısmından okur ve dosyanın sıkıştırılmış (zip) ve sıkıştırılmamış
(orijinal) boyutlarıyla birlikte metin alanında görüntüler.
bytes.position = 30;
fileName = bytes.readUTFBytes(flNameLength); // read file name
taFiles.appendText(fileName + "\n"); // write file name to text area
bytes.position = 18;
compSize = bytes.readUnsignedInt(); // store size of compressed portion
taFiles.appendText("\tCompressed size is: " + compSize + '\n');
bytes.position = 22; // offset to uncompressed size
uncompSize = bytes.readUnsignedInt(); // store uncompressed size
taFiles.appendText("\tUncompressed size is: " + uncompSize + '\n');
Örnek, dosyanın geri kalanını sıkıştırılmış boyut tarafından belirtilen uzunluk için dosya akışından bytes öğesine
okur ve ilk 30 bayttaki dosya üstbilgisinin üzerine yazar. Dosya sıkıştırılmış olmasa bile sıkıştırılmış boyut doğrudur,
çünkü bu durumda sıkıştırılmış boyut dosyanın sıkıştırılmamış boyutuna eşittir.
// read compressed file to offset 0 of bytes; for uncompressed files
// the compressed and uncompressed size is the same
zStream.readBytes(bytes, 0, compSize);
Sonra örnek, sıkıştırılmış dosyayı genişletir ve çıktı dosyası akışına yazmak için outfile() işlevini çağırır. outfile()
öğesine dosya verilerini içeren dosya adını ve bayt sırasını iletir.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 156
Bayt dizileriyle çalışma
if (compMethod == 8) // if file is compressed, uncompress
{
bytes.uncompress(CompressionAlgorithm.DEFLATE);
}
outFile(fileName, bytes);
// call outFile() to write out the file
Kapatma ayracı, outFile() yöntemi haricinde while döngüsünün ve uygulama kodunun sonunu gösterir. Çalıştırma
while döngüsünün başlangıcına kadar geriye doğru ilerler ve başka bir dosyayı ayıklayarak veya son dosya işlenmişse
.zip dosyasını işlemeyi sonlandırarak .zip dosyasında bulunan sonraki baytları işlemeye devam eder.
} // end of while loop
outfile() işlevi bir çıktı dosyasını, dosyaya filename parametresi tarafından sağlanan ismi vererek masaüstünde
YAZMA modunda açar. Ardından data parametresindeki dosya verilerini çıktı dosyası akışına (outStream) yazar ve
dosyayı kapatır.
function outFile(fileName:String, data:ByteArray):void
{
var outFile:File = File.desktopDirectory; // destination folder is desktop
outFile = outFile.resolvePath(fileName); // name of file to write
var outStream:FileStream = new FileStream();
// open output file stream in WRITE mode
outStream.open(outFile, FileMode.WRITE);
// write out the file
outStream.writeBytes(data, 0, data.length);
// close it
outStream.close();
}
157
Bölüm 18: Yerel SQL veritabanlarıyla
çalışma
Adobe AIR, yerel SQL veritabanları oluşturma ve bu veritabanlarıyla çalışma özelliğini içerir. Çalışma zamanı, açık
kaynak SQLite veritabanı sistemini kullanarak birçok standart SQL özelliğini destekleyen bir SQL veritabanı motoru
içerir. Yerel bir SQL veritabanı, yerel, kalıcı verileri saklamak için kullanılabilir. Örneğin uygulama verileri, uygulama
kullanıcı ayarları, belgeler veya uygulamanızın yerel olarak kaydetmesini istediğiniz diğer türde veriler için
kullanılabilir.
Yerel SQL veritabanları hakkında ek çevrimiçi bilgi
Yerel SQL veritabanlarıyla çalışma hakkında daha fazla bilgiyi şu kaynaklardan bulabilirsiniz:
Hızlı Başlangıçlar (Adobe AIR Geliştirici Bağlantısı)
• Yerel bir SQL veritabanıyla senkronize olmayan şekilde çalışma
• Yerel bir SQL veritabanıyla senkronize çalışma
• Şifreli bir veritabanı kullanma
Dil Başvurusu
• SQLCollationType
• SQLColumnNameStyle
• SQLColumnSchema
• SQLConnection
• SQLError
• SQLErrorEvent
• SQLErrorOperation
• SQLEvent
• SQLIndexSchema
• SQLMode
• SQLResult
• SQLSchema
• SQLSchemaResult
• SQLStatement
• SQLTableSchema
• SQLTransactionLockType
• SQLTriggerSchema
• SQLUpdateEvent
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 158
Yerel SQL veritabanlarıyla çalışma
• SQLViewSchema
Adobe Geliştirici Bağlantısı Makaleleri ve Örnekleri
• Flash için Adobe AIR Geliştirici Bağlantısı (ara: ‘AIR SQL’)
Yerel SQL veritabanları hakkında
Adobe AIR, AIR uygulamasının çalıştığı bilgisayardaki veritabanı dosyalarında yerel olarak saklanan verileri içeren
çalışma zamanında çalışan SQL tabanlı ilişkisel bir veritabanı motoru içerir (örneğin, bilgisayarın sabit sürücüsünde).
Veritabanı yerel olarak çalıştığı ve veri dosyaları yerel olarak saklandığı için, bir veritabanı AIR uygulaması tarafından
ağ bağlantısının kullanılabilir olup olmadığına bakılmaksızın kullanılabilir. Bu nedenle, çalışma zamanının yerel SQL
veritabanı motoru, özellikle SQL ve ilişkisel veritabanlarlarına ilişkin deneyiminiz varsa, kalıcı, yerel uygulama
verilerinin saklanması için uygun bir mekanizma sağlar.
Yerel SQL veritabanları için kullanımlar
AIR yerel SQL veritabanı işlevi, uygulama verilerini kullanıcının yerel bilgisayarında saklamak isteyebileceğiniz tüm
amaçlar için kullanılabilir. Adobe AIR, verilerin yerel olarak saklanması için, her biri farklı avantajlara sahip çeşitli
mekanizmalar içerir. AIR uygulamanızdaki yerel SQL veritabanı için bazı olası kullanımlar şunlardır:
• Veritabanı, veri odaklı bir uygulama (örneğin bir adres defteri) için ana uygulama verilerini saklamak amacıyla
kullanılabilir.
• Kullanıcıların kaydetmek ve belki de paylaşmak için belgeler oluşturduğu belge odaklı uygulamalar için, belgeler
kullanıcının belirlediği konumda bir veritabanı dosyası olarak kaydedilebilir. (Ancak, veritabanı şifreli olmadıkça
herhangi bir AIR uygulamasının veritabanı dosyasını açabileceğini dikkate alın. Şifreleme, duyarlı olabilecek
belgeler için önerilir.)
• Veritabanı, ağ kullanan bir uygulama için uygulama verilerinin yerel önbelleğini saklamak veya ağ bağlantısı
kullanılabilir olmadığında verileri geçici olarak saklamak üzere kullanılabilir. Yerel veritabanını ağ veri deposuyla
senkronize etmek için bir mekanizma oluşturabilirsiniz.
• Veritabanı, herhangi bir uygulama için tek bir kullanıcının uygulama ayarlarını, örneğin pencere boyutu ve
konumu gibi kullanıcı seçenekleri ve uygulama bilgisini saklamak üzere kullanılabilir.
AIR veritabanları ve veritabanı dosyaları hakkında
Tek bir Adobe AIR yerel SQL veritabanı, bilgisayarın dosya sisteminde tek bir dosya olarak saklanır. Çalışma zamanı,
veritabanı dosyalarının oluşturulup yapılandırılmasını, verilerin bir veritabanı dosyasından alınması ve
değiştirilmesini yöneten bir SQL veritabanı motoru içerir. Çalışma zamanı, veritabanı verilerinin dosya sisteminin
neresinde ve nasıl saklandığını belirtmez; bunun yerine, her veritabanının tamamı tek bir dosyada saklanır. Veritabanı
dosyasının saklandığı dosya ssitemindeki konumu siz belirlersinz. Tek bir AIR uygulaması bir veya daha çok ayrı
veritabanına erişebilir. (Bunlar, ayrı veritabanı dosyalarıdır.) Çalışma zamanı her veritabanını dosya sisteminde tek bir
dosya olarak sakladığından, veritabanınızı uygulamanızın tasarımının ve işletim sistemi dosya erişim sınırlamalarının
gerektirdiği şekilde konumlandırabilirsiniz. Her kullanıcı, özel verileri için ayrı bir veritabanı dosyasına sahiptir veya
paylaşılan veriler için tek bir bilgisayardaki tüm uygulama kullanıcıları veritabanı dosyasına erişebilir. Veriler tek bir
bilgisayar için yerel olduğundan, farklı bilgisayarlardaki kullanıcılar tarafından otomatik olarak paylaşılmaz. Yerel
SQL veritabanı motoru, uzak veya sunucu tabanlı bir veritabanına karşı SQL ifadelerinin yürütülmesi için herhangi bir
özellik sağlamaz.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 159
Yerel SQL veritabanlarıyla çalışma
İlişkisel veritabanları hakkında
İlişkisel veritabanı, verilerin bir bilgisayarda saklanmasına (ve geri alınmasına) yönelik bir mekanizmadır. Veriler,
tablolar halinde düzenlenir: satırlar kayıtları veya öğeleri temsil eder ve sütunlar (bazen “alanlar” da denir) her kaydı
ayrı ayrı değerlere böler. Örneğin, adres defteri uygulaması bir “arkadaşlar” tablosu içerebilir. Tablodaki her satır,
veritabanında saklanan tek bir arkadaşı temsil edecektir. Tablonun sütunları, ad, soyad, doğum tarihi vb. gibi verileri
temsil eder. Veritabanı, tablodaki her arkadaş satırına ilişkin her sütun için ayrı bir değer saklar.
İlişkisel veritabanları, bir öğenin başka türden öğelerle ilişkilendirilmiş veya başka türden öğelerle olduğu karmaşık
verilerin saklanması için tasarlanmıştır. İlişkisel bir veritabanında, bire çok ilişkiye sahip —tek bir kaydın farklı türdeki
birden çok kayıtla ilişkilendirilebildiği —veriler farklı tablolar halinde bölümlenmelidir. Örneğin, adres defteri
uygulamanızın her arkadaş için birden çok telefon numarası saklamasını istediğinizi varsayın; bu, bire çok ilişkidir.
“Arkadaşlar” tablosu, her arkadaş için tüm kişisel bilgileri içerecektir. Ayrı bir “telefon numaraları” tablosu, tüm
arkadaşlara ilişkin tüm telefon numaralarını içerir.
Arkadaşlara ve telefon numaralarına ilişkin verileri saklamanın yanı sıra, her tablo, iki tablo arasındaki ilişkiyi izlemek
için—ayrı ayrı arkadaş kayıtlarını telefon numaralarıyla eşlemek için bir veri parçasına ihtiyaç duyacaktır. Bu veri, ana
anahtar—tablodaki her satırı bu tablodaki diğer satırlardan ayırt eden benzersiz bir kimlik olarak bilinir. Ana anahtar,
tablodaki her kaydı doğal olarak ayırt eden veri öğelerinden biri olduğu anlamına gelen “doğal anahtar” olabilir. Hiçbir
arkadaşınızın aynı doğum tarihini paylaşmadığını biliyorsanız, “arkadaşlar” tablosunda doğum tarihi sütununu ana
anahtar (doğal anahtar) olarak kullanabilirsiniz. Doğal anahtar yoksa, “arkadaş kimliği“ gibi, uygulamanın satırları
ayırt etmek için kullanacağı yapay bir değer olan ayrı bir ana anahtar sütunu oluşturabilirsiniz.
Ana anahtarı kullanarak birden çok tablo arasında ilişkiler kurabilirsiniz. Örneğin, “arkadaşlar” tablosunun her satır
(her arkadaş) için benzersiz bir numara içeren bir “arkadaş kimliği” sütununa sahip olduğunu düşünün. İlgili “telefon
numaraları” tablosu, iki sütunla yapılandırılabilir: telefon numarasının ait olduğu arkadaşın “arkadaş kimliği” bilgisini
içeren sütun ve geçerli telefon numarasını içeren sütun. Bu şekilde, tek bir arkadaş kaç telefon numarasına sahip olursa
olsun, bunların tümü “telefon numaraları tablosunda saklanabilir ve “arkadaş kimliği” ana anahtarı kullanılarak ilgili
arkadaşa bağlanabilir. Bir tablodaki ana anahtar, ilgili bir tabloda kayıtlar arasındaki bağlantıyı belirtmek üzere
kullanıldığında, ilgili tablodaki değer yabancı anahtar olarak bilinir. Birçok veritabanıın aksine, AIR yerel veritabanı
motoru, eklenen veya güncellenen yabancı anahtara ana anahtar tablosunda karşılık gelen bir satırın bululup
bulunmadığını otomatik olarak kontrol eden sınırlamalar olan yabancı anahtar sınırlamaları oluşturmanıza olanak
vermez. Yine de, yabancı anahtar ilişkileri ilişkisel veritabanı yapısının önemli bir parçasıdır ve veritabanınızdaki
tablolar arasında ilişki oluştururken yabancı anahtarlar kullanılmalıdır.
SQL hakkında
Yapılandırılmış Sorgu Dili (Structured Query Language - SQL) verileri değiştirmek ve getirmek için ilişkisel
veritabanlarıyla kullanılır. SQL, yordam temelli bir dilden çok, tanımlayıcı bir dildir. Bir SQL ifadesi, verilerin nasıl
getirileceğine ilişkin bilgisayar talimatları vermek yerine, istediğiniz veri kümesini açıklar. Veritabanı motoru,
verilerin nasıl getirileceğini belirler.
SQL dili, American National Standards Institute (ANSI) tarafından standartlaştırılmıştır. Adobe AIR yerel SQL
veritabanı SQL-92 standardının büyük bölümünü destekler. Adobe AIR'de desteklenen SQL dilinin özel açıklamaları
için bkz. ActionScript 3.0 Dil ve Bileşenler Başvurusu linkindeki “Yerel veritabanlarında SQL desteği“ eki.
SQL veritabanları sınıfları hakkında
ActionScript 3.0'da yerel SQL veritabanlarıyla çalışmak için bu sınıfların flash.data paketindeki örneklerini
kullanırsınız:
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 160
Yerel SQL veritabanlarıyla çalışma
Sınıf
Açıklama
flash.data.SQLConnection
Veritabanları (veritabanı dosyaları) oluşturma ve açmaya yönelik yolların yanı sıra, veritabanı düzeyinde
işlemler gerçekleştirmek ve veritabanı işlemlerini denetlemek için yöntemler sağlar.
flash.data.SQLStatement
İfade metninin tanımlanması ve parametre değerlerinin ayarlanması dahil, veritabanında yürütülen tek bir
SQL ifadesini (tek bir sorgu veya komut) temsil eder.
flash.data.SQLResult
SELECT ifadesinden sonuç satırları, UPDATE veya DELETE ifadesinden etkilenen bir dizi satır vb. ifadelerin
yürütülmesinden doğan sonuçların ve bu yürütmelere ilişkin bilgilerin getirilmesi için bir yol sağlar.
Veritabanı yapısını açıklayan şema bilgilerini elde etmek için flash.data paketindeki şu sınıfları kullanırsınız:
Sınıf
Açıklama
flash.data.SQLSchemaResult
SQLConnection.loadSchema() yönteminin çağrılmasıyla oluşan veritabanı şeması sonuçları için
konteyner görevi yapar.
flash.data.SQLTableSchema
Veritabanındaki tek bir tabloyu açıklayan bilgiyi sağlar.
flash.data.SQLViewSchema
Veritabanındaki tek bir görünümü açıklayan bilgiyi sağlar.
flash.data.SQLIndexSchema
Veritabanındaki tek bir tablo veya görünüm sütununu açıklayan bilgiyi sağlar.
flash.data.SQLTriggerSchem
a
Veritabanındaki tek bir tetikleyiciyi açıklayan bilgiyi sağlar.
flash.data paketindeki diğer sınıflar, SQLConnection sınıfı ve SQLColumnSchema sınıfıyla kullanılan sabitleri sağlar:
Sınıf
Açıklama
flash.data.SQLMode
SQLConnection.open() ve SQLConnection.openAsync() yöntemlerinin openMode parametresi için
olası değerleri temsil eden bir dizi sabiti tanımlar.
flash.data.SQLColumnNameStyle
SQLConnection.columnNameStyle özelliği için olası değerleri temsil eden bir dizi sabiti tanımlar.
flash.data.SQLTransactionLockType SQLConnection.begin() yönteminin seçenek parametresi için olası değerleri temsil eden bir dizi sabiti
tanımlar.
flash.data.SQLCollationType
SQLColumnSchema() yapıcısının SQLColumnSchema.defaultCollationType özelliği ve
defaultCollationType parametresi için olası değerleri temsil eden bir dizi sabiti tanımlar.
Ayrıca, flash.events paketinde bulunan aşağıdaki sınıflar kullandığınız olayları (ve desteklenen sabitleri) temsil eder:
Sınıf
Açıklama
flash.data.SQLEvent
İşlemlerinden herhangi biri başarıyla yürütüldüğünde SQLConnection veya SQLStatement örneklerinin
gönderdiği olayları tanımlar. Her işlem, SQLEvent sınıfında tanımlanmış, ilişkili bir olay türüne sahiptir.
flash.data.SQLErrorEvent
İşlemlerinden herhangi biri hatayla sonuçlandığında, SQLConnection veya SQLStatement örneklerinin
gönderdiği olayı tanımlar.
flash.data.SQLUpdateEvent
Bağlı veritabanlarından birinde yer alan tablo verileri, yürütülen bir INSERT, UPDATE veya DELETE SQL
ifadesinin sonucu olarak değiştiğinde SQLConnection örneğinin gönderdiği olayı tanımlar.
Son olarak, flash.errors paketinde yer alan aşağıdaki sınıflar, veritabanı işlem hataları hakkında bilgi sağlar:
Sınıf
Açıklama
flash.data.SQLError
Gerçekleştirilmeye çalışıklan işlem ve hatanın nedeni dahil, veritabanı işlem hatası hakkında bilgi sağlar.
flash.data.SQLErrorEvent
Hatayla sonuçlanan veritabanı işlemini gösteren SQLError sınıfının operation özelliği için olası değerleri
temsil eden bir dizi sabiti tanımlar.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 161
Yerel SQL veritabanlarıyla çalışma
Senkronize ve senkronize olmayan yürütme modları hakkında
Yerel SQL veritabanıyla çalışmak üzere bir kod yazdığınızda, bu veritabanı işlem yürütmesini iki yürütme modundan
birinde belirlersiniz: senkronize olmayan veya senkronize yürütme modu. Kod örnekleri genellikle ihtiyaçlarınıza en
uygun olan örneği kullanabilmeniz için, her bir işlemin her iki yolla da nasıl gerçekleştirileceğini gösterir.
Senkronize olmayan yürütme modunda, çalışma zamanına bir talimat verirsiniz ve istediğiniz işlem tamamlandığında
veya başarısız olduğunda çalışma zamanı bir olay gönderir. Önce veritabanı motoruna bir işlem gerçekleştirmesini
söylersiniz. Uygulama çalışmaya devam ederken, veritabanı motoru işini arka planda yapar. Son olarak, veritabanı
motoru işlem tamamlandığında (veya başarısız olduğunda) bir olay gönderir. Olay tarafından tetiklenen kodunuz,
sonraki işlemleri gerçekleştirir. Bu yaklaşımın önemli bir faydası vardır: ana uygulama kodu çalışmaya devam ederken,
çalışma zamanı veritabanı işlemlerini arka planda gerçekleştirir. Veritabanı işlemi büyük ölçüde zaman alırsa,
uygulama çalışmaya devam eder. En önemlisi, kullanıcı ekranı dondurmadan uygulamayla etkileşim kurmaya devam
edebilir. Yine de, senkronize olmayan işlem kodunun yazılması diğer kodlara göre daha karmaşık olabilir. Bu
karmaşıklık, genellikle çoklu bağımlı işlemlerin çeşitli olay dinleyici yöntemlerine bölümlenmesi gerektiği durumlarda
mevcuttur.
Kavramsal olarak, işlemleri birkaç olay dinleyici yöntemine bölünmüş bir işlem kümesi yerine, tek bir adım sırası—bir
senkronize işlemler kümesi—olarak kodlamak daha kolaydır. Senkronize olmayan veritabanı işlemlerine ek olarak,
Adobe AIR veritabanı işlemlerini senkronize olarak yürütmenize de olanak verir. Senkronize yürütme modunda,
işlemler arka planda çalışmaz. Bunun yerine, diğer tüm uygulama kodları gibi aynı yürütme sırasında çalışır.
Veritabanı motoruna bir işlem gerçekleştirmesini söylersiniz. Daha sonra, veritabanı motoru işini yaparken, kod bu
noktada duraklar. İşlem tamamlandığında, yürütme sonraki kod satırıyla devam eder.
İşlemlerin senkronize olmayan veya senkronize biçimde yürütüleceği, SQLConnection düzeyinde ayarlanır. Tek bir
veritabanı bağlantısı kullanarak bazı işlemler ve ifadeleri senkronize, diğerlerini senkronize olmayan biçimde
yürütemezsiniz. Veritabanını açmak için SQLConnection yöntemini çağırarak, SQLConnection öğesinin senkronize
veya senkronize olmayan yürütme modunda çalışacağını belirlersiniz. SQLConnection.open() yöntemini
çağırırsanız, bağlantı senkronize yürütme modunda, SQLConnection.openAsync() yöntemini çağırırsanız
senkronize olmayan yürütme modunda çalışır. SQLConnection örneği, open() veya openAsync() kullanılarak bir
veritabanına bağlandığında, veritabanı bağlantısını kapatıp açmadığınız sürece, senkronize veya senkronize olmayan
yürütme moduna sabitlenir.
Her yürütme modunun kendi faydaları vardır. Modların çoğu yönü birbirine benzese de, her bir modda çalışırken
aklınızda bulundurmak isteyeceğiniz bazı farklar vardır. Bu başlıklar hakkında daha fazla bilgi ve her bir modda
çalışmaya ilişkin öneriler için bkz. “Senkronize ve senkronize olmayan veritabanı işlemlerini kullanma” sayfa 181.
Veritabanı oluşturma ve değiştirme
Uygulamanızın verileri ekleyebilmesi ve getirebilmesi için, uygulamanızın erişebileceği, içinde tanımlanmış tablolar
bulunan bir veritabanı gereklidir. Burada, bir veritabanı oluşturma ve bir veritabanı içindeki veri yapısını oluşturmaya
ilişkin görevler tanımlanmıştır. Bu görevler veri ekleme ve veri getirmeden daha az kullanılsa da, çoğu uygulama için
gereklidir.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 162
Yerel SQL veritabanlarıyla çalışma
Veritabanı oluşturma
Bir veritabanı dosyası oluşturmak için, önce bir SQLConnection örneği oluşturursunuz. Bunu senkronize yürütme
modunda açmak için open() yöntemini veya senkronize olmayan yürütme modunda açmak için openAsync()
yöntemini çağırırsınız. open() ve openAsync() yöntemleri, bir veritabanı bağlantısını açmak için kullanılır.
reference parametresine (ilk parametre) ilişkin var olmayan bir dosyaya başvuran bir File örneği ilettiğinizde,
open() veya openAsync() yöntemi bu dosya konumunda bir veritasbanı dosyası oluşturur ve yeni oluşturulan
veritabanına bağlantı kurar.
Veritabanı oluşturmak için open() yöntemini veya openAsync() yöntemini çağırdığınızda, veritabanı dosyasının adı
herhangi bir dosya adı uzantısına sahip olan herhangi bir geçerli dosya adı olabilir. reference parametresi için null
değeriyle open() veya openAsync() yöntemini çağırdığınızda, diskteki bir veritabanı dosyası yerine yeni bir bellek içi
veritabanı oluşturulur.
Aşağıdaki kod listesi, senkronize yürütme modu yoluyla bir veritabanı dosyası (yeni bir veritabanı) oluşturma işlemini
gösterir. Bu durumda, veritabanı dosyası uygulamanın depolama dizininde “DBSample.db” dosya adıyla kaydedilir:
import flash.data.SQLConnection;
import flash.events.SQLErrorEvent;
import flash.events.SQLEvent;
import flash.filesystem.File;
var conn:SQLConnection = new SQLConnection();
conn.addEventListener(SQLEvent.OPEN, openHandler);
conn.addEventListener(SQLErrorEvent.ERROR, errorHandler);
var dbFile:File = File.applicationStorageDirectory.resolvePath("DBSample.db");
conn.openAsync(dbFile);
function openHandler(event:SQLEvent):void
{
trace("the database was created successfully");
}
function errorHandler(event:SQLErrorEvent):void
{
trace("Error message:", event.error.message);
trace("Details:", event.error.details);
}
SQLConnection örneğiyle bir veritabanı bağlantısını açtığınızda, işlemleri senkronize olarak yürütmek için open()
yöntemini çağırın. Aşağıdaki örnek, işlemlerini senkronize olarak yürüten bir SQLConnection örneğinin nasıl
oluşturulacağını ve açılacağını gösterir:
import flash.data.SQLConnection;
import flash.errors.SQLError;
import flash.filesystem.File;
var conn:SQLConnection = new SQLConnection();
var dbFile:File = File.applicationStorageDirectory.resolvePath("DBSample.db");
try
{
conn.open(dbFile);
trace("the database was created successfully");
}
catch (error:SQLError)
{
trace("Error message:", error.message);
trace("Details:", error.details);
}
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 163
Yerel SQL veritabanlarıyla çalışma
Veritabanı tabloları oluşturma
Veritabanında bir tablo oluşturma, bir SQL ifadesini yürütmek için kullandığınız SELECT, INSERT vb. gibi bir işlemin
aynısını kullanarak bu veritabanında bir SQL ifadesi yürütmeyi içerir. Tablo oluşturmak için, sütun tanımlarını ve yeni
tabloya ilişkin sınırlamaları içeren CREATE TABLE ifadesini kullanırsınız. SQL ifadelerini yürütme hakkında daha fazla
bilgi için bkz. “SQL ifadeleriyle çalışma” sayfa 166.
Aşağıdaki örnek, var olan bir veritabanı dosyasında senkronize olmayan yürütme modunu kullanarak “çalışanlar” adlı
bir tablo oluşturmayı gösterir. Bu kodun önceden başlatılmış ve bir veritabanına bağlanmış conn adlı bir
SQLConnection örneğinin var olduğunu varsaydığını unutmayın.
import flash.data.SQLConnection;
import flash.data.SQLStatement;
import flash.events.SQLErrorEvent;
import flash.events.SQLEvent;
// ... create and open the SQLConnection instance named conn ...
var createStmt:SQLStatement = new SQLStatement();
createStmt.sqlConnection = conn;
var sql:String =
"CREATE TABLE IF NOT EXISTS employees (" +
"
empId INTEGER PRIMARY KEY AUTOINCREMENT, " +
"
firstName TEXT, " +
"
lastName TEXT, " +
"
salary NUMERIC CHECK (salary > 0)" +
")";
createStmt.text = sql;
createStmt.addEventListener(SQLEvent.RESULT, createResult);
createStmt.addEventListener(SQLErrorEvent.ERROR, createError);
createStmt.execute();
function createResult(event:SQLEvent):void
{
trace("Table created");
}
function createError(event:SQLErrorEvent):void
{
trace("Error message:", event.error.message);
trace("Details:", event.error.details);
}
Aşağıdaki örnek, var olan bir veritabanı dosyasında senkronize yürütme modunu kullanarak “çalışanlar” adlı bir
tablonun nasıl oluşturulacağını gösterir. Bu kodun önceden başlatılmış ve bir veritabanına bağlanmış conn adlı bir
SQLConnection örneğinin var olduğunu varsaydığını unutmayın.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 164
Yerel SQL veritabanlarıyla çalışma
import flash.data.SQLConnection;
import flash.data.SQLStatement;
import flash.errors.SQLError;
// ... create and open the SQLConnection instance named conn ...
var createStmt:SQLStatement = new SQLStatement();
createStmt.sqlConnection = conn;
var sql:String =
"CREATE TABLE IF NOT EXISTS employees (" +
"
empId INTEGER PRIMARY KEY AUTOINCREMENT, " +
"
firstName TEXT, " +
"
lastName TEXT, " +
"
salary NUMERIC CHECK (salary > 0)" +
")";
createStmt.text = sql;
try
{
createStmt.execute();
trace("Table created");
}
catch (error:SQLError)
{
trace("Error message:", error.message);
trace("Details:", error.details);
}
SQL veritabanı verilerini değiştirme
Yerel SQL veritabanlarıyla çalışırken gerçekleştirmeniz gereken bazı genel görevler vardır. Bu görevler veritabanına
bağlanmayı, tablolara veri eklemeyi ve veritabanındaki tablolardan veri almayı içerir. Ayrıca, veri türleriyle çalışma ve
hataları işleme gibi, bu görevleri gerçekleştirirken aklınızda bulundurmak isteyeceğiniz birkaç konu mevcuttur.
Bunun yanı sıra, daha az ilgileneceğiniz, ancak bu yaygın görevleri gerçekleştirmeden önce ilgilenmeniz gereken birkaç
veritabanı görevi vardır. Örneğin, veritabanına bağlanmadan ve bir tablodan veri almadan önce, veritabanı
oluşturmanız ve bu veritabanında veri yapısı oluşturmanız gerekecektir. Bu daha nadir başlangıç kurulum görevleri
“Veritabanı oluşturma ve değiştirme” sayfa 161 bölümünde tartışılır.
Veritabanı işlemlerini senkronize olmayan biçimde gerçekleştirmeyi, yani veritabanı motorunun arka planda
çalışmasını ve işlem başarıyla tamamlandığında veya başarısız olduğunda bir olay göndererek sizi bilgilendirmesini
seçebilirsiniz. Bu işlemleri senkronize olarak da gerçekleştirebilirsiniz. Bu durumda veritabanı işlemleri ardarda
gerçekleştirilir ve tüm uygulama (ekrana güncellemeler dahil) diğer kodun yürütülmesinden önce işlemlerin
tamamlanmasını bekler. Bu bölümdeki örnekler, işlemlerin senkronize olmayan ve senkronize biçimde nasıl
gerçekleştirileceğini gösterir. Senkronize olmayan ve senkronize yürütme modunda çalışma hakkında daha fazla bilgi
için bkz. “Senkronize ve senkronize olmayan veritabanı işlemlerini kullanma” sayfa 181.
Veritabanına bağlanma
Herhangi bir veritabanı işlemini gerçekleştirmeden önce, bir veritabanı dosyası bağlantısı açın. SQLConnection
örneği, bir veya daha çok veritabanına bağlantıyı temsil etmek üzere kullanılır. SQLConnection örneği kullanılarak
bağlanılan ilk veritabanı, “ana” veritabanı olarak bilinir. Bu veritabanına open() yöntemi (senkronize yürütme modu
için) veya openAsync() yöntemi (senkronize olmayan yürütme modu için) kullanılarak bağlanılır.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 165
Yerel SQL veritabanlarıyla çalışma
Senkronize olmayan openAsync() işlemini kullanarak bir veritabanına bağlandığınızda, openAsync() işleminin ne
zaman tamamlandığını bilmek için SQLConnection örneğinin open olayına kaydolun. İşlemin başarısız olup
olmadığını belirlemek için SQLConnection örneğinin error olayına kaydolun.
Aşağıdaki örnek, senkronize olmayan yürütme için var olan bir veritabanı dosyasının nasıl açılacağını gösterir.
Veritabanı dosyası “DBSample.db” adındadır ve kullanıcının uygulama depo dizininde bulunur.
import flash.data.SQLConnection;
import flash.data.SQLMode;
import flash.events.SQLErrorEvent;
import flash.events.SQLEvent;
import flash.filesystem.File;
var conn:SQLConnection = new SQLConnection();
conn.addEventListener(SQLEvent.OPEN, openHandler);
conn.addEventListener(SQLErrorEvent.ERROR, errorHandler);
var dbFile:File = File.applicationStorageDirectory.resolvePath("DBSample.db");
conn.openAsync(dbFile, SQLMode.UPDATE);
function openHandler(event:SQLEvent):void
{
trace("the database opened successfully");
}
function errorHandler(event:SQLErrorEvent):void
{
trace("Error message:", event.error.message);
trace("Details:", event.error.details);
}
Aşağıdaki örnek, senkronize yürütme için var olan bir veritabanı dosyasının nasıl açılacağını gösterir. Veritabanı
dosyası “DBSample.db” adındadır ve kullanıcının uygulama depo dizininde bulunur.
import flash.data.SQLConnection;
import flash.data.SQLMode;
import flash.errors.SQLError;
import flash.filesystem.File;
var conn:SQLConnection = new SQLConnection();
var dbFile:File = File.applicationStorageDirectory.resolvePath("DBSample.db");
try
{
conn.open(dbFile, SQLMode.UPDATE);
trace("the database opened successfully");
}
catch (error:SQLError)
{
trace("Error message:", error.message);
trace("Details:", error.details);
}
Senkronize olmayan örnekteki openAsync() yöntemi çağrısı ve senkronize örnekteki open() yöntemi çağrısında
ikinci argümanın SQLMode.UPDATE sabiti olduğunu unutmayın. İkinci parametre (openMode) için SQLMode.UPDATE
öğesinin belirlenmesi, belirtilen dosya mevcut değilse çalışma zamanının bir hata göndermesine neden olur. openMode
parametresi için SQLMode.CREATE iletirseniz (veya openMode parametresini bırakırsanız), belirtilen dosya mevcut
değilse çalışma zamanı bir veritabanı dosyası oluşturmaya çalışır. Ancak, dosya mevcutsa, SQLMode.Update
kullanmanızla aynı anlama gelecek şekilde açılır. Var olan bir veritabanını salt okunur modda açmak üzere, openMode
parametresi için SQLMode.READ de belirleyebilirsiniz. Bu durumda veriler veritabanından alınabilir, ancak veriler
eklenemez, silinemez veya değiştirilemez.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 166
Yerel SQL veritabanlarıyla çalışma
SQL ifadeleriyle çalışma
Tek bir SQL ifadesi (sorgu veya komut) çalışma zamanında bir SQLStatement nesnesi olarak temsil edilir. Bir SQL
ifadesi oluşturmak ve yürütmek için şu adımları takip edin:
SQLStatement örneği oluşturur.
SQLStatement nesnesi, uygulamanızdaki SQL ifadesini temsil eder.
var selectData:SQLStatement = new SQLStatement();
Veritabanının hangi sorguya karşı çalıştığını belirtin.
Bunu yapmak için, SQLStatement nesnesinin sqlConnection özelliğini istenen veritabanıyla bağlantışı olan
SQLConnection örneğine ayarlayın.
// A SQLConnection named "conn" has been created previously
selectData.sqlConnection = conn;
Geçerli SQL ifadesini belirtin.
İfade metnini bir Dize olarak oluşturun ve SQLStatement örneğinin text özelliğine atayın.
selectData.text = "SELECT col1, col2 FROM my_table WHERE col1 = :param1";
Yürütme işleminin sonucunu işlemek için işlevleri tanımlayın (yalnızca senkronize olmayan yürütme modu).
İşlevleri SQLStatement örneğinin result ve error olayları olarak kaydetmek için addEventListener() yöntemini
kullanın.
// using listener methods and addEventListener();
selectData.addEventListener(SQLEvent.RESULT, resultHandler);
selectData.addEventListener(SQLErrorEvent.ERROR, errorHandler);
function resultHandler(event:SQLEvent):void
{
// do something after the statement execution succeeds
}
function errorHandler(event:SQLErrorEvent):void
{
// do something after the statement execution fails
}
Alternatif olarak, Responder nesnesini kullanarak dinleyici yöntemleri belirleyebilirsiniz. Bu durumda Responder
örneğini oluşturur ve dinleyici yöntemlerini bu örneğe bağlarsınız.
// using a Responder (flash.net.Responder)
var selectResponder = new Responder(onResult, onError);
function onResult(result:SQLResult):void
{
// do something after the statement execution succeeds
}
function onError(error:SQLError):void
{
// do something after the statement execution fails
}
İfade metni parametre tanımları içeriyorsa, bu parametreler için değer atayın.
Parametre değerleri atamak için, SQLStatement örneğinin parameters ilişkilendirici dizi özelliğini kullanın.
selectData.parameters[":param1"] = 25;
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 167
Yerel SQL veritabanlarıyla çalışma
SQL ifadesini yürütün.
SQLStatement örneğinin execute() yöntemini çağırın.
// using synchronous execution mode
// or listener methods in asynchronous execution mode
selectData.execute();
Ayrıca, senkronize olmayan yürütme modunda olay dinleyicileri yerine Responder kullanıyorsanız, Responder
örneğini execute() yöntemine iletin.
// using a Responder in asynchronous execution mode
selectData.execute(-1, selectResponder);
Bu adımları gösteren belirli örnekler için şu başlıklara bakın:
“Bir veritabanından veri alma” sayfa 169
“Veri ekleme” sayfa 174
“Verileri değiştirme veya silme” sayfa 177
İfadelerde parametreler kullanma
Bir SQL ifade parametresi, yeniden kullanılabilir bir SQL ifadesi oluşturmanıza olanak verir. İfade parametreleri
kullandığınızda, ifadenin içindeki değerler değişebilir (bir INSERT ifadesine eklenen değerler gibi), ancak temel ifade
metni aynı kalır. Sonuç olarak, parametre kullanmak uygulamanın kodlanmasını kolaylaştırmasının yanı sıra,
performans açısından da fayda sağlar.
İfade parametrelerini anlama
Bir uygulama genellikle tek bir SQL ifadesini bir uygulamada küçük değişimlerle birçok kez kullanır. Örneğin,
kullanıcının veritabanına yeni stok kalemleri ekleyebildiği bir stok izleme uygulaması düşünün. Veritabanına yeni bir
stok kalemi ekleyen uygulama kodu, veriyi veritabanına gerçekten ekleyen bir SQL INSERT ifadesini yürütür. Ancak,
ifade her yürütüldüğünde, küçük bir değişime uğrar. Özellikle, tabloya eklenen gerçek değerler farklıdır, çünkü bu
değerler eklenen stok kalemine özgüdür.
İfadede farklı değerlerle birçok kez kullanılan bir SQL ifadenizin olduğu durumlarda en iyi yaklaşım, SQL metninde
değişmez değerler yerine parametreler içeren bir SQL ifadesi kullanmaktır. Bir parametre, ifade her yürütüldüğünde
geçerli bir değerle değiştirilen ifade metnindeki yer tutucudur. SQL ifadesinde parametreler kullanmak için, normal
şekilde bir SQLStatement örneği oluşturursunuz. text özelliğine atanan geçerli SQL ifadesi için değişmez değerler
yerine parametre yer tutucuları kullanın. SQLStatement örneğinin parameters özelliğindeki öğenin değerini
ayarlayarak, her parametreye ilişkin değeri tanımlayabilirsiniz. Parameters özelliği ilişkilendirici bir dizidir, bu
nedenle aşağıdaki sözdizimini kullanarak belirli bir değer ayarlarsınız:
statement.parameters[parameter_identifier] = value;
Parameter_identifier, adlandırılmış bir parametre kullanıyorsanız bir dize, adlandırılmamış bir parametre
kullanıyorsanız bir tam sayı dizinidir.
Adlandırılmış parametreleri kullanma
Parametre, adlandırılmış bir parametre olabilir. Adlandırılmış bir parametre, veritabanının parametre değerini ifade
metnindeki yer tutucu konumuna eşlemek için kullandığı belirli bir ada sahiptir. Bir parametre adı, aşağıdaki
örneklerdeki gibi arkasından bir ad gelen “:” veya “@” karakterinden oluşur:
:itemName
@firstName
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 168
Yerel SQL veritabanlarıyla çalışma
Aşağıdaki kod listelemesi, adlandırılmış parametrelerin kullanımını gösterir:
var sql:String =
"INSERT INTO inventoryItems (name, productCode)" +
"VALUES (:name, :productCode)";
var addItemStmt:SQLStatement = new SQLStatement();
addItemStmt.sqlConnection = conn;
addItemStmt.text = sql;
// set parameter values
addItemStmt.parameters[":name"] = "Item name";
addItemStmt.parameters[":productCode"] = "12345";
addItemStmt.execute();
Adlandırılmamış parametreleri kullanma
Adlandırılmış parametre kullanmaya alternatif olarak, adlandırılmamış parametreler de kullanabilirsiniz.
Adlandırılmamış bir parametre kullanmak için, bir SQL ifadesindeki parametreyi “?” kullanarak belirtirsiniz karakter.
İfadedeki parametrelerin sırasına göre, ilk parametrenin dizin 0'la başlayacağı şekilde her parametreye sayısal bir dizin
atanmıştır. Aşağıdaki örnek, önceki örneğin adlandırılmamış parametre kullanılan versiyonunu gösterir:
var sql:String =
"INSERT INTO inventoryItems (name, productCode)" +
"VALUES (?, ?)";
var addItemStmt:SQLStatement = new SQLStatement();
addItemStmt.sqlConnection = conn;
addItemStmt.text = sql;
// set parameter values
addItemStmt.parameters[0] = "Item name";
addItemStmt.parameters[1] = "12345";
addItemStmt.execute();
Parametre kullanmanın faydaları
Bir SQL ifadesinde parametreler kullanmak, çeşitli faydalar sağlar:
Daha iyi performans Parametreler kullanan bir SQLStatement örneği, her yürütüldüğünde dinamik olarak SQL metni
oluşturan bir örneğe göre daha verimli çalışır. Performans iyileştirmesi, ifadenin tek bir kez hazırlanmış ve SQL
ifadesinin yeniden derlenmesine ihtiyaç duymadan farklı parametre değerleri kullanarak birçok kez yürütülebiliyor
olmasından kaynaklanmaktadır.
Açık veri türleme Parametreler, SQL ifadesi oluşturulduğunda bilinmeyen değerlerin türlenmiş değişikliğine izin
vermek için kullanılır. Parametre kullanımı, veritabanına iletilen bir değer için depo sınıfını garanti etmenin tek
yoludur. Parametreler kullanılmadığında, çalışma zamanı tüm değerleri metin temsillerinden ilişkili sütunun tür
yakınlığına dayanan bir depo sınıfına dönüştürmeye çalışır. Depo sınıfları ve sütun yakınlığı hakkında daha fazla bilgi
için, bkz. “Veri türü desteği“ bölümü, ek: ”Yerel veritabanlarında SQL desteği“, konum: ActionScript 3.0 Dil ve
Bileşenler Başvurusu.
Daha fazla güvenlik Parametrelerin kullanılması, SQL yerleştirme saldırısı olarak bilinen kötü amaçlı bir tekniğin
engellenmesine yardımcı olur. Kullanıcı, SQL yerleştirme saldırısında kullanıcı tarafından erişilebilir bir konuma SQL
kodu girer (örneğin, veri giriş alanı). Uygulama kodu SQL ifadesini doğrudan kullanıcı girdisini SQL metnine
bitiştirerek oluşturuyorsa, kullanıcı taradından girilen SQL kodu veritabanına karşı yürütülür. Aşağıdaki listeleme,
kullanıcı girdisinin SQL metnine bitiştirilmesinin bir örneğini gösterir. Bu tekniği kullanmayın:
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 169
Yerel SQL veritabanlarıyla çalışma
// assume the variables "username" and "password"
// contain user-entered data
var sql:String =
"SELECT userId " +
"FROM users " +
"WHERE username = '" + username + "' " +
"
AND password = '" + password + "'";
var statement:SQLStatement = new SQLStatement();
statement.text = sql;
Kullanıcı tarafından girilen değerleri ifade metnine bitiştirmek yerine ifade parametrelerinin kullanılması, SQL
yerleştirme saldırısını engeller. Parametre değerleri değişmez ifade metninin bir parçası olmaktansa, açıkça
değiştirilmiş değerler olarak değerlendirildiğinden, SQL yerleştirme gerçekleşemez. Aşağıdaki, bir önceki listelemenin
önerilen bir alternatifidir:
// assume the variables "username" and "password"
// contain user-entered data
var sql:String =
"SELECT userId " +
"FROM users " +
"WHERE username = :username " +
"
AND password = :password";
var statement:SQLStatement = new SQLStatement();
statement.text = sql;
// set parameter values
statement.parameters[":username"] = username;
statement.parameters[":password"] = password;
Bir veritabanından veri alma
Bir veritabanından veri alma, iki adım içerir. Önce veritabanından almak istediğiniz veri kümesini açıklayan bir SQL
SELECT ifadesi yürütürsünüz. Daha sonra, alınan verilere erişerek bunları görüntüler ve uygulamanız için gerektirdiği
biçimde değiştirirsiniz.
Bir SELECT ifadesi yürütme
Var olan verileri veritabanından almak için bir SQLStatement örneği kullanırsınız. Uygun SQL SELECT ifadesini
örneğin text özelliğine atayın, daha sonra execute() yöntemini çağırın.
SELECT ifadesinin sözdizimine ilişkin ayrıntılar için bkz. ActionScript 3.0 Dil ve Bileşenler Başvurusu bölümündeki
”Yerel veritabanlarında SQL desteği“ eki.
Aşağıdaki örnek, senkronize olmayan yürütme modunu kullanan “ürünler” adlı tablodan veri almak için SELECT
ifadesinin yürütülmesini gösterir:
var selectStmt:SQLStatement = new SQLStatement();
// A SQLConnection named "conn" has been created previously
selectStmt.sqlConnection = conn;
selectStmt.text = "SELECT itemId, itemName, price FROM products";
// The resultHandler and errorHandler are listener methods are
// described in a subsequent code listing
selectStmt.addEventListener(SQLEvent.RESULT, resultHandler);
selectStmt.addEventListener(SQLErrorEvent.ERROR, errorHandler);
selectStmt.execute();
Aşağıdaki örnek, senkronize olmayan yürütme modunu kullanan “ürünler” adlı tablodan veri almak için SELECT
ifadesinin yürütülmesini gösterir:
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 170
Yerel SQL veritabanlarıyla çalışma
var selectStmt:SQLStatement = new SQLStatement();
// A SQLConnection named "conn" has been created previously
selectStmt.sqlConnection = conn;
selectStmt.text = "SELECT itemId, itemName, price FROM products";
// This try..catch block is fleshed out in
// a subsequent code listing
try
{
selectStmt.execute();
// accessing the data is shown in a subsequent code listing
}
catch (error:SQLError)
{
// error handling is shown in a subsequent code listing
}
Senkronize olmayan yürütme modunda ifadenin yürütülmesi tamamlandığında, SQLStatement örneği ifadenin başarıyla
çalıştığını gösteren bir result olayı (SQLEvent.RESULT) gönderir. Alternatif olarak, Responder nesnesi bir argüman
olarak execute() çağrısına iletildiyse, Responder nesnesinin sonuç işleyici özelliği çağrılır. Senkronize yürütme
modunda, execute() işlemi tamamlanana kadar yürütme duraklar, daha sonra, sonraki kod satırında devam eder.
SELECT ifadesi sonuç verilerine erişme
SELECT ifadesinin yürütülmesi tamamlandığında, sonraki adım alınan verilere erişmektir. SELECT sonuç kümesindeki
her veri satırı bir Object örneği olur. Bu nesne, adları sonuç kümesindeki sütun adlarıyla eşleşen özellikler içerir.
Özellikler, sonuç kümesinin sütunlarından değerler içerir. Örneğin, bir SELECT ifadesinin “öğeKimliği”, “öğeAdı” ve
“fiyat” adlı üç sütun içeren bir sonuç kümesi belirttiğini düşünün. Sonuç kümesindeki her satır için itemId, itemName,
and price adlı özellikleri içeren bir Object örneği oluşturulur. Bu özellikler, ilgili sütunlarından değerler içerir.
Aşağıdaki kod listelemesi, senkronize olmayan yürütme kipinde veri alma için önceki kod listelemesini devam ettirir.
Sonuç olay dinleyicisi yönteminde alınan verilere nasıl erişileceğini gösterir.
function resultHandler(event:SQLEvent):void
{
var result:SQLResult = selectStmt.getResult();
var numResults:int = result.data.length;
for (var i:int = 0; i < numResults; i++)
{
var row:Object = result.data[i];
var output:String = "itemId: " + row.itemId;
output += "; itemName: " + row.itemName;
output += "; price: " + row.price;
trace(output);
}
}
function errorHandler(event:SQLErrorEvent):void
{
// Information about the error is available in the
// event.error property, which is an instance of
// the SQLError class.
}
Aşağıdaki kod listelemesi, senkronize yürütme kipinde veri alma için önceki kod listelemesini genişletir. Önceki
senkronize yürütme örneğinde yer alan try..catch bloğunu, alınan verilere nasıl erişileceğini göstererek genişletir.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 171
Yerel SQL veritabanlarıyla çalışma
try
{
selectStmt.execute();
var result:SQLResult = selectStmt.getResult();
var numResults:int = result.data.length;
for (var i:int = 0; i < numResults; i++)
{
var row:Object = result.data[i];
var output:String = "itemId: " + row.itemId;
output += "; itemName: " + row.itemName;
output += "; price: " + row.price;
trace(output);
}
}
catch (error:SQLError)
{
// Information about the error is available in the
// error variable, which is an instance of
// the SQLError class.
}
Önceki kod listelemesinin gösterdiği gibi, sonuç nesneleri bir SQLResult örneğinin data örneği olarak kullanılabilen
bir dizide bulunur. Bir olay dinleyicisiyle senkronize olmayan yürütmeyi kullanıyorsanız, SQLResult örneğini
getirmek için SQLStatement örneğinin getResult() yöntemini çağırırsınız. execute() çağrısında bir Responder
argümanı belirtirseniz, SQLResult örneği sonuç işleyici işlevine bir argüman olarak gönderilir. Senkronize yürütme
modunda SQLStatement örneğinin getResult() yöntemini execute() yöntem çağrısınndan sonra istediğiniz
zaman çağırabilirsiniz. Her durumda, SQLResult nesnesine sahip olduğunuzda data dizi özelliğini kullanarak sonuç
satırlarına erişebilirsiniz.
Aşağıdaki kod listelemesi, metni bir SELECT ifadesi olan SQLStatement örneğini tanımlar. İfade, employees adlı
tablonun tüm satırlarının firstName velastName sütun değerlerini içeren satırlarını getirir. Bu örnek senkronize
olmayan yürütme modunu kullanır. Yürütme tamamlandığında selectResult() yöntemi çağrılır, sonuçlanan veri
satırlarına SQLStatement.getResult() kullanılarak erişilir ve bu satırlar trace() yöntemi kullanılarak
görüntülenir. Bu listelemenin önceden başlatılmış ve bir veritabanına bağlanmış conn adlı bir SQLConnection
örneğinin var olduğunu varsaydığını unutmayın. Ayrıca, “çalışanlar” tablosunun önceden oluşturulduğunu ve veriyle
doldurulduğunu varsayar.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 172
Yerel SQL veritabanlarıyla çalışma
import flash.data.SQLConnection;
import flash.data.SQLResult;
import flash.data.SQLStatement;
import flash.events.SQLErrorEvent;
import flash.events.SQLEvent;
// ... create and open the SQLConnection instance named conn ...
// create the SQL statement
var selectStmt:SQLStatement = new SQLStatement();
selectStmt.sqlConnection = conn;
// define the SQL text
var sql:String =
"SELECT firstName, lastName " +
"FROM employees";
selectStmt.text = sql;
// register listeners for the result and error events
selectStmt.addEventListener(SQLEvent.RESULT, selectResult);
selectStmt.addEventListener(SQLErrorEvent.ERROR, selectError);
// execute the statement
selectStmt.execute();
function selectResult(event:SQLEvent):void
{
// access the result data
var result:SQLResult = selectStmt.getResult();
var numRows:int = result.data.length;
for (var i:int = 0; i < numRows; i++)
{
var output:String = "";
for (var columnName:String in result.data[i])
{
output += columnName + ": " + result.data[i][columnName] + "; ";
}
trace("row[" + i.toString() + "]\t", output);
}
}
function selectError(event:SQLErrorEvent):void
{
trace("Error message:", event.error.message);
trace("Details:", event.error.details);
}
Aşağıdaki kod listelemesi, önceki örnekteki tekniklerin aynısını senkronize yürütme modunda gösterir. Örnek, metni
bir SELECT ifadesi olan SQLStatement örneğini tanımlar. İfade, employees adlı tablonun tüm satırlarının firstName
velastName sütun değerlerini içeren satırlarını getirir. Sonuçlanan veri satırlarına SQLStatement.getResult()
kullanılarak erişilir ve bu satırlar trace() yöntemi kullanılarak görüntülenir. Bu listelemenin önceden başlatılmış ve
bir veritabanına bağlanmış conn adlı bir SQLConnection örneğinin var olduğunu varsaydığını unutmayın. Ayrıca,
“çalışanlar” tablosunun önceden oluşturulduğunu ve veriyle doldurulduğunu varsayar.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 173
Yerel SQL veritabanlarıyla çalışma
import flash.data.SQLConnection;
import flash.data.SQLResult;
import flash.data.SQLStatement;
import flash.errors.SQLError;
// ... create and open the SQLConnection instance named conn ...
// create the SQL statement
var selectStmt:SQLStatement = new SQLStatement();
selectStmt.sqlConnection = conn;
// define the SQL text
var sql:String =
"SELECT firstName, lastName " +
"FROM employees";
selectStmt.text = sql;
try
{
// execute the statement
selectStmt.execute();
// access the result data
var result:SQLResult = selectStmt.getResult();
var numRows:int = result.data.length;
for (var i:int = 0; i < numRows; i++)
{
var output:String = "";
for (var columnName:String in result.data[i])
{
output += columnName + ": " + result.data[i][columnName] + "; ";
}
trace("row[" + i.toString() + "]\t", output);
}
}
catch (error:SQLError)
{
trace("Error message:", error.message);
trace("Details:", error.details);
}
SELECT sonuç verilerinin veri türünü tanımlama
Varsayılan olarak, SELECT ifadesinin döndürdüğü her satır, sonuç kümesinin sütun adlarıyla adlandırılan özellikler ve
her biri ilgili özelliğinin değerine sahip sütun değerini içeren bir Object örneği olarak oluşturulur. Ancal, bir SQL
SELECT ifadesini yürütmeden önce SQLStatement örneğinin itemClass özelliğini bir sınıfa ayarlayabilirsiniz.
itemClass özelliğinin ayarlanmasıyla, SELECT ifadesinin döndürdüğü her satır, belirlenen sınıfın bir örneği olarak
oluşturulur. Çalışma zamanı, SELECT sonuç kümesindeki sütun adlarını itemClass sınıfındaki özellik adlarına
eşleyerek özellik değerlerine sonuç sütunu değerleri atar.
itemClass özellik değeri olarak atanan her sınıf, herhangi bir parametre gerektirmeyen bir yapıcı içermelidir. Sınıf
ayrıca, SELECT ifadesinin döndürdüğü her sütun için tek bir özellik içermelidir. SELECT listesindeki bir sütun
itemClass sınıfında kendisiyle eşleşen bir özellik adına sahip değilse, bu bir hata olarak değerlendirilir.
SELECT sonuçlarını bölümler halinde alma
Varsayılan olarak, bir SELECT ifade yürütmesi sonuç kümesinin tüm satırlarını bir seferde alır. İfade tamamlandığında,
alınan verileri genellikle nesneler oluşturma veya verileri ekranda görüntüleme gibi bir yolla işlersiniz. İfade çok sayıda
satır döndürürse, tüm verilerin bir defada işlenmesi, kullanıcı arabiriminin kendisini yeniden düzenlememesine
neden olacak biçimde bilgisayar için zorlayıcı olabilir.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 174
Yerel SQL veritabanlarıyla çalışma
Çalışma zamanına bir defada belirli sayıda sonuç satırı döndürmesini söyleyerek uygulamanızın algılanan
performansını iyileştirebilirsiniz. Bu, ilk sonuç verilerinin daha çabuk dönmesini sağlar. Ayrıca sonuç satırlarını
kümeler halinde bölümlemenizi ve böylece kullanıcı arabiriminin işlenen her satır kümesinden sonra güncellenmesini
sağlar. Bu tekniği kullanmanın yalnızca senkronize olmayan modda kullanışlı olduğunu unutmayın.
SELECT sonuçlarını bölümler halinde almak için SQLStatement.execute() yönteminin ilk parametresi için bir değer
belirleyin (prefetch parametresi). prefetch parametresi, ifade ilk yürütüldüğünde getirilecek satır sayısını gösterir.
Bir SQLStatement örneğinin execute() yöntemini çağırdığınızda bir prefetch parametresi belirleyin, yalnızca
belirlediğiniz kadar satır getirilir:
var stmt:SQLStatement = new SQLStatement();
stmt.sqlConnection = conn;
stmt.text = "SELECT ...";
stmt.addEventListener(SQLEvent.RESULT, selectResult);
stmt.execute(20); // only the first 20 rows (or fewer) are returned
İfade, ilk sonuç satırı kümesinin kullanılabilir olduğunu gösteren result olayını gönderir. Sonuçlanan SQLResult
örneğinin data özelliği, veri satırlarını ve getirilecek ek sonuç satırları olup olmadığını gösteren complete özelliğini
içerir. Ek sonuç satırlarını almak için SQLStatement örneğinin next() yöntemini çağırın. execute() yöntemi gibi,
next() yönteminin ilk parametresi, sonuç olayının sonraki gönderilişinde kaç satır alınacağını göstermek için
kullanılır.
function selectResult(event:SQLEvent):void
{
var result:SQLResult = stmt.getResult();
if (result.data != null)
{
// ... loop through the rows or perform other processing ...
if (!result.complete)
{
stmt.next(20); // retrieve the next 20 rows
}
else
{
stmt.removeEventListener(SQLEvent.RESULT, selectResult);
}
}
}
next() yöntemi sonraki sonuç satırlarını her döndürdüğünde, SQLStatement bir result olayı gönderir. Sonuç
olarak, tüm satırlar alınana kadar sonuçları (next() çağrılarından) işlemeye devam etmek için aynı dinleyici işlevi
kullanılabilir.
Daha fazla bilgi için SQLStatement.execute() yöntemi (prefetch parametre açıklaması) ve
SQLStatement.next() yöntemi için dil başvurusu açıklamalarına bakın.
Veri ekleme
Bir veritabanından veri alma, SQL INSERT ifadesinin yürütülmesini içerir. İfadenin yürütülmesi tamamlandığında,
veritabanı tarafından oluşturulduysa, yeni eklenen satıra ilişkin ana anahtara erişebilirsiniz.
Bir INSERT ifadesini yürütme
Veritabanındaki bir tabloya veri eklemek için, metni SQL INSERT ifadesi olan bir SQLStatement örneği oluşturur ve
bu örneği yürütürsünüz.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 175
Yerel SQL veritabanlarıyla çalışma
Aşağıdaki örnek, önceden var olan çalışanlar tablosuna bir veri satırı eklemek için SQLStatement örneğini kullanır. Bu
örnek, senkronize olmayan yürütme modunu kullanarak veri eklemeyi gösterir. Bu listelemenin önceden başlatılmış
ve bir veritabanına bağlanmış conn adlı bir SQLConnection örneğinin var olduğunu varsaydığını unutmayın. Ayrıca
“çalışanlar” tablosunun önceden oluşturulduğunu varsayar.
import flash.data.SQLConnection;
import flash.data.SQLResult;
import flash.data.SQLStatement;
import flash.events.SQLErrorEvent;
import flash.events.SQLEvent;
// ... create and open the SQLConnection instance named conn ...
// create the SQL statement
var insertStmt:SQLStatement = new SQLStatement();
insertStmt.sqlConnection = conn;
// define the SQL text
var sql:String =
"INSERT INTO employees (firstName, lastName, salary) " +
"VALUES ('Bob', 'Smith', 8000)";
insertStmt.text = sql;
// register listeners for the result and failure (status) events
insertStmt.addEventListener(SQLEvent.RESULT, insertResult);
insertStmt.addEventListener(SQLErrorEvent.ERROR, insertError);
// execute the statement
insertStmt.execute();
function insertResult(event:SQLEvent):void
{
trace("INSERT statement succeeded");
}
function insertError(event:SQLErrorEvent):void
{
trace("Error message:", event.error.message);
trace("Details:", event.error.details);
}
Aşağıdaki örnek, senkronize yürütme modunu kullanarak önceden var olan çalışanlar tablosuna bir veri satırı ekler.
Bu listelemenin önceden başlatılmış ve bir veritabanına bağlanmış conn adlı bir SQLConnection örneğinin var
olduğunu varsaydığını unutmayın. Ayrıca “çalışanlar” tablosunun önceden oluşturulduğunu varsayar.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 176
Yerel SQL veritabanlarıyla çalışma
import flash.data.SQLConnection;
import flash.data.SQLResult;
import flash.data.SQLStatement;
import flash.errors.SQLError;
// ... create and open the SQLConnection instance named conn ...
// create the SQL statement
var insertStmt:SQLStatement = new SQLStatement();
insertStmt.sqlConnection = conn;
// define the SQL text
var sql:String =
"INSERT INTO employees (firstName, lastName, salary) " +
"VALUES ('Bob', 'Smith', 8000)";
insertStmt.text = sql;
try
{
// execute the statement
insertStmt.execute();
trace("INSERT statement succeeded");
}
catch (error:SQLError)
{
trace("Error message:", error.message);
trace("Details:", error.details);
}
Eklenen bir satırın veritabanı tarafından oluşturulan ana anahtarını alma
Bir tabloya veri satırı eklendikten sonra kodunuz genellikle yeni eklenen satıra ilişkin veritabanı tarafından oluşturulan
ana anahtarı veya satır kimlik değerini bilmek ister. Örneğin, bir tabloya satır eklediğinizde, ilgili bir tabloya satır
eklemek isteyebilirsiniz. Bu durumda, ana anahtar değerini ilişkili tabloya yabancı anahtar olarak girmek istersiniz.
Yeni eklenen satırın ana anahtarı, ifade yürütme tarafından oluşturulan SQLResult nesnesi kullanılarak alınabilir. Bu,
SELECT ifadesinin yürütülmesinden sonra sonuç verilerine erişmek için kullanılan nesnenin aynısıdır. Tüm SQL
ifadelerinde olduğu gibi, INSERT ifadesinin yürütülmesi tamamlandığında, çalışma zamanı bir SQLResult örneği
oluşturur. Bir olay dinleyicisi veya senkronize yürütme modunu kullanıyorsanız SQLStatement nesnesinin
getResult() yöntemini çağırarak SQLResult örneğine erişebilirsiniz. Alternatif olarak, senkronize olmayan yürütme
modunu kullanıyorsanız ve execute() çağrısına bir Responder örneği iletirseniz, SQLResult örneği bir argüman olarak
sonuç işleyici işlevine iletilir. Her durumda, yürütülen SQL ifadesi bir INSERT ifadesiyse, SQLResult örneği, en son
eklenen satırın satır kimliğini içeren bir lastInsertRowID özelliğine sahiptir.
Aşağıdaki örnek, senkronize olmayan yürütme modunda eklenen bir satırın ana anahtarına erişmeyi gösterir:
insertStmt.text = "INSERT INTO ...";
insertStmt.addEventListener(SQLEvent.RESULT, resultHandler);
insertStmt.execute();
function resultHandler(event:SQLEvent):void
{
// get the primary key
var result:SQLResult = insertStmt.getResult();
var primaryKey:Number = result.lastInsertRowID;
// do something with the primary key
}
Aşağıdaki örnek, senkronize yürütme modunda eklenen bir satırın ana anahtarına erişmeyi gösterir:
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 177
Yerel SQL veritabanlarıyla çalışma
insertStmt.text = "INSERT INTO ...";
try
{
insertStmt.execute();
// get the primary key
var result:SQLResult = insertStmt.getResult();
var primaryKey:Number = result.lastInsertRowID;
// do something with the primary key
}
catch (error:SQLError)
{
// respond to the error
}
Aşağıdaki kurala göre, satır kimliğinin tablo tanımında ana anahtar sütunu olarak belirlenen sütunun değeri
olabileceğini veya olmayabileceğini unutmayın:
• Tablo, yakınlığı (sütun veri türü) INTEGER olan bir ana anahtar sütunuyla tanımlandıysa, lastInsertRowID
özelliği, bu satıra eklenen değeri (veya AUTOINCREMENT sütunuysa, çalışma zamanı tarafından oluşturulan değeri)
içerir.
• Tablo birden çok ana anahtar sütunuyla (bileşik anahtar) veya yakınlığı INTEGER olan tek bir ana anahtar sütunuyla
tanımlandıysa, veritabanı perde arkasında satıra ilişkin bir satır kimlik değeri oluşturur. Oluşturulan bu değer,
lastInsertRowID özelliğinin değeridir.
• Değer, her zaman en son eklenen satırın satır kimliğidir. Bir INSERT ifadesi satır ekleyen bir tetikleyicinin
çalışmasına neden olursa, lastInsertRowID özelliği, INSERT ifadesinin oluşturduğu satırın değil, tetikleyicinin
eklediği son satırın satır kimliğini içerir. Sonuç olarak, değeri INSERT komutundan sonra
SQLResult.lastInsertRowID özelliği aracılığıyla kullanılabilen, açıkça tanımlanmış bir ana anahtar sütununa
sahip olmak istiyorsanır, sütun bir INTEGER PRIMARY KEY sütunu olarak tanımlanmalıdır. Ancak, tablonuz bir
INTEGER PRIMARY KEY sütunu içermese bile, ilgili tablolarla ilişkilerin tanımlanması bakımından, tablonuz için
ana anahtar olarak veritabanı tarafından oluşturulmuş bir satır kimliği kullanmanın eşit derecede kabul edilebilir
olduğunu unutmayın. Satır kimliği sütun değeri tüm SQL ifadelerinde ROWID, _ROWID_ veya OID adındaki özel
sütun adlarından biri aracılığıyla kullanılabilir. İlgili bir tabloda yabancı bir anahtar oluşturabilir ve satır kimlik
değerini, açıkça bildirilen INTEGER PRIMARY KEY sütunu için yapacağınız gibi yabancı anahtar sütun değeri olarak
kullanabilirsiniz. Bu anlamda, doğan anahtar yerine rasgele bir ana anahtar kullanıyorsanız, çalışma zamanının
sizin için ana anahtar değeri oluşturmasını önemsemediğiniz sürece, iki tablo arasındaki yabancı anahtar ilişkisini
tanımlamak için tablonun ana anahtarı olarak INTEGER PRIMARY KEY sütunu veya sistem tarafından oluşturulmuş
bir satır kimliği kullanmanız arasında çok az fark vardır.
Ana anahtarlar be oluşturulan satır kimlikleri hakkında daha fazla bilgi için ActionScript 3.0 Dil ve Bileşenler
Başvurusu adresinde yer alan “Yerel veritabanlarında SQL desteği” ekindeki “TABLO OLUŞTURMA” ve “İfadeler”
bölümlerine bakın.
Verileri değiştirme veya silme
Diğer veri değiştirme işlemlerinin yürütülmesi işlemi, SQL SELECT veya INSERT ifadelerinin yürütülmesi işlemiyle
aynıdır. Yalnızca SQLStatement örneğinin text özelliğini farklı bir SQL ifadesiyle değiştirin:
• Bir tabloda var olan verileri değiştirmek için UPDATE ifadesini kullanın.
• Tablodan bir veya daha çok satırı silmek için DELETE ifadesini kullanın.
Bu ifadelerin açıklamaları için ActionScript 3.0 Dil ve Bileşenler Başvurusu adresindeki “Yerel veritabanlarında SQL
desteği” ekine bakın.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 178
Yerel SQL veritabanlarıyla çalışma
Birden çok veritabanıyla çalışma
Önceden açık bir veritabanı içeren SQLConnection örneğinde ek bir veritabanı bağlantısı açmak için
SQLConnection.attach() yöntemini kullanın. Attach() yöntem çağrısındaki ad parametresini kullanarak, eklenen
veritabanına bir ad verirsiniz. Bu veritabanını değiştirmek için ifadeler yazarken, SQL ifadenizde tablonun
adlandırılmış veritabanında bulunabileceği çalışma zamanını gösteren tablo adlarını nitelemek için önekte bulunan bu
adı (database-name.table-name biçimini kullanan) kullanabilirsiniz.
Aynı SQLConnection örneğine bağlı olan birden çok veritabanından tablolar içeren tek bir SQL ifadesi yürütebilirsiniz.
Bir işlem SQLConnection örneğinde oluşturulduysa, bu işlem SQLConnection örneği kullanılarak yürütülen tüm SQL
ifadelerine uygulanır. Bu, ifadenin hangi eklenmiş veritabanında çalıştığına bakılmaksızın geçerli olur.
Alternatif olarak, bir uygulamada her biri bir veya daha çok veritabanına bağlı olan birden çok SQLConnection örneği
oluşturabilirsiniz. Ancak, aynı veritabanı için birden çok bağlantı kullanırsanız, veritabanı işlemlerinin
SQLConnection örnekleri tarafından paylaşılmadığını aklınızda bulundurmanız gerekir. Sonuç olarak, birden çok
SQLConnection örneği kullanarak aynı veritabanı dosyasına bağlanırsanız, tüm bağlantılardaki veri değişikliklerinin
beklenen biçimde uygulanacağından emin olamazsınız. Örneğin, iki UPDATE veya DELETE farklı SQLConnection
örnekleri aracılığıyla aynı veritabanına karşı çalışır ve işlem gerçekleştikten sonra uygulama hatası oluşursa, veritabanı
verileri geri alınamayacak bir biçimde ara durumda bırakılabilir ve bu durum veritabanının bütünlüğünü (ve sonuç
olarak uygulamayı) etkileyebilir.
Veritabanı hatalarını işleme
Veritabanı hatalarının işlenmesi genellikle diğer çalışma zamanı hatalarının işlenmesine benzer. Oluşabilecek hatalar
için hazırlanmış bir kod yazmalı ve bunu yapmayı çalışma zamanına bırakmak yerine hatalara yanıt vermelisiniz. Olası
veritabanı hataları genel anlamda üç kategoriye ayrılabilir: bağlantı hataları, SQL sözdizim hataları ve sınırlama
hataları.
Bağlantı hataları
Veritabanı hatalarının çoğu bağlantı hatalarıdır ve bunlar herhangi bir işlem sırasında oluşabilir. Bunlar bağlantı
hatalarını engellemeye yönelik stratejiler olsa da, veritabanı uygulamanızın çok önemli bir parçasıysa, bazen bir
bağlantı hatasını düzgün biçimde gidemenin kolay bir yolu vardır.
Çoğu bağlantı hatası, çalışma zamanının işletim sistemiyle, dosya sistemiyle ve veritabanı dosyasıyla iletişim kurma
biçimiyle ilgilidir. Örneğin, kullanıcının dosya sistemindeki belirli bir konumda veritabanı dosyası oluşturmak için
izni yoksa, bir bağlantı hatası oluşur. Aşağıdaki stratejiler, bağlantı hatalarını engellemeye yardımcı olur:
Kullanıcıya özgü veritabanı dosyaları kullanın Tek bir bilgisayardaki uygulamayı kullanan tüm kullanıcılar için tek bir
veritabanı dosyası kullanmak yerine, her kullanıcıya kendi veritabanı dosyasını verin. Dosya, kullanıcının hesabıyla
ilişkilendirilmiş bir dizinde konumlandırılmalıdır. Bu örneğin, uygulama depo dizini, kullanıcının belgeler klasörü,
kullanıcının masaüstü, vb. olabilir.
Farklı kullanıcı türlerini dikkate alın Uyulamanızı farklı işletim sistemlerinde farklı kullanıcı hesabı türleriyle test edin.
Kullanıcının bilgisayarda yönetici iznine sahip olduğunu varsaymayın. Ayrıca, uygulamayı yükleyen kişinin,
uygulamayı çalıştıran kullanıcı olduğunu varsaymayın.
Farklı dosya konumlarını dikkate alın Kullanıcının bir veritabanı dosyasını nereye kaydedeceğini veya açacağı
dosyanın yerini belirlemesine izin verirseniz, kullanıcının kullanabileceği olası farklı dosya konumlarını dikkate alın.
Ayrıca, kullanıcının veritabanı dosyalarını saklayacağı (veya açacağı) konumlara ilişkin sınırlar tanımlamayı düşünün.
Örneğin, kullanıcıların yalnızca kullanıcı hesabının depo konumunda yer alan dosyaları açmasına izin verebilirsiniz.
Bağlantı hatası oluşursa, büyük olasılıkla ilk veritabanı oluşturma veya açma girişimi sırasında gerçekleşir. Bu,
kullanıcının uygulamadaki herhangi bir veritabanı ilişkili işlemi yapamadığı anlamına gelir. Salt okunur veya izin
hataları gibi belirli hata türleri için, olası kurtarma tekniklerinden biri veritabanı dosyasını farklı bir konuma
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 179
Yerel SQL veritabanlarıyla çalışma
kopyalamaktır. Uygulama veritabanı dosyasını kullanıcının dosya oluşturma ve yazma izninin olmadığı farklı bir
konuma kopyalayabilir ve bu konumu kullanabilir.
Sözdizim hataları
Bir SQL ifadesi yanlış biçimde oluşturulduğunda ve uygulama ifadeyi yürütmeye çalıştığında bir sözdizim hatası
oluşur. Yerel veritabanı SQL ifadeleri dizeler halinde oluşturulduğundan, derleme zamanı SQL sözdiziminin kontrol
edilmesi mümkün değildir. Sözdizimlerini kontrol etmek için, tüm SQL ifadeleri yürütülmelidir. SQL sözdizim
hatalarını önlemek için aşağıdaki stratejileri kullanın:
Tüm SQL ifadelerini test edin Uygulamanızı geliştirirken mümkünse SQL ifadelerinizi uygulama kodunda ifade metni
olarak kodlamadan önce ayrıca test edin. Ayrıca, tüm olası seçenekleri ve koddaki değişimi deneyen bir dizi test
oluşturmak için birim testi gibi bir kod testi yaklaşımını kullanın.
İfade parametrelerini kullanın ve SQL'i bitiştirmekten (dinamik olarak oluşturmaktan) kaçının Parametre kullanmak
ve dinamik olarak oluşturulan SQL ifadelerinden kaçınmak, bir ifade her yürütüldüğünde aynı SQL ifade metninin
kullanılması anlamına gelir. Sonuç olarak, ifadelerinizi test etmeniz ve olası değişimleri sınırlamanız çok daha
kolaydır. Bir SQL ifadesini dinamik olarak oluşturmanız gerekiyorsa, ifadenin dinamik bölümlerini minimum
düzeyde tutun. Ayrıca, sözdizim hatalarına neden olmayacağından emin olmak için, her kullanıcı girdisini dikkatlice
doğrulayın.
Uygulamanın, bir sözdizim hatasını kurtarmak için bir SQL ifadesini incelemek ve sözdizimini düzeltmek üzere
karmaşık mantığa ihtiyacı olacaktır. Kodunuz, sözdizim hatalarını önlemek için yukarıda belirtilen yönergeleri takip
ederek herhangi bir olası SQL sözdizim hatası çalışma zamanı kaynağını tanımlayabilir (bir ifadede kullanılan
kullanıcı girişi gibi). Sözdizim hatalarının kurtarılması için kullanıcıya yol gösterin. İfadenin düzgün biçimde
yürütülmesi için neyin düzeltilmesi gerektiğini gösterin.
Sınırlama hataları
Bir INSERT veya UPDATE ifadesi bir sütuna veri eklemeye çalıştığında sınırlama hataları oluşur. Yeni veriler tablo veya
sütun için tanımlanan sınırlamalardan birini ihlal ediyorsa hata oluşur. Olası sınırlamalar kümesi şunları içerir:
Benzersiz sınırlama Bir tablodaki satırlar arasında, bir sütunda çift değer olamayacağını gösterir. Alternatif olarak,
birden çok sütun benzersiz bir sınırlamada birleştirildiğinde, bu sütunlardaki değerlerin bileşimi çift olamaz. Diğer bir
deyişle, belirtilen benzersiz sütun veya sütunlar bakımından, her satır farklı olmalıdır.
Ana anahtar sınırlaması Bir sınırlamanın izin verdiği ve vermediği veriler bakımından, ana anahtar sınırlaması
benzersiz sınırlamayla aynıdır.
Null sınırlaması Tek bir sütunun NULL değerini saklayamayacağını ve sonuç olarak her satırda bu sütunun bir değere
sahip olması gerektiğini belirtir.
Denetim sınırlaması Bir veya birden çok tablo için rasgele bir sınırlama belirtmenize olanak verir. Yaygın bir denetim
sınırlaması, bir sütunun değerinin belirli sınırlar içinde olması gerektiğini tanımlayan bir kuraldır. (Örneğin, sayısal
bir sütunun değeri 0'dan büyük olmalıdır.) Diğer bir yaygın denetim sınırlaması türü, sütun değerleri arasındaki
ilişkileri belirtir. (Örneğin, bir sütunun değeri aynı satırdaki diğer sütunların değerinden farklı olmalıdır.)
Veri türü (sütun yakınlığı) sınırlaması Çalışma zamanı, sütun değerleri için bir veri türü belirler ve bir sütunda yanlış
türde bir değeri saklama girişiminde bulunulduğunda hata oluşur. Ancak, çoğu durumda değerler sütunun belirtilen
veri türüyle eşleşecek biçimde dönüştürülür. Daha fazla bilgi için bkz. “Veritabanı veri türleriyle çalışma” sayfa 181.
Çalışma zamanı, yabancı anahtar değerleri üzerinde sınırlama uygulamaz. Başka bir deyişle, yabancı anahtar
değerlerinin var olan bir ana anahtar değeriyle eşleşmesi gerekmez.
Önceden tanımlı sınırlama türlerinin yanı sıra, çalışma zamanı SQL motoru, tetikleyicilerin kullanımını destekler.
Tetikletici, olay işleyiciye benzer. Belirli bir eylem gerçekleştiğinde yürütülen, önceden tanımlı bir talimatlar
kümesidir. Örneğin, bir tetikleyici belirli bir tabloya veri eklendiğinde veya bu tablodan veri silindiğinde çalışacak
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 180
Yerel SQL veritabanlarıyla çalışma
biçimde tanımlanabilir. Olası bir tetikleyici kullanımı, tetikleyicinin veri değişikliklerini incelemesi ve belirlenen
koşullar karşılanmıyorsa bir hataya neden olmasıdır. Sonuç olarak tetikleyici, sınırlamayla aynı amaca hizmet edebilir
ve sınırlama hatalarının önlenmesi ve kurtarılmasına ilişkin stratejiler tetikletici tarafından oluşturulan hatalar için de
geçerlidir. Ancak, tetikleyici tarafından oluşturulan hatalara ilişkin hata kimliği, sınırlama hatalarına ilişkin hata
kimliğinden farklıdır.
Belirli bir tabloya uygulanan sınırlama kimesi, uygulamanızı tasarladığınız sırada belirlenir. Sınırlamaların bilinçli
şekilde tasarlanması, uygulamanızı sınırlama hatalarının önlenmesi ve kurtarılmasına yönelik tasarlamanızı
kolaylaştırır. Ancak, sınırlama hatalarının sistematik olarak tahmin edilmesi ve önlenmesi zordur. Sınırlama hataları
uygulama verileri eklenene kadar görünmediğinden, tahmin etmek zordur. Sınırlama hataları, oluşturulduktan sonra
veritabanına eklenen verilerle oluşur. Bu hatalar genellikle yeni veriler ve veritabanında önceden bulunan veriler
arasındaki ilişkinin bir sonucudur. Aşağıdaki stratejiler, birçok sınırlama hatasının önlenmesine yardımcı olur:
Veritabanı yapısını ve sınırlamaları dikkatlice planlayın Sınırlamaların amacı uygulama kuralları koymak ve
veritabanı verilerinin bütünlüğünü korumaya yardımcı olmaktır. Uygulamanızı planlarken, veritabanınızı
uygulamanızı desteklemesi açısından nasıl yapılandırmanız gerektiğini düşünün. Bu işlemin bir parçası olarak,
verilerinize ilişkin belirli değerlerin gerekli olup olmadığı, bir değerin varsayılanı olup olmadığı, çift değerlerin izinli
olup olmadığı, vb. kuralları tanımlayın. Bu kurallar, veritabanı sınırlamalarını tanımlamanızda size rehberlik eder.
Sütun adlarını açıkça belirtin INSERT ifadesi, değerlerin ekleneceği sütunları açık biçimde belirtmeden yazılabilir,
ancak böyle yapmak, gerekli olmayan bir risktir. Değerlerin ekleneceği sütunları açık biçimde adlandırarak otomatik
olarak oluşturulan değerlere, varsayılan değerler içeren sütunlara ve NULL değerlerine izin veren sütunlara olanak
tanıyabilirsiniz. Ayrıca, bunu yaparak tüm NOT NULL sütunlarına açık biçimde bir değerin eklenmesini garanti
edebilirsiniz.
Varsayılan değerler kullanın Bir sütun için NOT NULL sınırlamasını belirlediğinizde, mümkünse sütun tanımında
varsayılan bir değer belirleyin. Uygulama kodu da varsayılan değerler sağlayabilir. Örneğin, kodunuz bir String
değişkeninin null olup olmadığını kontrol edebilir ve bir ifade parametre değeri ayarlamak için kullanmadan önce bu
değişkene bir değer atayabilir.
Kullanıcı tarafından girilen verileri doğrulayın Özellikle NOT NULL ve CHECK sınırlamalarının olduğu durumlarda
kullanıcı tarafından girilen verilerin sınırlamalar tarafından belirtilen sınırlara uyduğundan emin olmak için bu
verileri önceden kontrol edin. Doğal olarak, bir UNIQUE sabitinin kontrol edilmesi daha zordur, çünkü bu kontrol
verilerin benzersiz olup olmadığını belirlemek için bir SELECT sorgusunun yürütülmesini gerektirir.
Tetikleyiciler kullanın Eklenen verileri doğrulayan (ve değiştirebilen) veya geçersiz verileri düzeltmek için diğer
eylemleri gerçekleştiren bir tetikleyici yazabilirsiniz. Bu doğrulama ve düzeltme, bir sınırlama hatasının oluşmasını
önleyebilir.
Sınırlama hatalarının engellenmesi, birçok bakımdan diğer türdeki hataların engellenmesinden daha zordur. Yine de,
uygulamayı istikrarsız ve kullanılamaz bir duruma getirmeden bu hataları kurtarmaya yönelik birkaç strateji vardır:
Çakışma algoritmaları kullanın Bir sütunda sınırlama tanımladığınızda ve bir INSERT veya UPDATE ifadesi
oluşturduğunuzda, bir çakışma algoritması belirleme seçeneğine sahip olursunuz. Çakışma algoritması, bir sınırlama
ihlali gerçekleştiğinde veritabanının yapacağı eylemi tanımlar. Veritabanı motorunun gerçekleştirebileceği birkaç olası
eylem vardır. Veritabanı motoru tek bir ifadeyi veya tüm işlemi sonlandırabilir. Hatayı yoksayabilir. Eski verileri
kaldırıp bunları kodun saklamaya çalıştığı verilerle değiştirebilir.
Daha fazla bilgi için ActionScript 3.0 Dil ve Bileşenler Başvurusu adresinde yer alan “Yerel veritabanlarında SQL
desteği” ekindeki “ON CONFLICT (çakışma algoritmaları)” bölümüne bakın.
Düzeltici geribildirim sağlayın Belirli bir SQL komutunu etkileyebilecek sınırlamalar kümesi önceden tanımlanabilir.
Sonuç olarak, bir ifadenin neden olabileceği sınırlama hatalarını tahmin edebilirsiniz. Bu bilgiyle, bir sınırlama
hatasına yanıt vermek için uygulama mantığı oluşturabilirsiniz. Örneğin, bir uygulamanın yeni ürünlerin girişi için bir
veri giriş formu içerdiğini varsayın. Veritabanındaki ürün adı sütunu UNIQUE sınırlamasıyla tanımlanıyorsa,
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 181
Yerel SQL veritabanlarıyla çalışma
veritabanına yeni bir ürün satırı ekleme eylemi bir sınırlama hatasına neden olabilir. Sonuç olarak, uygulama bir
sınırlama hatasını tahmin edecek biçimde tasarlanmıştır. Hata gerçekleştiğinde, uygulama kullanıcıyı belirtilen ürün
adının zaten kullanılmakta olduğunu göstererek ve farklı bir ürün adı seçmesini isteyerek kullanıcıyı uyarır. Olası
başka bir yanıt, kullanıcının aynı ada sahip diğer ürün hakkındaki bilgileri görüntülemesine izin vermektir.
Veritabanı veri türleriyle çalışma
Bir veritabanında tablo oluşturulduğunda, tablo oluşturmaya ilişkin SQL ifadesi tablodaki her sütun için yakınlığı veya
veri türünü tanımlar. Yakınlık bildirimleri göz ardı edilebilse de, sütun yakınlığını CREATE TABLE SQL ifadenizde açık
biçimde belirtmek iyi bir fikirdir.
Genel bir kural olarak, INSERT ifadesini kullanarak veritabanında sakladığınız her nesne, SELECT ifadesini
yürüttüğünüzde aynı veri türünün bir örneği olarak döndürülür. Ancak, alınan değerin veri türü, verinin saklandığı
veritabanı sütununun yakınlığına bağlı olarak değişik olabilir. Değer bir sütunda saklandığında, veri türü sütunun
yakınlığıyla eşleşmiyorsa, veritabanı değeri sütunun yakınlığıyla eşleşecek biçimde dönüştürmeye çalışır. Örneğin, bir
veritabanı sütunu için NUMERIC yakınlığı bildirildiyse, veritabanı verileri saklamadan önce girilen veriyi sayısal
saklama sınıfına (INTEGER veya REAL) dönüştürmeye çalışır. Veri dönüştürülemezse, veritabanı bir hata verir. Bu
kurala göre, “12345” Dizesi bir NUMERIC sütununa eklendiğinde, veritabanı bu dizeyi saklamadan önce otomatik
olarak 12345 tam sayı değerine dönüştürür. Veri bir SELECT ifadesi kullanılarak alındığında, değer bir Dize örneği
olarak değil, bir sayısal veri türü (örneğin Numara) örneği olarak döndürülür.
İstenmeyen veri türü dönüştürmesini önlemenin en iyi yolu iki kuralı takip etmektir. Öncelikle, her sütunu saklanması
hedeflenen veri türüyle eşleşecek yakınlıkla tanımlayın. Daha sonra, yalnızca veri türü tanımlanan yakınlıkla eşleşen
değerleri ekleyin. Bu kuralların takip edilmesi, iki fayda sağlar. Veri eklediğinizde, veriler beklenmedik şekilde (büyük
olasılıkla sonuç olarak hedeflenen anlamını kaybedecek biçimde) dönüştürülmez. Ayrıca, verileri almak istediğinizde,
veriler orijinal veri türünde döndürülür.
Kullanılabilir sütun yakınlığı türleri ve SQL ifadelerinde veri türlerini kullanma hakkında daha fazla bilgi için
ActionScript 3.0 Dil ve Bileşenler Başvurusu adresindeki “Yerel veritabanlarında SQL desteği” ekinde yer alan “Veri
türü desteği” bölümüne bakın.
Senkronize ve senkronize olmayan veritabanı
işlemlerini kullanma
Önceki bölümler verilerin alınması, eklenmesi, güncellenmesi ve silinmesi gibi yaygın veritabanı işlemlerinin yanı sıra,
bir veritabanı içinde veritabanı dosyası, tablolar ve diğer nesnelerin oluşturulmasını açıkladı. Örnekler bu işlemlerin
senkronize olmayan ve senkronize biçimlerde nasıl gerçekleştirileceğini gösterdi.
Anımsatıcı olarak, senkronize olmayan yürütme modunda veritabanı motoruna bir işlem gerçekleştirmesini
bildirirsiniz. Daha sonra, uygulama çalışmaya devam ederken veritabanı motoru arka planda çalışır. İşlem
tamamlandığında, veritabanı motoru sizi bu konuda uyarmak için bir olay gönderir. Senkronize olmayan yürütmenin
temel faydası, ana uygulama kodu yürütülmeye devam ederken çalışma zamanının veritabanı işlemlerini arka planda
gerçekleştirmesidir. Bu özellikle, bir işlem önemli ölçüde zaman alıyorsa değerli bir faydadır.
Diğer taraftan, senkronize yürütme modu işlemleri arka planda çalışmaz. Veritabanı motoruna bir işlem
gerçekleştirmesini söylersiniz. Veritabanı motoru işini yaparken, kod bu noktada duraklar. İşlem tamamlandığında,
yürütme sonraki kod satırıyla devam eder.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 182
Yerel SQL veritabanlarıyla çalışma
Tek bir veritabanı bağlantısı, bazı işlemler ve ifadeleri senkronize, diğerlerini senkronize olmayan biçimde yürütemez.
Veritabanı bağlantısını açtığınızda, bir SQLConnection bağlantısının senkronize veya senkronize olmayan modda
çalıştığını belirtmelisiniz SQLConnection.open() yöntemini çağırırsanız, bağlantı senkronize yürütme modunda,
SQLConnection.openAsync() yöntemini çağırırsanız senkronize olmayan yürütme modunda çalışır.
SQLConnection örneği open() veya openAsync() kullanarak bir veritabanına bağlandığında, senkronize veya
senkronize olmayan yürütmeye sabitlenir.
Senkronize veritabanı işlemlerini kullanma
Senkronize yürütmeyi kullanırken işlemleri yürütmek ve yanıtlamak için kullandığınız geçerli kodla, senkronize
olmayan yürütme modunda kullandığınız kod arasında çok az fark vardır. İki yaklaşım arasındaki temel farklar iki
alanda incelenebilir. Birincisi, başka bir işleme bağlı olan bir işlem yürütmektir (SELECT sonuç satırları veya bir
INSERT ifadesi tarafından eklenen satırın ana anahtarı gibi). İkinci fark alanı, hataların işlenmesidir.
Senkronize işlemler için kod yazma
Senkronize ve senkronize olmayan işlemler arasındaki temel fark, senkronize modda kodun tek bir adım serisi olarak
yazılmasıdır. Senkronize olmayan kodda ise, olay dinleyicileri kaydeder ve işlemleri genellikle dinleyici yöntemleri
arasında bölümlersiniz. Senkronize yürütme modunda bir veritabanına bağlı olduğunuzda, tek bir kod bloğu içinde
ardarda bir veritabanı işlemleri serisi yürütebilirsiniz. Aşağıdaki örnek bu tekniği gösterir:
var conn:SQLConnection = new SQLConnection();
var dbFile:File = File.applicationStorageDirectory.resolvePath("DBSample.db");
// open the database
conn.open(dbFile, OpenMode.UPDATE);
// start a transaction
conn.begin();
// add the customer record to the database
var insertCustomer:SQLStatement = new SQLStatement();
insertCustomer.sqlConnection = conn;
insertCustomer.text =
"INSERT INTO customers (firstName, lastName) " +
"VALUES ('Bob', 'Jones')";
insertCustomer.execute();
var customerId:Number = insertCustomer.getResult().lastInsertRowID;
// add a related phone number record for the customer
var insertPhoneNumber:SQLStatement = new SQLStatement();
insertPhoneNumber.sqlConnection = conn;
insertPhoneNumber.text =
"INSERT INTO customerPhoneNumbers (customerId, number) " +
"VALUES (:customerId, '800-555-1234')";
insertPhoneNumber.parameters[":customerId"] = customerId;
insertPhoneNumber.execute();
// commit the transaction
conn.commit();
Gördüğünüz gibi, senkronize veya senkronize olmayan yürütme kullandığınızda veritabanı işlemlerini
gerçekleştirmek için aynı yöntemleri çağırırsınız. İki yaklaşım arasındaki temel fark, başka bir işleme bağlı olan bir
işlem yürütmek ve hataların işlenmesidir.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 183
Yerel SQL veritabanlarıyla çalışma
Başka bir işleme bağlı olan bir işlem yürütme
Senkronize yürütme modunu kullandığınızda, işlemin tamamlandığını belirlemek için bir olayı dinleyen kod
yazmanız gerekmez. Bunun yerine, bir kod satırındaki işlem başarıyla tamamlandığında yürütmenün bir sonraki kod
satırıyla devam ettiğini varsayabilirsiniz. Sonuç olarak, başka bir işlemin başarısına bağlı olan bir işlemi
gerçekleştirmek için, yalnızca bağlı olduğu işlemin hemen arkasından gelen bağımlı kodu yazmalısınız. Örneğin, bir
uygulamayı bir işlem başlatmak üzere kodlamak için INSERT ifadesini yürütün, eklenen satırın ana anahtarını alın, bu
ana anahtarı farklı bir tablodaki başla bir satıra ekleyin ve son olarak işlemi tamamlayın, kod bir ifadeler serisi olarak
yazılabilir. Aşağıdaki örnek bu işlemleri gösterir:
var conn:SQLConnection = new SQLConnection();
var dbFile:File = File.applicationStorageDirectory.resolvePath("DBSample.db");
// open the database
conn.open(dbFile, SQLMode.UPDATE);
// start a transaction
conn.begin();
// add the customer record to the database
var insertCustomer:SQLStatement = new SQLStatement();
insertCustomer.sqlConnection = conn;
insertCustomer.text =
"INSERT INTO customers (firstName, lastName) " +
"VALUES ('Bob', 'Jones')";
insertCustomer.execute();
var customerId:Number = insertCustomer.getResult().lastInsertRowID;
// add a related phone number record for the customer
var insertPhoneNumber:SQLStatement = new SQLStatement();
insertPhoneNumber.sqlConnection = conn;
insertPhoneNumber.text =
"INSERT INTO customerPhoneNumbers (customerId, number) " +
"VALUES (:customerId, '800-555-1234')";
insertPhoneNumber.parameters[":customerId"] = customerId;
insertPhoneNumber.execute();
// commit the transaction
conn.commit();
Hataları senkronize yürütme ile işleme
Senkronize yürütme modunda, bir işlemin başarısız olduğunu belirlemeniz için herhangi bir hata olayını dinlemeniz
gerekmez. Bunun yerine, bir try..catch.. finally kod blokları serisinde hataları tetikleyebilecek olan herhangi bir
kodu sararsınız. Try bloğunda hata veren kodu sararsınız. Ayrı catch bloklarındaki her hata türüne yanıt olarak
gerçekleştirilecek eylemleri yazın. Başarı veya hatadan bağımsız olarak her zaman yürütülmesini istediğiniz herhangi
bir kodu (örneğin, artık gerek duyulmayan bir veritabanı bağlantısını kapatma) bir finally bloğuna yerleştirin.
Aşağıdaki örnek hata işleme için try..catch.. finally bloklarının kullanımını gösterir. Önceki örneği hata işleme
kodu ekleyerek devam ettirir:
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 184
Yerel SQL veritabanlarıyla çalışma
var conn:SQLConnection = new SQLConnection();
var dbFile:File = File.applicationStorageDirectory.resolvePath("DBSample.db");
// open the database
conn.open(dbFile, SQLMode.UPDATE);
// start a transaction
conn.begin();
try
{
// add the customer record to the database
var insertCustomer:SQLStatement = new SQLStatement();
insertCustomer.sqlConnection = conn;
insertCustomer.text =
"INSERT INTO customers (firstName, lastName)" +
"VALUES ('Bob', 'Jones')";
insertCustomer.execute();
var customerId:Number = insertCustomer.getResult().lastInsertRowID;
// add a related phone number record for the customer
var insertPhoneNumber:SQLStatement = new SQLStatement();
insertPhoneNumber.sqlConnection = conn;
insertPhoneNumber.text =
"INSERT INTO customerPhoneNumbers (customerId, number)" +
"VALUES (:customerId, '800-555-1234')";
insertPhoneNumber.parameters[":customerId"] = customerId;
insertPhoneNumber.execute();
// if we've gotten to this point without errors, commit the transaction
conn.commit();
}
catch (error:SQLError)
{
// rollback the transaction
conn.rollback();
}
Senkronize olmayan yürütme modelini anlama
Senkronize olmayan yürütme modunun kullanımına ilişkin yaygın bir kaygı, aynı veritabanı bağlantısına karşı başka
bir SQLStatement yürütülmekteyse, bir SQLStatement örneğini başlatamayacak olmanıza dair varsayımdır. Gerçekte,
bu varsayım doğru değildir. SQLStatement örneği yürütülürken ifadenin text özelliğini değiştiremezsiniz. Ancak,
yürütmek istediğiniz her farklı SQLStatement örneği için ayrı bir SQLStatement örneği kullanırsanız, başka bir
SQLStatement örneği hala yürütülüyorken hataya neden olmadan execute() yöntemini çağırabilirsiniz.
Dahili olarak senkronize olmayan yürütme modunu kullanarak veritabanı işlemleri yürüttüğünüzde, her veritabanı
bağlantısı (her SQLConnection örneği) gerçekleştirmesini söylediğiniz kendi işlem kuyruğu veya listesine sahiptir.
Çalışma zamanı her işlemi kuyruğa eklendikleri sırayla yürütür. Bir SQLStatement örneği oluşturduğunuzda ve bu
örneğin execute() yöntemini çağırdığınızda, ifade yürütme işlemi bağlantı için kuyruğa eklenir. Bu SQLConnection
örneğinde o anda yürütülen bir işlem yoksa, ifade arka planda yürütülmeye başlar. Kodla aynı blok içinde başka bir
SQLStatement örneği oluşturduğunuzu ve bu yöntemin execute() yöntemini de çağırdığınızı varsayın. Bu ikinci
ifade yürütme işlemi, kuyrukta ilk ifadenin arkasına eklenir. İlk ifadenin yürütülmesi tamamlanır tamamlanmaz,
çalışma zamanı kuyruktaki bir sonraki işleme geçer. Ana uygulama kodunda ilk işleme ilişkin result olayının
gönderildiği sırada bile, kuyrukta yer alan sonraki işlemlerin yürütülmesi arka planda devam eder. Aşağıdaki kod bu
tekniği gösterir:
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 185
Yerel SQL veritabanlarıyla çalışma
// Using asynchronous execution mode
var stmt1:SQLStatement = new SQLStatement();
stmt1.sqlConnection = conn;
// ... Set statement text and parameters, and register event listeners ...
stmt1.execute();
// At this point stmt1's execute() operation is added to conn's execution queue.
var stmt2:SQLStatement = new SQLStatement();
stmt2.sqlConnection = conn;
// ... Set statement text and parameters, and register event listeners ...
stmt2.execute();
// At this point stmt2's execute() operation is added to conn's execution queue.
// When stmt1 finishes executing, stmt2 will immediately begin executing
// in the background.
Ardarda kuyruğa alınan ifadeleri otomatik olarak yürüten veritabanının önemli bir yan etkisi vardır. Bir ifade başka
bir işlemin sonucuna bağlıysa, ilk işlem tamamlanana kadar bu ifadeyi kuyruğa ekleyemezsiniz. (Başka bir deyişle, bu
ifadenin execute() yöntemini çağıramazsınız.) Çünkü ikinci ifadenin execute() yöntemini bir kez çağırdığınızda,
ifadenin text veya parameters özelliklerini değiştiremezsiniz. Bu durumda sonraki işlemi başlatmak için, ilk işlemin
tamamlandığını gösteren olayı beklemeniz gerekir. Örneğin, işlem bağlamında bir ifade yürütmek istiyorsanız,
ifadenin yürütülmesi işlemi açma işlemine bağlıdır. İşlemi açmak için SQLConnection.begin() yöntemini
çağırdıktan sonra SQLConnection örneğinin begin olayını göndermesini beklemeniz gerekir. Daha sonra
SQLStatement örneğinin execute() yöntemini çağırabilirsiniz. Bu örnekte uygulamayı işlemlerin düzgün biçimde
yürütülmesini sağlayacak biçimde düzenlemenin en basit yolu, begin olayı için dinleyici olarak kaydedilen bir yöntem
oluşturmaktır. SQLStatement.execute() yöntemini çağıracak kod, bu dinleyici yönteminin içine yerleştirilir.
Şifrelemeyi SQL veritabanlarıyla kullanma
Tüm Adobe AIR uygulamaları aynı yerel veritabanı motorunu paylaşır. Sonuç olarak, tüm AIR uygulamaları
şifrelenmemiş bir veritabanı dosyasına bağlanabilir, bu dosyadan okuyabilir ve bu dosyaya yazabilir. Adobe AIR
1.5'ten başlayarak, AIR şifreli veritabanı dosyaları oluşturma ve bu dosyalara bağlanma özelliğini içerir. Veritabanına
bağlanmak için şifreli bir veritabanı kullandığınızda, uygulama doğru şifreleme anahtarını sağlamalıdır. Yanlış
şifreleme anahtarı sağlandığında (veya anahtar sağlanmadığında), uygulama veritabanına bağlanamaz. Sonuç olarak,
uygulama verileri veritabanından okuyamaz, veritabanına veri yazamaz veya verileri değiştiremez.
Şifreli bir veritabanı kullanmak için, veritabanını şifreli bir veritabanı olarak oluşturmalısınız. Var olan şifreli bir
veritabanıyla, veritabanına bağlantı açabilirsiniz. Ayrıca, şifreli bir veritabanının şifreleme anahtarını
değiştirebilirsiniz. Şifreli veritabanları oluşturma ve bu veritabanlarına bağlanmanın dışında, şifreli bir veritabanıyla
çalışma teknikleri, şifrelenmemiş bir veritabanıyla çalışma tekniklerinin aynısıdır. Özellikle, veritabanının şifreli olup
olmamasına bakılmaksızın, SQL ifadeleri yürütme teknikleri aynıdır.
Yerel SQL veritabanları için kullanımlar
Şifreleme, veritabanında saklanan bilgiye erişimi sınırlamak istediğinizde kullanışlı bir yoldur. Adobe AIR'in
veritabanı şifreleme işlevleri farklı amaçlar için kullanılabilir. Şifreli bir veritabanı kullanmak isteyebileceğiniz
durumlara ilişkin örnekler aşağıdadır:
• Bir sunucudan indirilen özel uygulama verilerinin salt okunur önbelleği
• Bir sunucuyla senkronize edilen özel veriler için yerel bir uygulama deposu (sunucuya veri gönderilir ve sunucudan
veri yüklenir)
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 186
Yerel SQL veritabanlarıyla çalışma
• Uygulama tarafından oluşturulan ve düzenlenen belgeler için dosya formatı olarak kullanılan şifreli dosyalar.
Dosyalar bir kullanıcıya özgü olabilir veya uygulamanın tüm kullanıcıları tarafından paylaşılmak üzere tasarlanmış
olabilir.
• “Yerel SQL veritabanları için kullanımlar” sayfa 158 bölümünde açıklananlar gibi bilgisayara veya veritabanı
dosyalarına erişimi olan insanlardan saklı tutulması gereken diğer yerel veri deposu kullanımları.
Şifreli bir veritabanı kullanmak istemenizin nedenini anlamak, uygulamanızı nasıl yapılandıracağınıza karar
vermenize yardımcı olur. Özellikle, uygulamanızın veritabanı için şifreleme anahtarını nasıl oluşturacağını, alacağını
veya depolayacağını etkileyebilir. Dikkate alınması gereken bu konular hakkında daha fazla bilgi için bkz. “Şifrelemeyi
veritabanıyla kullanmak için dikkate alınması gerekenler” sayfa 190.
Şifreli veritabanı dışında, duyarlı verileri özel olarak korumak için alternatif bir mekanizma şifreli yerel depodur.
Şifreli yerel depoyla, bir String anahtarı kullanarak tek bir ByteArray değeri saklarsınız. Bu değere yalnızca değeri
saklayan AIR uygulaması yalnızca değerin saklandığı bilgisayarda erişebilir. Şifreli yerel depoyla, kendi şifreleme
anahtarınızı oluşturmanız gerekmez. Bu nedenle, şifreli yerel depo bir ByteArray içinde kolayca kodlanabilen tek bir
değer veya değerler kümesini kolayca saklamak için en uygun yoldur. Şifreli veritabanı, yapılandırılmış veri depolama
ve sorgulamanın amaçlandığı daha büyük veri kümeleri için daha uygundur. Şifreli yerel depo kullanımı hakkında
daha fazla bilgi için bkz. “Şifreli verileri saklama” sayfa 206.
Şifreli veritabanı oluşturma
Şifreli bir veritabanı kullanmak için, veritabanı dosyası oluşturulduğu sırada şifrelenmelidir. Veritabanı bir kez
şifrelenmemiş olarak oluşturulduğunda, sonradan şifrelenemez. Benzer şekilde, şifreli bir veritabanının daha sonra
şifresi kaldırılamaz. Ayrıca, şifreli bir veritabanının şifreleme anahtarını değiştirebilirsiniz. Ayrıntılar için bkz.
“Veritabanının şifreleme anahtarını değiştirme” sayfa 189. Şifrelenmemiş bir veritabanınız varsa ve veritabanı
şifrelemeyi kullanmak istiyorsanız, yeni ve şifreli bir veritabanı oluşturabilir ve var olan tablo yapısını ve verileri yeni
veritabanına kopyalayabilirsiniz.
Şifreli bir veritabanı oluşturmak, “Veritabanı oluşturma” sayfa 162 bölümünde anlatıldığı gibi, şifrelenmemiş bir
veritabanı oluşturmakla hemen hemen aynıdır. Önce veritabanına bağlantıyı temsil eden bir SQLConnection örneği
oluşturursunuz. Henüz var olmayan bir dosya için veritabanı konumunu belirterek, SQLConnection nesnesinin
open() yöntemini veya openAsync() yöntemini çağırma yoluyla veritabanını oluşturabilirsiniz. Şifreli veritabanı
oluşturmanın tek farkı, encryptionKey parametresi için (open() yönteminin beşinci parametresi ve openAsync()
yönteminin altıncı parametresi) bir değer sağlamanız gerekmesidir. Geçerli bir encryptionKey parametre değeri, tam
olarak 16 bayt içeren bir ByteArray nesnesidir.
Aşağıdaki örnek, senkronize olmayan yürütme modunda açılan şifreli bir veritabanı oluşturmayı gösterir.
Basitleştirmek için, bu örnekte şifreleme anahtarı uygulama kodunda sabit olarak kodlanmıştır. Ancak, bu teknik
güvenli olmadığı için kesinlikle önerilmez.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 187
Yerel SQL veritabanlarıyla çalışma
import
import
import
import
import
flash.data.SQLConnection;
flash.data.SQLMode;
flash.events.SQLErrorEvent;
flash.events.SQLEvent;
flash.filesystem.File;
var conn:SQLConnection = new SQLConnection();
conn.addEventListener(SQLEvent.OPEN, openHandler);
conn.addEventListener(SQLErrorEvent.ERROR, errorHandler);
var dbFile:File = File.applicationStorageDirectory.resolvePath("DBSample.db");
var encryptionKey:ByteArray = new ByteArray();
encryptionKey.writeUTFBytes("Some16ByteString"); // This technique is not secure!
conn.openAsync(dbFile, SQLMode.CREATE, null, false, 1024, encryptionKey);
function openHandler(event:SQLEvent):void
{
trace("the database was created successfully");
}
function errorHandler(event:SQLErrorEvent):void
{
trace("Error message:", event.error.message);
trace("Details:", event.error.details);
}
Aşağıdaki örnek, senkronize yürütme modunda açılan şifreli bir veritabanı oluşturmayı gösterir. Basitleştirmek için,
bu örnekte şifreleme anahtarı uygulama kodunda sabit olarak kodlanmıştır. Ancak, bu teknik güvenli olmadığı için
kesinlikle önerilmez.
import flash.data.SQLConnection;
import flash.data.SQLMode;
import flash.filesystem.File;
var conn:SQLConnection = new SQLConnection();
var dbFile:File = File.applicationStorageDirectory.resolvePath("DBSample.db");
var encryptionKey:ByteArray = new ByteArray();
encryptionKey.writeUTFBytes("Some16ByteString"); // This technique is not secure!
try
{
conn.open(dbFile, SQLMode.CREATE, false, 1024, encryptionKey);
trace("the database was created successfully");
}
catch (error:SQLError)
{
trace("Error message:", error.message);
trace("Details:", error.details);
}
Şifreleme anahtarı oluşturmak için önerilen bir yolu gösteren örnek için bkz. “Örnek: Şifreleme anahtarı oluşturma ve
kullanma” sayfa 191.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 188
Yerel SQL veritabanlarıyla çalışma
Şifreli bir veritabanına bağlanma
Şifreli veritabanı oluşturma gibi, şifreli bir veritabanına bağlantı açma yordamı da şifrelenmemiş bir veritabanına
bağlanmaya benzer. Bu yordam, “Veritabanına bağlanma” sayfa 164 bölümünde daha ayrıntılı biçimde açıklanmıştır.
Senkronize yürütme modunda bir bağlantı açmak için open() yöntemini veya senkronize olmayan yürütme modunda
bir bağlantı açmak için openAsync() yöntemini kullanırsınız. Aradaki tek fark, şifreli bir veritabanını açmak için
encryptionKey parametresine ilişkin (open() yönteminin beşinci parametresi ve openAsync() yönteminin altıncı
parametresi) doğru değeri belirtmeniz gerekiyor olmasıdır.
Sağlanan şifreleme anahtarı doğru değilse, bir hata oluşur. open() yöntemi için, SQLError istisnası verilir.
openAsync() yöntemi için, the SQLConnection nesnesi error özelliği SQLError nesnesi içeren bir SQLErrorEvent
gönderir. Her durumda, istisna tarafından oluşturulan SQLError nesnesi errorID özellik değeri 3138'e sahiptir. Bu
hata kimliği, "Açılan dosya bir veritabanı dosyası değil" hata mesajına karşılık gelir.
Aşağıdaki örnek, senkronize olmayan yürütme modunda şifreli veritabanı açmayı gösterir. Basitleştirmek için, bu
örnekte şifreleme anahtarı uygulama kodunda sabit olarak kodlanmıştır. Ancak, bu teknik güvenli olmadığı için
kesinlikle önerilmez.
import
import
import
import
import
flash.data.SQLConnection;
flash.data.SQLMode;
flash.events.SQLErrorEvent;
flash.events.SQLEvent;
flash.filesystem.File;
var conn:SQLConnection = new SQLConnection();
conn.addEventListener(SQLEvent.OPEN, openHandler);
conn.addEventListener(SQLErrorEvent.ERROR, errorHandler);
var dbFile:File = File.applicationStorageDirectory.resolvePath("DBSample.db");
var encryptionKey:ByteArray = new ByteArray();
encryptionKey.writeUTFBytes("Some16ByteString"); // This technique is not secure!
conn.openAsync(dbFile, SQLMode.UPDATE, null, false, 1024, encryptionKey);
function openHandler(event:SQLEvent):void
{
trace("the database opened successfully");
}
function errorHandler(event:SQLErrorEvent):void
{
if (event.error.errorID == 3138)
{
trace("Incorrect encryption key");
}
else
{
trace("Error message:", event.error.message);
trace("Details:", event.error.details);
}
}
Aşağıdaki örnek, senkronize yürütme modunda şifreli veritabanı açmayı gösterir. Basitleştirmek için, bu örnekte
şifreleme anahtarı uygulama kodunda sabit olarak kodlanmıştır. Ancak, bu teknik güvenli olmadığı için kesinlikle
önerilmez.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 189
Yerel SQL veritabanlarıyla çalışma
import flash.data.SQLConnection;
import flash.data.SQLMode;
import flash.filesystem.File;
var conn:SQLConnection = new SQLConnection();
var dbFile:File = File.applicationStorageDirectory.resolvePath("DBSample.db");
var encryptionKey:ByteArray = new ByteArray();
encryptionKey.writeUTFBytes("Some16ByteString"); // This technique is not secure!
try
{
conn.open(dbFile, SQLMode.UPDATE, false, 1024, encryptionKey);
trace("the database was created successfully");
}
catch (error:SQLError)
{
if (error.errorID == 3138)
{
trace("Incorrect encryption key");
}
else
{
trace("Error message:", error.message);
trace("Details:", error.details);
}
}
Şifreleme anahtarı oluşturmak için önerilen bir yolu gösteren örnek için bkz. “Örnek: Şifreleme anahtarı oluşturma ve
kullanma” sayfa 191.
Veritabanının şifreleme anahtarını değiştirme
Veritabanı şifrelendiğinde, veritabanına ilişkin şifreleme anahtarını sonradan değiştirebilirsiniz. Veritabanının
şifreleme anahtarını değiştirmek için önce bir SQLConnection örneği oluşturarak ve bunun open() veya
openAsync() yöntemini çağırarak veritabanına bağlantı açın. Veritabanına bağlanıldığında, argüman olarak yeni
şifreleme anahtarını ileterek reencrypt() yöntemini çağırın.
Çoğu veritabanı işlemi gibi, reencrypt() yönteminin davranışı, veritabanı bağlantısının senkronize veya senkronize
olmayan yürütme modunu kullanıyor olmasına göre değişir. Veritabanına bağlanmak için open() yöntemini
kullanırsanız reencrypt() işlemi senkronize olarak çalışır. İşlem tamamlandığında, yürütme sonraki kod satırıyla
devam eder:
var newKey:ByteArray = new ByteArray();
// ... generate the new key and store it in newKey
conn.reencrypt(newKey);
Diğer yandan, veritabanı bağlantısı openAsync() yöntemi kullanılarak açıldıysa, reencrypt() işlemi senkronize
olmayan modda çalışır. reencrypt() yönteminin çağrılması, yeniden şifreleme işlemini başlatır. İşlem
tamamlandığında, SQLConnection nesnesi bir reencrypt olayı gönderir. Yeniden şifrelemenin tamamlandığını
belirlemek için bir olay dinleyicisi kullanabilirsiniz:
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 190
Yerel SQL veritabanlarıyla çalışma
var newKey:ByteArray = new ByteArray();
// ... generate the new key and store it in newKey
conn.addEventListener(SQLEvent.REENCRYPT, reencryptHandler);
conn.reencrypt(newKey);
function reencryptHandler(event:SQLEvent):void
{
// save the fact that the key changed
}
reencrypt() işlemi, kendi işlemi içinde çalışır. İşlem kesintiye uğradığında veya başarısız olduğunda (örneğin,
uygulama işlem tamamlanmadan kapatıldığında) işlem geri alınır. Bu durumda, ilk şifreleme anahtarı veritabanının
şifreleme anahtarı olarak kalır.
reencrypt() yöntemi, veritabanından şifrelemeyi kaldırmak için kullanılamaz. reencrypt() yöntemine null
değerinin veya 16 bayt olmayan bir ByteArray değerinin iletilmesi hatayla sonuçlanır.
Şifrelemeyi veritabanıyla kullanmak için dikkate alınması gerekenler
“Yerel SQL veritabanları için kullanımlar” sayfa 185 bölümü, şifreli veritabanı kullanmak isteyebileceğiniz çeşitli
durumları gösterir. Farklı uygulamaların kullanım senaryolarının (bunlar ve diğer senaryolar dahil) farklı gizlilik
gereksinimleri olduğu açıktır. Uygulamanızda şifreleme kullanımını yapılandırma biçiminiz, bir veritabanındaki
verilerin ne kadar özel olduğunu denetlemenizin önemli bir parçasıdır. Örneğin, şifreli veritabanını kişisel verilerinizi
aynı bilgisayarı kullanan diğer kullanıcılardan bile saklı tutmak için kullanıyorsanız, her kullanıcının veritabanı kendi
şifreleme anahtarını gerektirir. En yüksek düzeyde güvenlik için, uygulamanız kullanıcı tarafından girilen paroladan
anahtar oluşturabilir. Şifreleme anahtarını parolaya dayandırmak, başka bir kişi kullanıcının bilgisayardaki hesabına
erişmeyi başarsa bile, verilere erişememesini sağlar. Güvenlik spektrumunun diğer ucunda, bir veritabanı dosyasının
uygulamanızın tüm kullanıcıları için okunabilir olmasını, ancak diğer uygulamaların bu dosyaya erişememesini
istiyorsunuz. Bu durumda, uygulamanın yüklenmiş her kopyasının, paylaşımlı bir şifreleme anahtarına erişimi olması
gerekir.
Uygulamanızı ve özellikle şifreleme anahtarının oluşturulduğu tekniği uygulama verileriniz için kullanmak istediğiniz
gizlilik düzeyine göre tasarlayabilirsiniz. Aşağıdaki liste, farklı veri gizliliği düzeyleri için tasarım önerileri sunar:
• Veritabanını herhangi bir bilgisayardaki uygulamaya erişimi olan tüm kullanıcılar için erişilebilir kılmak için
uygulamanın tüm örnekleri tarafından kullanılabilen tek bir anahtar kullanın. Örneğin, uygulama ilk kez
çalıştırıldığında, SSL gibi güvenli bir protokol kullanarak bir sunucudan paylaşımlı şifreleme anahtarını indirebilir.
Anahtarı gelecekte kullanmak üzere şifreli yerel depoya kaydedebilir. Alternatif olarak, bilgisayardaki her kullanıcıya
ilişkin verileri şifreleyin ve verileri taşınabilir kılmak için sunucu gibi uzak bir veri deposuyla senkronize edin.
• Veritabanını herhangi bir bilgisayardaki tek bir kullanıcı tarafından erişilebilir kılmak için, şifreleme anahtarını bir
kullanıcı sırrından (parola gibi) oluşturun. Anahtarı oluşturmak için belirli bir bilgisayara bağlı olan herhangi bir
değeri (şifreli yerel depoda saklanan bir değer gibi) kullanmayın. Alternatif olarak, bilgisayardaki her kullanıcıya
ilişkin verileri şifreleyin ve verileri taşınabilir kılmak için sunucu gibi uzak bir veri deposuyla senkronize edin.
• Veritabanını tek bir bilgisayardaki tek bir kişi tarafından erişilebilir kılmak için, anahtarı bir paroladan ve
oluşturulmuş bir salttan yaratın. Bu tekniğe ilişkin bir örnek için bkz. “Örnek: Şifreleme anahtarı oluşturma ve
kullanma” sayfa 191.
Bir uygulamayı şifreli bir veritabanı kullanmak üzere tasarlarken göz önüne alınması gereken diğer güvenlik konuları
şunlardır:
• Bir sistem her zaman en zayıf noktası kadar güvenlidir. Şifreleme anahtarı kullanmak için kullanıcı tarafından
girilen bir parolayı kullanıyorsanız, parolalarda minimum uzunluk ve karmaşıklık sınırlamaları uygulamayı göz
önünde bulundurun. Yalnızca temel karakterleri kullanan kısa bir parola, kolayca tahmin edilebilir.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 191
Yerel SQL veritabanlarıyla çalışma
• AIR uygulamasının kaynak kodu, kullanıcının bilgisayarında düz metinde (HTML içeriği için) veya derlemesi
kolayca açılabilir bir ikili formatta (SWF içeriği için) saklanır. Kaynak kod erişilebilir olduğundan, hatırlanması
gereken iki nokta şöyledir:
• Şifreleme anahtarınızı kaynak kodunuzda asla sabit olarak kodlamayın
• Şifreleme anahtarını oluşturmak için kullanılan tekniğin (rastgele karakter oluşturucu veya belirli bir karma
algoritma) bir saldırgan tarafından kolayca çözülebileceğini her zaman göz önünde bulundurun
• AIR veritabanı şifreleme CBC-MAC (CCM) moduyla Counter içeren Gelişmiş Şifreleme Standardı'nı (AES)
kullanır. Bu şifreleme, güvenli olmak için bir salt değeriyle birleştirilen kullanıcı tarafından girilmiş bir anahtarı
gerektirir. Buna ilişkin bir örnek için bkz. “Örnek: Şifreleme anahtarı oluşturma ve kullanma” sayfa 191.
• Veritabanını şifrelemeyi seçtiğinizde, bu veritabanıyla bağlantılı olan veritabanı motoru tarafından kullanılan tüm
disk dosyaları şifrelenir. Ancak, veritabanı motoru işlemlerdeki okuma ve yazma süresi performansını artırmak için
bazı verileri geçici olarak bellek içi bir önbellekte tutar. Bellekte yerleşik veriler şifrelenmez. Saldırgan AIR
uygulaması tarafından kullanılan belleğe erişmeyi örneğin hata ayıklayıcı kullanarak başarırsa, veritabanında açık
ve şifrelenmemiş olan veriler kullanılabilir durumda olabilir.
Örnek: Şifreleme anahtarı oluşturma ve kullanma
Bu örnek uygulama, şifreleme anahtarı oluşturma için bir tekniği gösterir. Bu uygulama, kullanıcının verileri için en
yüksek düzeyde gizlilik ve güvenlik sağlamak üzere tasarlanmıştır. Kişisel verileri korumanın önemli bir yönü,
uygulamanın veritabanına her bağlanmasında kullanıcının parolayı girmesini gerektirmesidir. Sonuç olarak, bu
örnekte gösterildiği gibi, bu gizlilik düzeyini gerektiren bir uygulama, veritabanı şifreleme anahtarını hiçbir zaman
doğrudan saklamamalıdır.
Uygulama iki bölümden oluşur: Şifreleme anahtarını oluşturan ActionScript sınıfı (EncryptionKeyGenerator sınıfı) ve
bu sınıfın nasıl kullanılacağını gösteren temel bir kullanıcı arabirimi. Tam kaynak kodu için bkz. “Şifreleme anahtarı
oluşturmak için tam örnek kod” sayfa 199.
Güvenli bir şifreleme anahtarı elde etmek için EncryptionKeyGenerator sınıfını kullanma
“EncryptionKeyGenerator sınıfını anlama” sayfa 193 bölümü, EncryptionKeyGenerator sınıfının veritabanına ilişkin
şifreleme anahtarı oluşturmak için kullandığı teknikleri ayrıntılandırır. Ancak, EncryptionKeyGenerator sınıfını
uygulamanızda kullanmak için bu ayrıntıları anlamak gerekli değildir.
EncryptionKeyGenerator sınıfını uygulamanızda kullanmak için bu adımları izleyin:
1 EncryptionKeyGenerator sınıfı, open-source ActionScript 3.0 core library (as3corelib) project içinde yer alır.
Kaynak kod ve belgeleri içeren as3corelib paketini indirebilirsiniz. Ayrıca proje sayfasından SWC veya kaynak kod
dosyalarını da indirebilirsiniz.
2 EncryptionKeyGenerator sınıfına ilişkin kaynak kodu (veya as3corelib SWC) uygulama kaynak kodunuzun onu
bulabileceği bir konuma yerleştirin.
3 Uygulama kaynak kodunuzda, EncryptionKeyGenerator sınıfı için bir import ifadesi ekleyin.
import com.adobe.air.crypto.EncryptionKeyGenerator;
4 Kodun veritabanını oluşturduğu veya veritabanına bağlantı açtığı noktadan önce, EncryptionKeyGenerator()
yapıcısını çağırarak bir EncryptionKeyGenerator örneği yaratacak kodu ekleyin.
var keyGenerator:EncryptionKeyGenerator = new EncryptionKeyGenerator();
5 Kullanıcıdan parola alın:
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 192
Yerel SQL veritabanlarıyla çalışma
var password:String = passwordInput.text;
if (!keyGenerator.validateStrongPassword(password))
{
// display an error message
return;
}
EncryptionKeyGenerator örneği, bu parolayı şifreleme anahtarı için temel olarak kullanır. (Sonraki örnekte
gösterilmiştir.) EncryptionKeyGenerator örneği, belirli güçlü parola doğrulama gereksinimlerine karşı parolayı test
eder. Doğrulama başarısız olursa, bir hata oluşur. Örnek kodun gösterdiği gibi, parolayı daha sonra
EncryptionKeyGenerator nesnesininvalidateStrongPassword() yöntemini kullanarak kontrol edebilirsiniz. Bu
yolla parolanın hatayı önlemek üzere güçlü bir parola olmak için minimum gereksinimleri karşılayıp
karşılamadığını belirleyebilirsiniz.
6 Şifreleme anahtarını paroladan oluşturun:
var encryptionKey:ByteArray = keyGenerator.getEncryptionKey(password);
getEncryptionKey() yöntemi, şifreleme anahtarını oluşturur ve döndürür (16 bayt ByteArray). Daha sonra
şifreleme anahtarını yeni şifreli veritabanınızı oluşturmak için veya var olan veritabanını açmak için
kullanabilirsiniz.
getEncryptionKey() yöntemi, adım 5'te elde edilen parola olan tek bir gerekli parametre içerir.
Not: Veriler için güvenlik ve gizliliği en yüksek düzeyde tutmak için, uygulama veritabanına her bağlandığında
kullanıcının şifre girmesini gerektirir. Kullanıcı parolasını veya veritabanı şifreleme anahtarını doğrudan
saklamayın. Bunu yapmak güvenlik riskleri oluşturur. Bunun yerine, bu örnekte gösterildiği gibi, bir uygulama şifreli
bir veritabanı oluştururken veya sonradan bu veritabanına bağlanırken paroladan şifreleme anahtarı türetmek için
aynı tekniği kullanmalıdır.
getEncryptionKey() yöntemi ikinci (isteğe bağlı) bir parametre olan overrideSaltELSKey parametresini de
kabul eder. EncryptionKeyGenerator, şifreleme anahtarının parçası olarak kullanılan rastgele bir değer (salt olarak
bilinir) oluşturur. Şifreleme anahtarının yeniden oluşturulabilmesi için, salt değeri AIR uygulamanızın Şifreli Yerel
Depo'sunda (ELS) saklanır. Varsayılan olarak, EncryptionKeyGenerator sınıfı ELS anahtarı olarak belirli bir Dize
kullanır. Düşük bir ihtimal olsa da, anahtar uygulama tarafından kullanılan başka bir anahtarla çakışabilir.
Varsayılan anahtarı kullanmak yerine, kendi ELS anahtarınızı belirlemek isteyebilirsiniz. Bu durumda, burada
gösterildiği gibi, ikinci getEncryptionKey() parametresi olarak iletilecek özel bir anahtar belirleyin:
var customKey:String = "My custom ELS salt key";
var encryptionKey:ByteArray = keyGenerator.getEncryptionKey(password, customKey);
7 Veritabanı oluşturma veya açma
Kodunuz getEncryptionKey() yöntemi tarafından döndürülen bir şifreleme anahtarıyla yeni bir şifreli veritabanı
oluşturabilir veya var olan şifreli bir veritabanını açmayı deneyebilir. Her iki durumda da, “Şifreli veritabanı
oluşturma” sayfa 186 ve “Şifreli bir veritabanına bağlanma” sayfa 188 bölümlerinde açıklandığı gibi
SQLConnection sınıfının open() veya openAsync() yöntemini kullanırsınız.
Bu örnekte, uygulama veritabanını senkronize olmayan yürütme modunda açmak üzere tasarlanmıştır. Kod,
uygun olay dinleyicilerini ayarlar ve şifreleme anahtarını son argüman olarak ileterek openAsync() yöntemini
çağırır:
conn.addEventListener(SQLEvent.OPEN, openHandler);
conn.addEventListener(SQLErrorEvent.ERROR, openError);
conn.openAsync(dbFile, SQLMode.CREATE, null, false, 1024, encryptionKey);
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 193
Yerel SQL veritabanlarıyla çalışma
Kod, dinleyici yöntemlerinde olay dinleyicisi kayıtlarını kaldırır. Daha sonra veritabanının oluşturulduğunu,
açıldığını veya bir hata oluştuğunu gösteren bir durum mesajı görüntüler. Bu olay işleyicilerinin en önemli bölümü
openError() yöntemindedir. Bu yöntemde if ifadesi veritabanının var olup olmadığını (kodun var olan bir
veritabanına bağlanmaya çalıştığı anlamına gelir) ve hata kimliği eşleşmelerinin sabit olup olmadığını kontrol eder
EncryptionKeyGenerator.ENCRYPTED_DB_PASSWORD_ERROR_ID. Bu koşullardan her ikisi de doğruysa, bu
büyük olasılıkla kullanıcının girdiği parolanın yanlış olduğu anlamına gelir. (Belirtilen dosyanın bir veritabanı
dosyası olmadığı anlamına da gelebilir.) Hata kimliğini kontrol eden kod aşağıdadır:
if (!createNewDB && event.error.errorID ==
EncryptionKeyGenerator.ENCRYPTED_DB_PASSWORD_ERROR_ID)
{
statusMsg.text = "Incorrect password!";
}
else
{
statusMsg.text = "Error creating or opening database.";
}
Örnek olay dinleyicileri için tam kod için bkz. “Şifreleme anahtarı oluşturmak için tam örnek kod” sayfa 199.
EncryptionKeyGenerator sınıfını anlama
EncryptionKeyGenerator sınıfını uygulama veritabanınıza ilişkin güvenli bir şifreleme anahtarı oluşturmak üzere
kullanmak için bu sınıfın iç çalışma yapısını anlamak gerekli değildir. Sınıfı kullanma işlemleri “Güvenli bir şifreleme
anahtarı elde etmek için EncryptionKeyGenerator sınıfını kullanma” sayfa 191 bölümünde anlatılmıştır. Ancak, bu
sınıfın kullandığı teknikleri anlamayı önemli görüyor olabilirsiniz. Örneğin, sınıfı uyarlamak veya farklı bir veri gizlilik
düzeyi istenen durumlar için sınıfın tekniklerinden bazılarını birleştirmek isteyebilirsiniz.
EncryptionKeyGenerator sınıfı, open-source ActionScript 3.0 core library (as3corelib) project içinde yer alır. Kaynak
kodu ve belgeler dahil the as3corelib paketini indirebilirsiniz.Ayrıca proje sitesinde kaynak kodunu görüntüleyebilir
ve açıklamalarla birlikte takip etmek üzere indirebilirsiniz.
Kod bir EncryptionKeyGenerator örneği oluşturduğunda ve bu örneğin getEncryptionKey() yöntemini
çağırdığında, yalnızca hak sahibi kullanıcının verilere erişebilmesini sağlamak için bazı adımlar atılır. Veritabanı
oluşturulmadan önce kullanıcı tarafından girilen paroladan bir şifreleme anahtarı oluşturma işlemi, veritabanını
açmak için şifreleme anahtarını yeniden oluşturma işlemiyle aynıdır.
Güçlü bir parola elde edin ve doğrulayın
Kod getEncryptionKey() yöntemini çağırdığında, parametre olarak bir parola sunar. Parola, şifreleme anahtarı için
temel olarak kullanılır. Bu tasarım, yalnızca kullanıcının bildiği bir bilgiyi kullanarak yalnızca parolayı bilen
kullanıcının veritabanındaki verilere ulaşabilmesini sağlar. Bir saldırgan kullanıcının bilgisayardaki hesabına erişse
bile, parolayı bilmeden veritabanına giremez. Maksimum güvenlik için, uygulama parolayı hiçbir zaman saklamaz.
Örnek uygulamada, passwordInput kullanıcının parolayı girdiği TextInput bileşeninin örnek adıdır. Uygulama,
doğrudan bileşenin text değerini değiştirmek yerine parolayı password adlı bir değişkene kopyalar.
var password:String = passwordInput.text;
Daha sonra örnek uygulama bir EncryptionKeyGenerator örneği oluşturur ve password değişkenini argüman olarak
kullanarak getEncryptionKey() yöntemini çağırır:
var keyGenerator:EncryptionKeyGenerator = new EncryptionKeyGenerator();
var encryptionKey:ByteArray = keyGenerator.getEncryptionKey(password);
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 194
Yerel SQL veritabanlarıyla çalışma
getEncryptionKey() yöntemi çağrıldığında EncryptionKeyGenerator sınıfının attığı ilk adım, parola güvenlik
düzeyi gereksinimlerini karşıladığından emin olmak için kullanıcı tarafından girilen parolayı kontrol etmektir. Bu
durumda, parola 8 - 32 karakter uzunluğunda olmalıdır. Büyük ve küçük harflerin karışımından ve en az bir sayı veya
sembol karakterinden oluşmalıdır.
Bu modeli kontrol eden yaygın ifade, STRONG_PASSWORD_PATTERN adlı bir sabit olarak tanımlanır:
private static const STRONG_PASSWORD_PATTERN:RegExp =
/(?=^.{8,32}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/;
Parolayı kontrol eden kod, EncryptionKeyGenerator sınıfının validateStrongPassword() yöntemindedir. Kod
şöyledir:
public function vaidateStrongPassword(password:String):Boolean
{
if (password == null || password.length <= 0)
{
return false;
}
return STRONG_PASSWORD_PATTERN.test(password))
}
getEncryptionKey() yöntemi validateStrongPassword() yöntemini çağırır ve parola geçerli değilse bir istisna
atar. validateStrongPassword() yöntemi, genel bir yöntemdir ve böylece kod, hata oluşmasını önlemek için
getEncryptionKey() yöntemini çağırmadan parolayı kontrol edebilir.
Parolayı 256 bit olarak genişletin
İşlemin sonraki aşamalarında, parola 256 bit uzunluğunda olmalıdır. Her kullanıcının tam olarak 256 bit (32 karakter)
uzunluğunda olan bir parola girmesini gerektirmek yerine, kod parola karakterlerini yineleyerek daha uzun bir parola
oluşturur.
getEncryptionKey() yöntemi, uzun parola oluşturma görevini gerçekleştirmek için concatenatePassword()
yöntemini çağırır.
var concatenatedPassword:String = concatenatePassword(password);
Aşağıdaki, concatenatePassword() yöntemine ilişkin koddur:
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 195
Yerel SQL veritabanlarıyla çalışma
private function concatenatePassword(pwd:String):String
{
var len:int = pwd.length;
var targetLength:int = 32;
if (len == targetLength)
{
return pwd;
}
var repetitions:int = Math.floor(targetLength / len);
var excess:int = targetLength % len;
var result:String = "";
for (var i:uint = 0; i < repetitions; i++)
{
result += pwd;
}
result += pwd.substr(0, excess);
return result;
}
Parola 256 bitten kısa olduğunda, kod parolayı 256 bit yapmak için kendisiyle bitiştirir. Uzunluk tam olarak
oluşmuyorsa, son yineleme parolanın tam olarak 256 bit olacağı biçimde kısaltılır.
256 bit salt değeri oluşturun veya elde edin
Sonraki adım, daha sonraki bir adımda parolayla birleştirilecek bir 256 bit salt değeri elde etmektir. salt, parola
oluşturmak için kullanıcı tarafından girilen bir değere eklenen veya kullanıcı tarafından girilen bir değerle birleştirilen
rastgele bir değerdir. Salt değerini bir parolayla kullanmak, kullanıcı parola olarak gerçek bir sözcük veya yaygın bir
terim seçtiğinde bile sistemin kullandığı parola+salt bileşiminin rastgele bir değer olmasını sağlar. Bu değerin rastgele
oluşu, saldırganın parolayı tahmin etmek için bir sözcük listesi kullandığı sözlük saldırısına karşı korunmaya yardımcı
olur. Ayrıca, salt değerini oluşturma ve şifreli yerel depoda saklama, bu değeri veritabanı dosyasının bulunduğu
bilgisayardaki kullanıcı hesabına bağlar.
Uygulama getEncryptionKey() yöntemini ilk kez çağırıyorsa, kod bir 256 bit salt değeri oluşturur. Aksi halde, kod
salt değerini şifreli yerel depodan yükler.
Salt, salt adlı bir değişkende saklanır. Kod, salt değerini şifreli yerel depodan yüklemeyi deneyerek, daha önceden
oluşturulmuş olup olmadığını belirler:
var salt:ByteArray = EncryptedLocalStore.getItem(saltKey);
if (salt == null)
{
salt = makeSalt();
EncryptedLocalStore.setItem(saltKey, salt);
}
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 196
Yerel SQL veritabanlarıyla çalışma
Kod yeni bir salt değeri oluşturduğunda, makeSalt() yöntemi 256 bit rastgele bir değer oluşturur. Değer şifreli yerel
depoda saklandığından, bir ByteArray nesnesi olarak oluşturulur. makeSalt() yöntemi, rastgele bir değer oluşturmak
için Math.random() yöntemini kullanır. Math.random() yöntemi bir defada 256 bit oluşturamaz. Bunun yerine, kod
Math.random() yöntemini sekiz defa çağırmak için bir döngü kullanır. Her defasında 0 ve 4294967295 arasında
(maksimum uint değeri) yer alan rastgele bir uint değeri oluşturulur. Uint değeri tam olarak 32 bit kullandığından,
kolaylık sağlamak için kullanılır. ByteArray öğesine sekiz uint değeri yazılarak bir 256 bit değer oluşturulur. Aşağıdaki,
makeSalt() yöntemine ilişkin koddur:
private function makeSalt():ByteArray
{
var result:ByteArray = new ByteArray;
for (var i:uint = 0; i < 8; i++)
{
result.writeUnsignedInt(Math.round(Math.random() * uint.MAX_VALUE));
}
return result;
}
Kod salt değerini Şifreli Yerel Depo'ya (ELS) kaydettiğinde veya bu değeri ELS'den aldığında, salt değerinin altında
saklanacağı String anahtarına ihtiyaç duyar. Anahtarı bilmeden, salt değeri elde edilemez. Bu durumda, şifreleme
anahtarı veritabanını yeniden açmak için her defasında yeniden oluşturulamaz. EncryptionKeyGenerator, varsayılan
olarak SALT_ELS_KEY sabitinde tanımlanan ön tanımlı bir ELS anahtarı kullanır. Varsayılan anahtarı kullanmak
yerine, uygulama kodu getEncryptionKey() yöntemine yapılan çağrıda kullanmak üzere bir ELS anahtarı da
belirleyebilir. Varsayılan veya uygulama tarafından belirlenen salt ELS anahtarı, saltKey adlı bir değişkende saklanır.
Bu değişken, önceki kod listelemesinde gösterildiği gibi EncryptedLocalStore.setItem() ve
EncryptedLocalStore.getItem() çağrılarında kullanılır.
XOR operatörünü kullanarak 256 bit parolayı ve salt değerini birleştirin.
Kod, artık bir 256 bit parola ve bir 256 bit salt değerine sahiptir. Daha sonra, salt değeri ve bitiştirilmiş parolayı tek bir
değer halinde birleştirmek için bit tabanlı XOR işlemini kullanır. Bu teknik, tüm olası karakterler aralığında yer alan
karakterlerden oluşan bir 256 bit parola oluşturur. Gerçek parola girişi genellikle temel olarak alfanümerik
karakterlerden oluştuğu halde bu ilke geçerlidir. Rastgeleliğin artırılması, kullanıcının uzun, karmaşık bir parola
girmesini gerektirmeden olası parolalar kümesini genişletir.
XOR işleminin sonucu unhashedKey değişkeninde saklanır. İki değer üzerinde bit tabanlı bir XOR gerçekleştirme
işlemi xorBytes() yönteminde olur:
var unhashedKey:ByteArray = xorBytes(concatenatedPassword, salt);
Bit tabanlı XOR operatörü (^) iki uint değerini alır ve bir uint değeri döndürür. (Bir uint değeri 32 bit içerir.)
xorBytes() yöntemine iletilen giriş değerleri, String (parola) ve ByteArray (salt) değerleridir. Sonuç olarak, kod XOR
operatörünü kullanarak her girişten bir defada birleştirilecek 32 bit ayıklamak için bir döngü kullanır.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 197
Yerel SQL veritabanlarıyla çalışma
private function xorBytes(passwordString:String, salt:ByteArray):ByteArray
{
var result:ByteArray = new ByteArray();
for (var i:uint = 0; i < 32; i += 4)
{
// ...
}
return result;
}
Döngü içinde ilk 32 bit (4 bayt) passwordString parametresinden ayıklanır. Bu bitler ayıklanır ve iki bölümlü bir
işlemde bir uint (o1) değerine dönüştürülür. İlk olarak, charCodeAt() yöntemi her karakterin sayısal değerini getirir.
Daha sonra, sol shift operatörü kullanılarak bu değer uint değerindeki uygun konuma kaydırılır (<<) ve kaydırılan
değer o1 değerine eklenir. Örneğin, bitleri 24 bit sola kaydırmak için bit tabanlı sol shift operatörü (<<) kullanılması
ve bu değerin o1 değerine atanması yoluyla, ilk karakter (i) ilk 8 bit olur. İkinci karakter (i + 1), değerinin 16 bit sola
kaydırılması ve sonucun o1 değerine eklenmesiyle, ikinci 8 bit olur. Üçüncü ve dördüncü karakterler de aynı şekilde
eklenir.
// ...
// Extract 4 bytes from the password string and convert to a uint
var o1:uint = passwordString.charCodeAt(i) << 24;
o1 += passwordString.charCodeAt(i + 1) << 16;
o1 += passwordString.charCodeAt(i + 2) << 8;
o1 += passwordString.charCodeAt(i + 3);
// ...
o1 değişkeni artık passwordString parametresinden 32 bit içerir. Daha sonra, readUnsignedInt() yöntemi
çağrılarak salt değerinden 32 bit ayıklanır. 32 bit, o2 uint değişkeninde saklanır.
// ...
salt.position = i;
var o2:uint = salt.readUnsignedInt();
// ...
Son olarak, iki 32 bit (uint) değer XOR operatörü kullanılarak birleştirilir ve sonuç result adlı ByteArray öğesine
yazılır.
// ...
var xor:uint = o1 ^ o2;
result.writeUnsignedInt(xor);
// ...
Döngü tamamlandığında, XOR sonucunu içeren ByteArray döndürülür.
// ...
}
return result;
}
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 198
Yerel SQL veritabanlarıyla çalışma
Anahtar için karma oluşturun
Bitiştirilen parola ve salt değeri birleştirildiğinde, sonraki adım SHA-256 karma algoritma aracılığıyla karma
oluşturmak ve bu değeri daha güvenli kılmaktır. Değer için karma oluşturmak, saldırganın tersine mühendislik
uygulamasını zorlaştırır.
Bu noktada kod, salt değeriyle birleştirilen bitiştirilmiş parolayı içeren unhashedKey adlı bir ByteArray öğesi içerir.
ActionScript 3.0 core library (as3corelib) projesi, com.adobe.crypto paketinde bir SHA256 sınıfı içerir. ByteArray
üzerinde SHA-256 karma gerçekleştiren ve onaltılı bir sayı olarak 256 bit karma sonucu içeren bir String döndüren
SHA256.hashBytes() yöntemi. EncryptionKeyGenerator sınıfı, anahtar için karma oluşturmak üzere SHA256
sınıfını kullanır.
var hashedKey:String = SHA256.hashBytes(unhashedKey);
Karmadan şifreleme anahtarını ayıklayın.
Şifreleme anahtarı, tam olarak 16 bayt (128 bit) uzunluğunda olan bir ByteArray olmalıdır. SHA-256 karma algoritma
sonucu her zaman 256 karakter uzunluğundadır. Sonuç olarak, son adım geçerli şifreleme anahtarı olarak kullanılmak
üzere karma oluşturulan sonuçtan 128 bit seçmektir.
Kod, EncryptionKeyGenerator sınıfında generateEncryptionKey() yöntemini çağırarak anahtarı 128 bite indirger.
Daha sonra bu yöntemin sonucunu getEncryptionKey() yönteminin sonucu olarak döndürür:
var encryptionKey:ByteArray = generateEncryptionKey(hashedKey);
return encryptionKey;
İlk 128 biti şifreleme anahtarı olarak kullanmak gerekmez. İstediğiniz bir noktadan başlayan bir bit aralığı seçebilir,
diğer bitleri seçebilir veya başka bir bit seçme yolu kullanabilirsiniz. Önemli olan, kodun 128 ayrı bit seçmesi ve her
defasında aynı 128 bitin kullanılmasıdır.
Bu durumda, generateEncryptionKey() yöntemi şifreleme anahtarının 18. baytında başlayan bit aralığını kullanır.
Önceden belirtildiği gibi, SHA256 sınıfı onaltılı bir sayı olan 256 bit karma içeren bir String değeri döndürür. 128 bitlik
tek bir blok, bir defada ByteArray öğesine eklemek için çok fazla bayt içerir. Sonuç olarak, kod karakterleri onaltılı
String öğesinden ayıklamak, bunları gerçek sayısal değerlere dönüştürmek ve ByteArray öğesine eklemek için for
döngüsünü kullanır. SHA 256 sonuç String'i 64 karakter uzunluğundadır. 128 bit aralığı String'de 32 karaktere eşittir
ve her karakter 4 biti temsil eder. ByteArray öğesine ekleyebileceğiniz en küçük veri artışı, hash String'de iki karaktere
eşit olan bit bayttır (8 bit). Sonuç olarak, 2 karakter artışında döngü 0'dan 31'e kadar (32 karakter) sayar.
Döngü içinde, kod önce geçerli karakter çifti için başlangıç konumu belirler. İstenen aralık dizin konumu 17'deki (18.
bayt) karakterde başladığından, position değişkenine geçerli yineleyici değeri (i) + 17 atanır. Kod, geçerli konumda
iki karakter ayıklamak için String nesnesinin substr() yöntemini kullanır. Bu karakterler hex değişkeninde saklanır.
Daha sonra, kod hex String'ini onlu tamsayı değerine dönüştürmek için parseInt() yöntemini kullanır. Bu değeri
byte değişkeninde saklar. Son olarak, kod writeByte() yöntemini kullanarak byte içindeki değeri result
ByteArray öğesine ekler. Döngü tamamlandığında, result ByteArray 16 bayt içerir ve veritabanı şifreleme anahtarı
olarak kullanılmaya hazırdır.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 199
Yerel SQL veritabanlarıyla çalışma
private function generateEncryptionKey(hash:String):ByteArray
{
var result:ByteArray = new ByteArray();
for (var i:uint = 0; i < 32; i += 2)
{
var position:uint = i + 17;
var hex:String = hash.substr(position, 2);
var byte:int = parseInt(hex, 16);
result.writeByte(byte);
}
return result;
}
Şifreleme anahtarı oluşturmak için tam örnek kod
Aşağıdaki, “Şifreleme anahtarı oluşturma ve kullanma” örnek uygulaması için tam koddur. Kod, iki bölümden oluşur.
Örnek, paroladan şifreleme anahtarı oluşturmak için EncryptionKeyGenerator sınıfını kullanır.
EncryptionKeyGenerator sınıfı, open-source ActionScript 3.0 core library (as3corelib) project içinde yer alır. Kaynak
kod ve belgeleri içeren as3corelib paketini indirebilirsiniz. Ayrıca proje sayfasından SWC veya kaynak kod dosyalarını
da indirebilirsiniz.
Uygulama FLA dosyası, şifreli bir veritabanına bağlantı oluşturan veya açan basit bir uygulamaya ilişkin kaynak
kodunu içerir. FLA dosyası, sahnede konumlandırılmış dört bileşen içerir:
Örnek adı
Bileşen türü
Açıklama
instructions
Label
Kullanıcıya verilen talimatları içerir
passwordInput
TextInput
Kullanıcının parolayı girdiği giriş alanı
openButton
Button
Kullanıcının parolayı girdikten sonra tıklattığı düğme
statusMsg
Label
Durum (başarı veya hata) mesajlarını görüntüler
Uygulamaya ilişkin kod, ana zaman çizelgesinin kare 1'i üzerindeki anahtar karede tanımlanmıştır. Aşağıdaki,
uygulamaya ilişkin koddur:
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 200
Yerel SQL veritabanlarıyla çalışma
import com.adobe.air.crypto.EncryptionKeyGenerator;
const dbFileName:String = "encryptedDatabase.db";
var dbFile:File;
var createNewDB:Boolean = true;
var conn:SQLConnection;
init();
// ------- Event handling ------function init():void
{
passwordInput.displayAsPassword = true;
openButton.addEventListener(MouseEvent.CLICK, openConnection);
statusMsg.setStyle("textFormat", new TextFormat(null, null, 0x990000));
conn = new SQLConnection();
dbFile = File.applicationStorageDirectory.resolvePath(dbFileName);
if (dbFile.exists)
{
createNewDB = false;
instructions.text = "Enter your database password to open the encrypted database.";
openButton.label = "Open Database";
}
else
{
instructions.text = "Enter a password to create an encrypted database. The next time
you open the application, you will need to re-enter the password to open the database again.";
openButton.label = "Create Database";
}
}
function openConnection(event:MouseEvent):void
{
var keyGenerator:EncryptionKeyGenerator = new EncryptionKeyGenerator();
var password:String = passwordInput.text;
if (password == null || password.length <= 0)
{
statusMsg.text = "Please specify a password.";
return;
}
if (!keyGenerator.validateStrongPassword(password))
{
statusMsg.text = "The password must be 8-32 characters long. It must contain at least
one lowercase letter, at least one uppercase letter, and at least one number or symbol.";
return;
}
passwordInput.text = "";
passwordInput.enabled = false;
openButton.enabled = false;
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 201
Yerel SQL veritabanlarıyla çalışma
var encryptionKey:ByteArray = keyGenerator.getEncryptionKey(password);
conn.addEventListener(SQLEvent.OPEN, openHandler);
conn.addEventListener(SQLErrorEvent.ERROR, openError);
conn.openAsync(dbFile, SQLMode.CREATE, null, false, 1024, encryptionKey);
}
function openHandler(event:SQLEvent):void
{
conn.removeEventListener(SQLEvent.OPEN, openHandler);
conn.removeEventListener(SQLErrorEvent.ERROR, openError);
statusMsg.setStyle("textFormat", new TextFormat(null, null, 0x009900));
if (createNewDB)
{
statusMsg.text = "The encrypted database was created successfully.";
}
else
{
statusMsg.text = "The encrypted database was opened successfully.";
}
}
function openError(event:SQLErrorEvent):void
{
conn.removeEventListener(SQLEvent.OPEN, openHandler);
conn.removeEventListener(SQLErrorEvent.ERROR, openError);
if (!createNewDB && event.error.errorID ==
EncryptionKeyGenerator.ENCRYPTED_DB_PASSWORD_ERROR_ID)
{
statusMsg.text = "Incorrect password!";
}
else
{
statusMsg.text = "Error creating or opening database.";
}
}
SQL veritabanlarıyla çalışmak için stratejiler
Bir uygulamanın yerel SQL veritabanlarına erişmesi ve bu veritabanlarıyla çalışmasının çeşitli yolları vardır. Uygulama
tasarımı, uygulama kodunun düzenlenme biçimi, işlemlerin gerçekleştirilme sırası ve zamanlaması, vb. gibi konularda
farklılaşır. Seçtiğiniz teknikler, uygulamanızı geliştirmenin kolaylığı üzerinde etkili olabilir. Bu teknikler, uygulamayı
gelecekteki güncellemelerde değiştirmenin kolaylığını etkileyebilir. Uygulamanın kullanıcının bakış açısına göre ne
kadar iyi çalıştığı da bu tekniklere göre değişebilir.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 202
Yerel SQL veritabanlarıyla çalışma
Önceden doldurulmuş bir veritabanını dağıtma
Uygulamanızda bir AIR yerel SQL veritabanı kullandığınızda, uygulama tablolar, sütunlar, vb. içeren belirli bir yapıya
sahip bir veritabanı bekler. Bazı uygulamalar veritabanı dosyasının önceden veriyle doldurulmuş olmasını da bekler.
Veritabanının uygun bir yapıya sahip olmasını sağlamanın bir yolu veritabanını uygulama kodunda oluşturmaktır.
Uygulama yüklendiğinde, belirli bir konumdaki veritabanı dosyasının varlığını kontrol eder. Dosya mevcut değilse,
uygulama veritabanı dosyasını ve veritabanı yapısını oluşturmak, tabloları başlangıç verileriyle doldurmak için bir dizi
komut yürütür.
Veritabanını ve veritabanı tablolarını oluşturan kod genellikle karmaşıktır. Bu kod, uygulamanın yüklenen kullanım
ömründe genellikle yalnızca bir defa kullanılır, ancak yine de uygulamanın boyutuna ve karmaşıklığına katkıda
bulunur. Veritabanını, yapıyı ve verileri programlama yoluyla oluşturmaya alternatif olarak, uygulamanızla birlikte
önceden doldurulmuş bir veritabanını dağıtabilirsiniz. Önceden doldurulmuş bir veritabanı dağıtmak için, veritabanı
dosyasını uygulamanın AIR paketine dahil edin.
AIR paketinde bulunan tüm dosyalar gibi, paketlenmiş bir veritabanı dosyası uygulama dizinine yüklenir
(File.applicationDirectory özelliğiyle temsil edilen dizin). Ancak, bu dizindeki dosyalar salt okunur dosyalardır.
AIR paketindeki dosyayı bir “şablon” veritabanı olarak kullanın. Kullanıcı uygulamayı ilk kez çalıştırdığında, orijinal
veritabanı dosyasını kullanıcının depo dizinine (veya başka bir konuma) kopyalayın ve uygulamada bu veritabanını
kullanın.
Veritabanı performansını iyileştirme
Adobe AIR'de bulunan çeşitli teknikler, uygulamanızdaki veritabanı işlemlerinin performansını artırmanıza yardımcı olur.
Burada açıklanan tekniklerin yanı sıra, bir SQL ifadesinin yazılış biçimi de veritabanı performansını etkileyebilir.
Belirli bir sonuç kümesi elde etmek amacıyla bir SQL SELECT ifadesi yazmanın genellikle birden çok yolu vardır. Bazı
durumlarda, farklı yaklaşımlar veritabanı motorunun daha çok veya daha az çalışmasını gerektirir. Veritabanı
performansını iyileştirmenin bu yönüne—daha iyi veritabanı performansına yönelik SQL ifadeleri tasarlama—Adobe
AIR belgelerinde değinilmemiştir.
Her SQL ifadesi için bir SQLStatement örneği kullanın
Bir SQL ifadesi yürütülmeden önce, çalışma zamanı ifadenin yürütülmesi için dahili olarak gerçekleştirilecek adımları
belirlemek üzere ifadeyi hazırlar (derler). Daha önce yürütülmemiş olan bir SQLStatement örneğinde
SQLStatement.execute() yöntemini çağırdığınızda, ifade yürütülmeden önce otomatik olarak hazırlanır. Daha
sonraki execute() yöntemi çağrılarında, SQLStatement.text özelliği değişmediği sürece, ifade hala hazır
durumdadır. Sonuç olarak, ifade daha hızlı yürütülür.
İfade yürütmeleri arasında değerlerin değişmesi gerekiyorsa, ifadeleri yeniden kullanmaktan maksimum fayda
sağlamak için ifadenizi özelleştirmek üzere ifade parametrelerini kullanın. (İfade parametreleri,
SQLStatement.parameters ilişkilendirici dizi özelliği kullanılarak belirtilir.) SQLStatement örneğinin text
özelliğinin aksine, ifade parametrelerinin değerlerini değiştirdiğinizde, çalışma zamanının ifadeyi yeniden hazırlaması
gerekmez. İfadelerde parametre kullanma hakkında daha fazla bilgi için bkz. “İfadelerde parametreler kullanma”
sayfa 167.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 203
Yerel SQL veritabanlarıyla çalışma
Bir ifadenin hazırlanması ve yürütülmesi çaba gerektiren bir işlem olduğundan başlangıç verilerini önceden yüklemek
ve daha sonra diğer ifadeleri arka planda yürütmek, iyi bir stratejidir. Önce uygulamanın gerektirdiği verileri yükleyin.
Uygulamanızın ilk başlangıç işlemleri tamamlandığında veya uygulamadaki başka bir “boş” zamanda diğer ifadeleri
yürütün. Örneğin, uygulamanız ilk ekranı görüntülemek için veritabanına erişmiyorsa, bu ekran görüntülenene kadar
bekleyin, daha sonra veritabanı bağlantısını açın ve son olarak SQLStatement örneklerini oluşturup
yürütebildiklerinizi yürütün. Alternatif olarak, uygulamanızın başlar başlamaz belirli bir sorgunun sonucu gibi bazı
verileri görüntülediğini varsayın. Bu durumda, devam edin ve bu sorguya ilişkin SQLStatement örneğini yürütün.
Başlangıç verileri yüklendikten ve görüntülendikten sonra, diğer veritabanı işlemleri için SQLStatement örneklerini
oluşturun ve mümkünse diğer gerekli ifadeleri daha sonra yürütün.
Bir SQLStatement örneğini bir kez hazırlandıktan sonra yeniden kullandığınızda, uygulamanız bu SQLStatement
örneğibe bir başvuru tutmalıdır. Örneğe ilişkin bir başvuru tutmak için, değişkeni işlem kapsamlı değil, sınıf kapsamlı
bir değişken olarak belirtin. Bunu yapmanın iyi bir yolu, uygulamanızı SQL ifadesinin tek bir sınıfta sarılacağı biçimde
yapılandırmaktır. Bileşim halinde yürütülen bir ifade grubu da tek bir sınıfta sarılabilir. SQLStatement örneği veya
örnekleri bu sınıfın üye değişkenleri olarak tanımlandığında, sarma sınıfı örneği uygulamada bulunduğu sürece, bu
örnekler de kalıcı olur. Minimum düzeyde, örneğin bellekte kalması için işlevin dışında yer alan bir SQLStatement
örneği içeren bir değişken tanımlayabilirsiniz. Örneğin, SQLStatement örneğini ActionScript sınıfında yer alan bir üye
değişkeni veya bir JavaScript dosyasında yer alan, işlev olmayan bir değişken olarak belirleyin. Daha sonra, sorguyu
gerçekten yürütmek istediğinizde ifadenin parametre değerlerini ayarlayabilir ve execute() yöntemini
çağırabilirsiniz.
Birden çok işlemi bir işlemde gruplayın
Veri ekleme ve değiştirmeyi içeren çok sayıda SQL ifadesi yürüttüğünüzü varsayın (INSERT veya UPDATE ifadeleri).
Tüm ifadeleri açık bir işlem içinde yürüterek performansta önemli bir artış sağlayabilirsiniz. Açık olarak bir işlem
başlatmazsanız, ifadelerden her biri kendisine ait otomatik olarak oluşturulmuş işlemlerde çalışır. Her işlemin (her
ifadenin) yürütülmesi tamamlandığında, çalışma zamanı elde edilen verileri diskteki veritabanı dosyasına yazar. Diğer
taraftan, açık olarak bir işlem oluşturur ve ifadeleri bu işlem bağlamında yürütürseniz ne olacağını düşünün. Çalışma
zamanı bellekteki tüm değişiklikleri yapar, daha sonra işlem gerçekleştiğinde tüm değişiklikleri bir defada veritabanı
dosyasına yazar. Verilerin diske yazılması genellikle işlemin en zaman yoğunluklu bölümüdür. Sonuç olarak, her SQL
ifadesi için bir kez diske yazmak yerine bir defada yazmak, performansı önemli ölçüde artırabilir.
Çalışma zamanı işlemesini en aza indirin
Aşağıdaki tekniklerin kullanılması, veritabanı motoru tarafında gereksiz işlerin yapılmasını önler ve uygulamaların
daha yüksek performansla çalışmasını sağlar:
• İfadedeki tablo adlarının yanı sıra, veritabanı adlarını da her zaman açıkça belirtin. (Ana veritabanıysa “ana”
sözcüğünü kullanın.) Örneğin, SELECT employeeId FROM main ifadesini kullanın.SELECT employeeId FROM
employees yerine employees. Veritabanı adının açıkça belirtilmesi, çalışma zamanının eşleşen tabloyu bulmak
için her veritabanını kontrol etmesini önler. Ayrıca çalışma zamanının yanlış veritabanını seçme olasılığını da
engeller. Bir SQLConnection yalnızca tek bir veritabanına bağlandığında bile bu kuralı uygulayın, çünkü
SQLConnection perde arkasında SQL ifadeleri aracılığıyla erişilebilen geçici bir veritabanına daha bağlıdır.
• Sütun adlarını her zaman SELECT or INSERT ifadesinde açıkça belirtin.
• Çok sayıda satır alan bir SELECT ifadesinin döndürdüğü satırları bölümleyin: bkz. “SELECT sonuçlarını bölümler
halinde alma” sayfa 173.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 204
Yerel SQL veritabanlarıyla çalışma
Şema değişikliklerinden kaçının
Veritabanı tablolarına veri ekledikten sonra mümkünse veritabanı şemasını (tablo yapısını) değiştirmekten kaçının.
Bir veritabanı dosyası, normalde dosya başlangıcında bulunan tablo tanımlarıyla yapılandırılır. Bir veritabanına
bağlantı açtığınızda, çalışma zamanı bu tanımları yükler. Veritabanı tablolarına veri eklediğinizde, bu veriler dosyaya
tablo tanım verilerinin ardından eklenir. Ancak, tabloya sütun eklemek veya yeni bir tablo eklemek gibi şema
değişiklikleri yaparsanız, yeni tablo tanım verileri veritabanı dosyasındaki tablo verileriyle karışır. Tablo tanım
verilerinin tümü veritabanı dosyasının başlangıcında değilse, çalışma zamanı tablo tanım verilerini dosyanın farklı
bölümlerinden okuduğu için bir veritabanı bağlantısı açmak çok uzun zaman alabilir.
Şema değişiklikleri yapmanız gerekiyorsa SQLConnection.compact() yöntemini değişiklikleri tamamladıktan sonra
çağırabilirsiniz. Bu işlem veritabanı dosyasını tablo tanım bilgilerinin bütün olarak dosyanın başlangıcında yer alacağı
biçimde yeniden yapılandırır. Ancak, compact() işlemi, veritabanı büyüdükçe daha çok zaman alabilir.
Yerel SQL veritabanlarıyla çalışmak için en iyi uygulamalar
Aşağıdaki liste, yerel SQL veritabanlarıyla çalışırken performansı, güvenliği ve uygulama bakımınızın kolaylığını
artırmak için kullanabileceğiniz, önerilen tekniklerin kümesidir. Veritabanı uygulamalarını iyileştirmeye yönelik ek
teknikler için bkz. “Veritabanı performansını iyileştirme” sayfa 202.
Veritabanı bağlantılarını önceden oluşturun
Uygulamanız ilk yüklendiğinde herhangi bir ifade yürütmese bile, bir SQLConnection nesnesini başlatın ve ifade
çalıştırma sırasında gecikmeleri önlemek için önceden (örneğin ilk uygulama başlangıcından sonra) bu nesnenin
open() veya openAsync() yöntemini çağırın. Bkz. “Veritabanına bağlanma” sayfa 164.
Veritabanı bağlantılarını yeniden kullanma
Uygulamanızın yürütülmesi sırasında belirli bir veritabanına erişiyorsanız, SQLConnection örneğine ilişkin bir
başvuru tutun ve bağlantıyı kapatıp yeniden açmak yerine uygulama boyunca bu başvuruyu yeniden kullanın. Bkz.
“Veritabanına bağlanma” sayfa 164.
Senkronize olmayan yürütme modunu tercih edin
Veri erişim kodunu yazma sırasında işlemleri senkronize olarak yürütmek uygun görünebilir, çünkü senkronize
işlemleri kullanmak genellikle daha kısa ve daha az karmaşık kodlar gerektirir. Ancak, “Senkronize ve senkronize
olmayan veritabanı işlemlerini kullanma” sayfa 181 bölümünde açıklandığı gibi, senkronize işlemlerin performans
üzerinde kullanıcıların açıkça görebildiği, uygulamayı yavaşlatan bir etkisi vardır. Tek bir işlemin aldığı süre işleme ve
özellikle işlemin içerdiği veri miktarına göre değişir. Örneğin, veritabanına yalnızca bir satır ekleyen bir SQL INSERT
ifadesi, binlerce veri satırı alan bir SELECT ifadesinden çok daha az zaman alır. Ancak, birden çok işlemi
gerçekleştirmek için senkronize yürütmeyi kullandığınızda, işlemler genellikle yanyana dizilir. Tek bir işlemin aldığı
zaman çok kısa olsa bile, tüm senkronize işlem tamamlanana kadar uygulama donar. Sonuç olarak, yanyana dizilen
birden çok işlemin gerektirdiği birikimli süre, uygulamanızı durdurmak için yeterli olabilir.
Özellikle çok sayıda satır içeren işlemler için standart bir yaklaşım olan senkronize olmayan işlemleri kullanın.
“SELECT sonuçlarını bölümler halinde alma” sayfa 173 bölümünde anlatıldığı gibi, SELECT ifadesi sonuçları
işlemesinin bölümlenmesi için bir teknik mevcuttur. Ancak, bu teknik yalnızca senkronize olmayan yürütme
modunda kullanılabilir. Senkronize işlemleri yalnızca senkronize olmayan programlamayı kullanarak belirli işlevleri
yürütemediğinizde, uygulamanızın kullanıcılarının performanstan ödün vermesi gerektiğini göz önüne alarak ve
uygulamanızın performansının nasıl etkileneceğini bileceğiniz biçimde uygulamanızı test ettiyseniz kullanın.
Senkronize olmayan yürütmenin kullanılması daha karmaşık kodlama içerebilir. Ancak, kodu yalnızca bir defa
yazmanız gerektiğini, ancak uygulama kullanıcılarının bu kodu hızlı veya yavaş biçimde defalarca kullanmak zorunda
olduklarını unutmayın.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 205
Yerel SQL veritabanlarıyla çalışma
Çoğu durumda, yürütülecek her SQL ifadesi için ayrı bir SQLStatement örneği kullanılarak, senkronize olmayan
kodun yazılma biçimi bakımından senkronize koda benzemesini sağlayacak şekilde, birden çok SQL işlemi bir defada
kuyruğa alınabilir. Daha fazla bilgi için bkz. “Senkronize olmayan yürütme modelini anlama” sayfa 184.
Ayrı SQL ifadeleri kullanın ve SQLStatement'ın text özelliğini değiştirmeyin.
Bir uygulamada bir defadan çok yürütülen bir SQL ifadesi için, her SQL ifadesine ilişkin ayrı bir SQLStatement örneği
oluşturun. SQLStatement örneğini SQL komutu her yürütüldüğünde kullanın. Örneğin, birçok defa gerçekleştirilecek
dört farklı SQL işlemi içeren bir uygulama oluşturduğunuzu varsayın. Bu durumda, dört ayrı SQLStatement örneği
oluşturun ve her ifadeyi yürütmek için bu ifadenin execute() yöntemini çağırın. Tüm SQL ifadeleri için tek bir
SQLStatement örneği kullanarak ifadenin her yürütülmesinden önce text özelliğini yeniden tanımlama
alternatifinden kaçının. Daha fazla bilgi için bkz. “Her SQL ifadesi için bir SQLStatement örneği kullanın” sayfa 202.
İfade parametreleri kullanın
SQLStatement parametreleri kullanın—kullanıcı girişini hiçbir zaman ifade metnine bitiştirmeyin. SQL yerleştirme
saldırıları olasılığını engellediğinden, parametre kullanmak uygulamanız için her zaman daha güvenlidir. Sorgularda
nesneleri kullanmayı (yalnızca SQL değişmez değerleri yerine) olanaklı kılar. Ayrıca, her yürütüldüklerinde yeniden
derlenmeleri gerekmeden yeniden kullanılabildiklerinden, ifadelerin daha verimli biçimde çalışmasını sağlar. Daha
fazla bilgi için bkz. “İfadelerde parametreler kullanma” sayfa 167.
Sütun ve parametre adları için sabitler kullanın.
SQLStatement için bir itemClass belirtmediğinizde, yazım hatalarını önlemek için tablonun sütun adlarını içeren
String sabitleri tanımlayın. Bu sabitleri sonuç nesnelerinden değerleri alırken özellik adları için ve ifade metinlerinde
kullanın. Sabitleri parametre adları için de kullanın.
206
Bölüm 19: Şifreli verileri saklama
Adobe® AIR™ çalışma zamanı, kullanıcının bilgisayarında yüklü olan her AIR uygulaması için kalıcı şifreli yerel bir
depo sağlar. Bu sayede, kullanıcının yerel sabit sürücüsünde, şifresi başka kullanıcılar veya uygulamalar kullanılarak
kolay bir şekilde çözülemeyecek olan şifreli bir formatta saklanan verileri kaydedebilir ve alabilirsiniz. Her AIR
uygulaması için ayrı bir şifreli yerel depo kullanılır ve her AIR uygulaması, her bir kullanıcı için ayrı bir şifreli yerel
depo kullanır.
Not: AIR, şifreli yerel deponun yanı sıra SQL veritabanlarında saklanan içerik için şifreleme de sağlar. Ayrıntılar için
bkz. “Şifrelemeyi SQL veritabanlarıyla kullanma” sayfa 185.
Web hizmetleri için oturum açma kimlik bilgileri gibi güvenceye alınması gereken bilgileri saklamak için şifreli yerel
depoyu kullanmak isteyebilirsiniz.
AIR, şifreli yerel depoyu her bir uygulama ve kullanıcıyla ilişkilendirmek için Windows'ta DPAPI, Mac OS'de
KeyChain ve Linux'ta KeyRing veya KWallet kullanır. Şifreli yerel depo AES-CBC 128-bit şifreleme kullanır.
Şifreli yerel depodaki bilgiler yalnızca uygulama güvenliği sanal alanındaki AIR uygulama içeriği tarafından
kullanılabilir.
Yerel depodan veri saklamak ve almak için, EncryptedLocalStore sınıfının setItem() ve removeItem() statik
yöntemlerini kullanın. Veriler, verileri bayt dizileri olarak saklayan ve dizeleri anahtar olarak kullanan karma bir
tabloda saklanır.
Örneğin aşağıdaki kod bir dizeyi şifreli yerel depoda saklar:
var str:String = "Bob";
var bytes:ByteArray = new ByteArray();
bytes.writeUTFBytes(str);
EncryptedLocalStore.setItem("firstName", bytes);
var storedValue:ByteArray = EncryptedLocalStore.getItem("firstName");
trace(storedValue.readUTFBytes(storedValue.length)); // "Bob"
setItem() yönteminin üçüncü parametresi olan stronglyBound isteğe bağlıdır. Bu parametre true olarak ayarlı
olduğunda, şu durumlarda, saklanan öğeyi yayıncı kimliğinin yanı sıra saklayan AIR uygulamasının dijital imzasına
ve bitlerine ciltleyen şifreli yerel depo, daha yüksek bir güvenlik düzeyi sağlar:
var str:String = "Bob";
var bytes:ByteArray = new ByteArray();
bytes.writeUTFBytes(str);
EncryptedLocalStore.setItem("firstName", bytes, true);
stronglyBoundtrue olarak ayarlıyken saklanan bir öğe için, getItem() öğesine yapılan sonraki çağrılar yalnızca
çağıran AIR uygulaması saklayan uygulamayla aynıysa başarılı olur (uygulama dizininde bulunan dosyalardaki hiçbir
veri değiştirilmemişse). Çağıran AIR uygulaması saklayan uygulamadan farklıysa, güçlü şekilde bağlı bir öğe için
getItem() öğesini çağırdığınızda uygulama bir Hata istisnası atar. Uygulamanızı güncellerseniz, şifreli yerel depoya
önceden yazılmış olan güçlü şekilde bağlı verileri okuyamaz.
AIR uygulaması varsayılan olarak başka bir uygulamanın şifreli yerel deposunu okuyamaz. stronglyBoundayarı
fazladan bağlama (uygulama bitlerindeki verilere) sağlar, bu da saldırgan bir uygulamanın, uygulamanızın yayıncı
kimliğini çalmaya çalışarak uygulamanızın şifreli yerel deposundan okuma girişiminde bulunmasını engeller.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 207
Şifreli verileri saklama
Bir uygulamayı farklı bir imzalayıcı sertifikası kullanacak şekilde güncellerseniz (bir geçiş imzası kullanarak),
stronglyBound parametresi false olarak ayarlı olsa bile, güncellenen sürüm orijinal depodaki öğelerin hiçbirine
erişemeyecektir. Daha fazla bilgi için bkz. “Sertifikaları değiştirme” sayfa 310.
EncryptedLocalStore.removeItem() yöntemini kullanarak, aşağıdaki örnekte olduğu gibi şifreli yerel depodan bir
değer silebilirsiniz:
EncryptedLocalStore.removeItem("firstName");
EncryptedLocalStore.reset() yöntemini çağırarak, aşağıdaki örnekte olduğu gibi şifreli yerel depodan tüm
verileri temizleyebilirsiniz:
EncryptedLocalStore.reset();
AIR Hata Ayıklama Başlatıcısı'nda (ADL) bir uygulamanın hatalarını ayıklarken, uygulama, uygulamanın yüklü
sürümünde kullanılandan farklı bir şifreli yerel depo kullanır.
Saklanılan verilerin boyutu 10MB'ı geçerse şifreli yerel depo yavaş çalışabilir.
Bir AIR uygulamasını kaldırdığınızda, kaldırma uygulaması şifreli yerel depoda saklanan verileri silmez.
Şifreli yerel depo verileri kullanıcının uygulama verileri dizininin alt dizinine konur; alt dizin yolu arkasından
uygulama kimliği gelmek üzere Adobe/AIR/ELS/ şeklindedir.
208
Bölüm 20: HTML ortamı hakkında
Adobe®AIR™, aynı zamanda Safari web tarayıcısı tarafından da HTML ve JavaScript içeriğini ayrıştırmak, düzenlemek
ve oluşturmak için kullanılan WebKit'i (www.webkit.org) kullanır. AIR API'lerinin HTML içeriğinde kullanımı isteğe
bağlıdır. Yalnızca HTML ve JavaScript ile, HTMLLoader nesnesinin veya HTML penceresinin içeriğinde
programlama yapabilirsiniz. Var olan birçok HTML sayfası ve uygulaması birkaç değişiklikle çalışmalarını
sürdürmelidir (WebKit ile uyumlu HTML, CSS, DOM ve JavaScript özellikleri kullandıklarını varsayarak).
AIR uygulamaları dosya sistemine tam erişimle doğrudan masaüstünde çalıştığı için, HTML içeriğinin güvenlik
modeli, tipik bir web tarayıcısının güvenlik modelinden daha katıdır. AIR'de, yalnızca uygulama yükleme dizininden
yüklenen veriler uygulama sanal alanına yerleştirilir. Uygulama sanal alanı en yüksek düzeyde ayrıcalığa sahiptir ve
AIR API'lerine erişim sağlar. AIR, nereden geldiğini temel alarak diğer içeriği ayrı sanal alanlara yerleştirir. Dosya
sisteminden yüklenen dosyalar yerel bir sanal alana gider. Ağdan http: veya https: protokolleri kullanılarak yüklenen
dosyalar, uzak sunucunun etki alanını temel alarak bir sanal alana gider. Bu uygulama dışı sanal alanlardaki içeriğin
herhangi bir AIR API'sine erişmesi yasaktır ve tipik bir web tarayıcısında olduğu gibi çalışır.
AIR, aynı zamanda Safari web tarayıcısı tarafından da HTML ve JavaScript içeriğini ayrıştırmak, düzenlemek ve
oluşturmak için kullanılan WebKit'i (www.webkit.org) kullanır. AIR yerleşik ana bilgisayar sınıfları ve nesneleri,
masaüstü uygulamalarıyla genelde ilişkilendirilen özelliklere yönelik bir API sağlar. Bu özellikler dosyaları okuma,
dosyalara yazma ve pencereleri yönetmeyi içerir. Adobe AIR ayrıca aralarında ses soketleri ve ikili soketler de bulunan
Adobe® Flash® Player'ın API'lerini miras alır.
Alfa, ölçekleme veya saydamlık ayarları uygulanırsa, AIR'deki HTML içeriği SWF veya PDF içeriğini görüntülemez.
Daha fazla bilgi için bkz. HTML sayfasında SWF veya PDF içeriğini yüklerken dikkate alınacak noktalarve “Pencere
şeffaflığı” sayfa 60.
HTML ortamına genel bakış
Adobe AIR, HTML oluşturucu, belge nesnesi modeli ve JavaScript yorumlayıcısıyla beraber eksiksiz bir tarayıcı
benzeri JavaScript ortamı sağlar. JavaScript ortamı, AIR HTMLLoader sınıfı tarafından temsil edilir. HTML
pencerelerinde HTMLLoader nesnesi tüm HTML içeriğini kapsar ve bunun karşılığında NativeWindow nesnesinde
de bulunur. SWF içeriğinde Sprite sınıfını genişleten HTMLLoader sınıfı, diğer görüntüleme nesneleri gibi, bir
sahnenin görüntüleme listesine eklenebilir. Sınıfın ActionScript™ özellikleri, “HTML Kabı için Komut Dosyası
Oluşturma” sayfa 247 ve ayrıca Flex 3 ActionScript Dil Başvurusu bölümlerinde anlatılmaktadır.
JavaScript ortamı ve AIR ile ilişkisi hakkında
Aşağıdaki diyagram JavaScript ortamı ve AIR çalışma zamanı ortamı arasındaki ilişkiyi anlatmaktadır. Yalnızca tek bir
yerel pencere gösterilmesine rağmen, AIR uygulaması birden çok pencereyi içerebilir. (Ve tek bir pencere birden çok
HTMLLoader nesnesi içerebilir.)
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 209
HTML ortamı hakkında
AIR Run-time Environment
NativeWindow
HTMLLoader
window
JavaScript
Environment
window
window
body
head
htmlLoader
native4Window
runtime
h1
div
table
p
JavaScript ortamı kendi Document ve Window nesnelerine sahiptir. JavaScript kodu AIR çalışma zamanı ortamıyla etkileşime çalışma
zamanını, nativeWindow ve htmlLoader özelliklerini kullanarak geçebilir. ActionScript kodu JavaScript ortamıyla etkileşime, JavaScript
Window nesnesine bir başvuru olan HTMLLoader nesnesinin pencere özelliğini kullanarak geçebilir. Ayrıca hem ActionScript hem de
JavaScript nesneleri, AIR ve JavaScript nesnelerinin her ikisi tarafından da gönderilen olayları dinleyebilir.
runtime özelliği, AIR API sınıflarına erişim sağlar ve access sınıfı (statik de denir) üyelerinin yanı sıra, yeni AIR
nesneleri oluşturmanızı da sağlar. Bir AIR API'sine erişmek için, sınıfın adını paketle beraber runtime özelliğine
eklersiniz. Örneğin bir File nesnesi oluşturmak için, şu ifadeyi kullanırsınız:
var file = new window.runtime.filesystem.File();
Not: AIR SDK bir JavaScript dosyası sağlar, AIRAliases.js, bu dosya en yaygın kullanılan AIR sınıfları için daha
uygun başka adlar tanımlar. Bu dosyayı içe aktardıktan sonra, window.runtime.package.Class yerine daha kısa bir
biçim olan air.Class'ı kullanabilirsiniz. Örneğin File nesnesini new air.File() ile oluşturabilirsiniz.
NativeWindow nesnesi, masaüstü penceresini kontrol etmeye yönelik özellikler sağlar. Bir HTML sayfasından,
window.nativeWindow özelliğine sahip NativeWindow nesnesine erişebilirsiniz.
HTMLLoader nesnesi içeriğin nasıl yüklendiğine ve oluşturulduğuna dair özellikler, yöntemler ve olaylar sağlar. Bir
HTML sayfasından, window.htmlLoader özelliğine sahip üst HTMLLoader nesnesine erişebilirsiniz.
Önemli: Yalnızca bir uygulamanın parçası olan sayfalar üst düzey belge olarak yüklendiklerinde, htmlLoader,
nativeWindow veya runtime özelliklerine sahip olur. Bu özellikler belge bir kareye veya iframe'e yüklendiğinde
eklenmez. (Alt belge, aynı güvenlik sanal alanında olduğu sürece üst belgedeki bu özelliklere erişebilir. Örneğin bir kareye
yüklenmiş olan belge, üst öğesinin runtime özelliğine parent.runtime ile erişebilir.)
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 210
HTML ortamı hakkında
Güvenlik hakkında
AIR, kaynağın etki alanına dayalı olarak bir güvenlik sanal alanındaki tüm kodu çalıştırır. Uygulama yükleme
dizininden yüklenen içerikle sınırlı olan uygulama içeriği, uygulama sanal alanına yerleştirilir. Çalışma zamanı
ortamına ve AIR API'lerine erişim yalnızca bu sanal alanın içinden HTML ve JavaScript'in çalıştırılmasıyla
mümkündür. Aynı zamanda, load olayı sayfası için tüm işleyiciler geri döndükten sonra, en dinamik JavaScript
değerlendirmesi ve çalışması uygulama sanal alanında engellenir.
Bir uygulama sayfasını, sayfayı bir kareye veya iframe'e yükleyerek ve karenin AIR'e özgü sandboxRoot ve
documentRoot niteliklerini ayarlayarak uygulama olmayan sanal alana eşleyebilirsiniz. sandboxRoot değerini gerçek
bir uzak etki alanına ayarlayarak, bu alandaki içeriği çapraz komut dosyasına yazmak üzere sanal alana sahip içeriği
etkinleştirebilirsiniz. Sayfaları bu şekilde eşlemek, içerik birleştirme uygulamasında olduğu gibi uzak içeriği yüklerken
ve komut dosyasına yazarken yararlı olabilir.
Uygulama içeriğinin ve uygulama olmayan içeriğin birbirlerinin çapraz dosyasını oluşturmasını sağlamanın bir başka
yolu ve aynı zamanda AIR API'lerine uygulama olmayan içerik erişimi vermenin tek yolu, sanal alan köprüsü
oluşturmaktır. Üst-alt köprüsü bir alt karedeki, iframe'deki veya penceredeki içeriğin, uygulama sanal alanında
tanımlanan belirli yöntemlere ve özelliklere erişmesini sağlar. Tersine, alt-üst köprüsü, uygulama içeriğinin alt öğenin
sanal alanında tanımlanan belirli yöntemlere ve özelliklere erişmesini sağlar. Sanal alan köprüleri, window nesnesinin
parentSandboxBridge ve childSandboxBridge özellikleri ayarlanarak kurulur. Daha fazla bilgi için bkz. “HTML
güvenliği” sayfa 29 ve “HTML kare ve iframe öğeleri” sayfa 218.
Eklentiler ve gömülü nesneler hakkında
AIR, Adobe® Acrobat® eklentisini destekler. Kullanıcıların PDF içeriğini görüntülemek için Acrobat veya Adobe®
Reader® 8.1 (veya daha üst) sürümüne sahip olmaları gerekmektedir. HTMLLoader nesnesi, kullanıcı sisteminin
PDF'leri görüntüleyip görüntülemediğini kontrol etmeye yarayan bir özellik sağlar. SWF dosya içeriği HTML
ortamında da görüntülenebilir, ancak bu özellik AIR'de yerleşiktir ve harici bir eklenti kullanmaz.
Diğer Webkit eklentileri AIR'de desteklenmez.
Ayrıca bkz.
“HTML güvenliği” sayfa 29
“HTML Sanal Alanları” sayfa 211
“HTML kare ve iframe öğeleri” sayfa 218
“JavaScript Window nesnesi” sayfa 216
“XMLHttpRequest nesnesi” sayfa 212
“PDF içeriği ekleme” sayfa 261
AIR ve Webkit uzantıları
Adobe AIR, Safari web tarayıcısında da kullanılan açık kaynak Webkit motorunu kullanır. AIR, güvenlik nedenlerinin
yanı sıra, runtime sınıflarına ve nesnelerine erişim sağlamak için birçok uzantı eklemesi yapar. Ayrıca Webkit de
HTML, CSS ve JavaScript için W3C standartlarında bulunmayan özellikler ekler.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 211
HTML ortamı hakkında
Burada yalnızca AIR eklemeleri ve en önemli Webkit uzantıları ele alınmaktadır; standart olmayan HTML, CSS ve
JavaScript ile ilgili ek belgeler için bkz. www.webkit.org ve developer.apple.com. Standart bilgiler için bkz. W3C
website. Mozilla ayrıca HTML, CSS ve DOM konularında önemli bir genel başvuru sağlar. (Elbette Webkit ve Mozilla
motorları aynı değildir.)
Not: AIR şu standart ve genişletilmiş WebKit özelliklerini desteklemez: JavaScript Window nesnesi print() yöntemi;
Acrobat ve Adobe Reader 8.1+ dışındaki eklentiler; Ölçeklenebilir Vektör Grafikleri (SVG), CSS opacity özelliği.
AIR'de JavaScript
AIR, ortak JavaScript nesnelerinin tipik davranışında birçok değişiklik yapar. Bu değişikliklerin birçoğu AIR'de
güvenli uygulamaların yazılmasını kolaylaştırmak için yapılır. Aynı zamanda, davranıştaki bu farklılıklar, bazı ortak
JavaScript kodlama desenlerinin ve bu desenleri kullanan mevcut web uygulamalarının her zaman AIR'de beklendiği
gibi çalıştırılamayabileceği anlamına gelir. Bu tür sorunların düzeltilmesiyle ilgili bilgi için bkz. “Güvenlik ilişkili
JavaScript hatalarını önleme” sayfa 225.
HTML Sanal Alanları
AIR içeriği kaynağına bağlı olarak, ayrı sanal alanlara yerleştirir. Sanal alan kuralları, Adobe Flash Player tarafından
uygulanan sanal alan kurallarının yanı sıra, çoğu web tarayıcısı tarafından uygulanan aynı kaynak ilkesiyle tutarlıdır.
Ayrıca AIR, uygulama içeriğini dahil etmek ve korumak için yeni bir uygulama sanal alan türü sağlar. AIR
uygulamaları geliştirirken karşılaşabileceğiniz sanal alan türleriyle ilgili daha fazla bilgi için bkz. “Sanal alanlar”
sayfa 27.
Çalışma zamanı ortamına ve AIR API'lerine erişim yalnızca uygulama sanal alanının içinden HTML ve JavaScript'in
çalıştırılmasıyla mümkündür. Ancak aynı zamanda çeşitli biçimlerdeki dinamik JavaScript değerlendirmesi ve
çalışması, güvenlik nedenleriyle büyük ölçüde uygulama sanal alanıyla sınırlıdır. Bu kısıtlamalar, uygulamanız
doğrudan bir sunucudan bilgi yüklese de yüklemese de geçerlidir. (Hatta dosya içeriği, yapıştırılan dizeler ve doğrudan
kullanıcı girişi güvenilmez olabilir.)
Bir sayfadaki içeriğin kaynağı, gönderildiği sanal alanı belirler. Yalnızca uygulama dizininden yüklenen içerik (app:
URL şeması tarafından başvurulan yükleme dizini) uygulama sanal alanına yerleştirilir. Dosya sisteminden yüklenen
içerik local-with-filesystem veya local-trusted sanal alana yerleştirilir, böylece yerel dosya sistemindeki içeriğe erişimine
ve bu içerikle etkileşimine izin verilir, ancak uzak içeriğe erişimine veya uzak içerikle etkileşimine izin verilmez. Ağdan
yüklenen içerik, kaynak etki alanına karşılık gelen uzak bir sanal alana yerleştirilir.
Bir uygulama sayfasının uzak sanal alandaki içerikle serbestçe etkileşmesini sağlamak için, sayfa, uzak içerikle aynı etki
alanına eşlenebilir. Örneğin bir Internet hizmetinden eşleme verileri görüntüleyen bir uygulama yazarsanız,
uygulamanızın hizmetten içerik yükleyen ve görüntüleyen sayfası hizmet etki alanına eşlenebilir. Sayfaları uzak sanal
alana ve etki alanına eşleme nitelikleri, kare ve iframe HTML öğelerine eklenen yeni niteliklerdir.
Uygulama dışı bir sanal alandaki içeriğin AIR özelliklerini güvenli bir şekilde kullanmasını sağlamak için, üst sanal
alan köprüsü kurabilirsiniz. Uygulama içeriğinin yöntemleri güvenli bir şekilde çağırmasını ve diğer sanal alanlardaki
içeriğin özelliklerine erişmesini sağlamak için, alt sanal alan köprüsü kurabilirsiniz. Güvenli burada uzak içeriğin açık
olmayan nesnelere, özelliklere veya yöntemlere yanlışlıkla başvuru alamaması anlamına gelir. Yalnızca basit veri
türleri, işlevler ve adsız nesneler köprüden geçirilebilir. Ancak yine de tehlikeli olabilecek işlevleri açmaktan
kaçınmalısınız. Örneğin, bir kullanıcının sisteminde bulunan dosyaları okumayı ve dosyalara yazmayı sağlayan bir
arabirimi açtıysanız, uzak içeriğe, kullanıcılarınıza önemli zararlar verebileceği bir yöntem sağlıyor olabilirsiniz.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 212
HTML ortamı hakkında
JavaScript eval() işlevi
Sayfa, yükleme işlemini bitirdiğinde, eval() işlevinin kullanımı uygulama sanal alanıyla sınırlanır. Bazı kullanımlara
izin verilir ve böylece JSON formatlı veriler güvenli bir şekilde ayrıştırılabilir, ancak çalıştırılabilir bir ifadeyle
sonuçlanan herhangi bir değerlendirme hatayla sonuçlanır. “Farklı sanal alanlardaki içerik için kod kısıtlamaları”
sayfa 31, eval() işlevinin izin verilen kullanımlarını açıklar.
İşlev yapıcıları
Uygulama sanal alanında, bir sayfa yükleme işlemini bitirmeden önce işlev yapıcıları kullanılabilir. Tüm sayfa load
olayı işleyicileri bittikten sonra, yeni işlevler oluşturulamaz.
Harici komut dosyalarını yükleme
Uygulama sanal alanındaki HTML sayfaları, JavaScript dosyalarını uygulama dizininin dışından yüklemek için
script etiketini kullanamaz. Uygulamanızdaki bir sayfaya uygulama dizininin dışından bir komut dosyası
yüklenmesi için,, sayfa uygulama dışı bir sanal alana eşlenmelidir.
XMLHttpRequest nesnesi
AIR, uygulamaların veri istekleri gerçekleştirebilmek için kullanabileceği bir XMLHttpRequest (XHR) nesnesi sağlar.
Aşağıdaki örnek basit bir veri isteğini gösterir:
xmlhttp = new XMLHttpRequest();
xmlhttp.open("GET", "http:/www.example.com/file.data", true);
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4) {
//do something with data...
}
}
xmlhttp.send(null);
Bir tarayıcıya karşılık AIR, uygulama sanal alanında çalışan içeriğin herhangi bir etki alanından veri isteğinde
bulunmasına olanak tanır. Bir JSON dizesi içeren XHR'nin sonucu, sonuç çalıştırılabilir kod içermediği sürece veri
nesneleri olarak değerlendirilebilir. XHR sonucunda çalıştırılabilir ifadeler mevcutsa, bir hata verilir ve değerlendirme
denemesi başarısız olur.
Uzak kaynaklardaki kodun yanlışlıkla dahil edilmesini engellemek için bu işlem sayfa, yükleme işlemini bitirmeden
önce yapılırsa senkronize XHR'ler boş bir sonuç döndürür. Senkronize olmayan XHR'ler her zaman bir sayfa
yüklendikten sonra geri döner.
Varsayılan olarak AIR, uygulama dışı sanal alanlardaki etki alanları arası XMLHttpRequest öğelerini engeller.
Uygulama sanal alanındaki bir üst pencere, uygulama dışı sanal alanda içeriğe sahip olan bir alt karedeki etki alanları
arası isteklere, AIR tarafından eklenen bir nitelik olan allowCrossDomainXHR öğesini içeriğe sahip olan kare veya
iframe öğesini true olarak ayarlayarak izin vermeyi seçebilir:
<iframe id="mashup"
src="http://www.example.com/map.html"
allowCrossDomainXHR="true"
</iframe>
Not: Uygun olduğunda, AIR URLStream sınıfı da veri yüklemek için kullanılabilir.
Bir XMLHttpRequest öğesini uzak sanal alana eşlenmiş uygulama içeriğine sahip olan kareden veya iframe'den uzak
bir sunucuya gönderirseniz, eşleme URL'sinin XHR'de kullanılan sunucu adresini maskelemediğinden emin olun.
Örneğin example.com etki alanı için uygulama içeriğini uzak bir sanal alana eşleyen aşağıdaki iframe tanımını göz
önünde bulundurun:
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 213
HTML ortamı hakkında
<iframe id="mashup"
src="http://www.example.com/map.html"
documentRoot="app:/sandbox/"
sandboxRoot="http://www.example.com/"
allowCrossDomainXHR="true"
</iframe>
sandboxRoot niteliği www.example.com adresinin kök URL'sini yeniden eşlediği için, tüm istekler uzak sunucudan
değil, uygulama dizininden yüklenir. Sayfa gezinmesinden veya XMLHttpRequest öğesinden türetilen istekler yeniden
eşlenir.
Uzak sunucunuza yapılan veri isteklerini yanlışlıkla engellemeyi önlemek için, sandboxRoot öğesini köke değil, uzak
URL'nin alt dizinine eşleyin. Dizinin mevcut olması gerekmez. Örneğin, uygulama dizini yerine uzak sunucudan
yükleme yapabilmek için www.example.com adresine yapılan veri isteklerine izin vermek üzere, önceki iframe'i şu
şekilde değiştirin:
<iframe id="mashup"
src="http://www.example.com/map.html"
documentRoot="app:/sandbox/"
sandboxRoot="http://www.example.com/air/"
allowCrossDomainXHR="true"
</iframe>
Bu durumda yalnızca air alt dizinindeki içerik yerel olarak yüklenir.
Sanal alan eşlemesiyle ilgili daha fazla bilgi için bkz. “HTML kare ve iframe öğeleri” sayfa 218 ve “HTML güvenliği”
sayfa 29.
Canvas nesnesi
Canvas nesnesi çizgi, yay, elips, çokgen gibi geometrik şekilleri çizmeye yarayan bir API tanımlar. Tuval API'sini
kullanmak için öncelikle belgeye bir tuval öğesi ekler ve JavaScript Canvas API'sini kullanarak tuvalde çizim
yaparsınız. Diğer birçok yönüyle Canvas nesnesi bir görüntü gibi davranır.
Aşağıdaki örnek Canvas nesnesi kullanarak bir üçgen çizer:
<html>
<body>
<canvas id="triangleCanvas" style="width:40px; height:40px;"></canvas>
<script>
var canvas = document.getElementById("triangleCanvas");
var context = canvas.getContext("2d");
context.lineWidth = 3;
context.strokeStyle = "#457232";
context.beginPath();
context.moveTo(5,5);
context.lineTo(35,5);
context.lineTo(20,35);
context.lineTo(5,5);
context.lineTo(6,5);
context.stroke();
</script>
</body>
</html>
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 214
HTML ortamı hakkında
Tuval API'siyle ilgili daha fazla belge için bkz. Apple Safari JavaScript Reference (Safari JavaScript Başvurusu). Webkit
projesinin yakın bir zamanda, Web Hypertext Application Technology Working Group (WHATWG) (Web Köprü
Metni Uygulama Teknolojisi Çalışma Grubu) ve W3C tarafından önerilen HTML 5 Working Draft (HTML 5 Çalışma
Taslağı) üzerinde standartlaştırma amacıyla Canvas API'sini değiştirmeye başladığını göz önünde bulundurun. Bunun
bir sonucu olarak Safari JavaScript Başvurusu'ndaki bazı belgeler, AIR'de bulunan tuvalin sürümüyle tutarsız olabilir.
Tanımlama Bilgileri
AIR uygulamalarında yalnızca uzak sanal alanlardaki içerik (http: ve https: kaynaklarından yüklenen), tanımlama
bilgilerini kullanabilir (document.cookie özelliği). Uygulama sanal alanında AIR API'leri, kalıcı verilerin
(EncryptedLocalStore ve FileStream sınıfları gibi) depolanması için başka yöntemler sağlar.
Clipboard nesnesi
WebKit Clipboard API'si şu olaylarla yürütülür: copy, cut ve paste. Bu olaylarda geçen olay nesnesi clipboardData
özelliğiyle panoya erişim sağlar. Pano verilerini okumak veya bu verileri yazmak için aşağıdaki clipboardData
nesnesi yöntemlerini kullanın:
Yöntem
Açıklama
clearData(mimeType)
Pano verilerini temizler. mimeType parametresini temizlenecek verilerin MIME türüne ayarlayın.
getData(mimeType)
Pano verilerini alır. Bu yöntem yalnızca paste olayının işleyicisinde çağrılabilir. mimeType parametresini geri
döndürülecek verilerin MIME türüne ayarlayın.
setData(mimeType, data)
Verileri panoya kopyalar. mimeType parametresini verilerin MIME türüne ayarlayın.
Uygulama sanal alanının dışındaki JavaScript kodu panoya yalnızca bu olayları kullanarak erişebilir. Ancak uygulama
sanal alanındaki içerik, AIR Clipboard sınıfını kullanarak sistem panosuna doğrudan erişebilir. Örneğin panodaki
metin formatı verilerini almak için aşağıdaki ifadeyi kullanabilirsiniz:
var clipping = air.Clipboard.generalClipboard.getData("text/plain",
air.ClipboardTransferMode.ORIGINAL_ONLY);
Geçerli veri MIME türleri şunlardır:
MIME türü
Değer
Metin
"text/plain"
HTML
"text/html"
URL
"text/uri-list"
Bitmap
"image/x-vnd.adobe.air.bitmap"
Dosya listesi
"application/x-vnd.adobe.air.file-list"
Önemli: Yalnızca uygulama sanal alanındaki içerik panoda bulunan dosya verilerine erişebilir. Uygulama dışı içerik
panodaki bir file nesnesine erişme girişiminde bulunursa, bir güvenlik hatası verilir.
Panoyu kullanmayla ilgili daha fazla bilgi için bkz. “Kopyalama ve yapıştırma” sayfa 143 ve Using the Pasteboard from
JavaScript (Apple Geliştirici Merkezi) (JavaScript'te Yapıştırma Alanı'nı Kullanma).
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 215
HTML ortamı hakkında
Sürükle ve Bırak
HTML'e doğru veya HTML'den sürükle ve bırak hareketleri şu DOM olaylarını üretir: dragstart, drag, dragend,
dragenter, dragover, dragleave ve drop. Bu olaylarda geçen olay nesnesi, dataTransfer özelliğiyle sürüklenen
verilere erişim sağlar. dataTransfer özelliği, bir clipboard olayıyla ilişkilendirilen clipboardData nesnesiyle aynı
yöntemleri sağlayan bir nesneye başvurur. Örneğin bir drop olayından metin formatı verileri almak için şu işlevi
kullanabilirsiniz:
function onDrop(dragEvent){
return dragEvent.dataTransfer.getData("text/plain",
air.ClipboardTransferMode.ORIGINAL_ONLY);
}
dataTransfer nesnesinin sahip olduğu önemli üyeler şunlardır:
Üye
Açıklama
clearData(mimeType)
Verileri temizler. mimeType parametresini temizlenecek veri temsilinin MIME türüne ayarlayın.
getData(mimeType)
Sürüklenen verileri alır. Bu yöntem yalnızca drop olayının işleyicisinde çağrılabilir. mimeType parametresini
alınacak verilerin MIME türüne ayarlayın.
setData(mimeType, data)
Sürüklenecek verileri ayarlayın. mimeType parametresini verilerin MIME türüne ayarlayın.
türler
Şu anda dataTransfer nesnesinde kullanılabilir olan tüm veri temsillerinin MIME türlerini içeren dizeler
dizisi.
effectsAllowed
Sürüklenen verilerin kopyalanabileceğini, taşınabileceğini, verilere link verilebileceğini veya bunların bir
kombinasyonunun uygulanabileceğini belirtir. effectsAllowed özelliğini, dragstart olayının
işleyicisinde ayarlayın.
dropEffect
İzin verilerin bırakma efektlerinden hangilerinin sürükleme hedefi tarafından desteklendiğini belirtir.
dropEffect özelliğini dragEnter olayının işleyicisinde ayarlayın. Sürükleme sırasında imleç, kullanıcının
fareyi bırakması durumunda hangi efektin oluşacağını göstermek için değişir. dropEffect belirtilmezse,
effectsAllowed özellik efekti seçilir. Kopyala efektinin taşı efektine göre önceliği, taşı efektinin de link ver
efektine göre önceliği vardır. Kullanıcı klavyeyi kullanarak varsayılan önceliği değiştirebilir.
AIR uygulamasına sürükle ve bırak eylemine yönelik destek eklemeyle ilgili daha fazla bilgi için bkz. “Sürükle ve bırak”
sayfa 128 ve Using the Drag-and-Drop from JavaScript (Apple Geliştirici Merkezi) (JavaScript'te Sürükleme ve
Bırakmayı Kullanma).
innerHTML ve outerHTML özellikleri
AIR, uygulama sanal alanında çalışan içerik için innerHTML ve outerHTML özelliklerinin kullanılmasına yönelik
güvenlik kısıtlamaları getirir. load olayı işleyicilerinin çalıştırılması sırasında ve sayfa load olayından önce, innerHTML
ve outerHTML özelliklerinin kullanımında hiçbir kısıtlama yoktur. Ancak sayfa yüklendikten sonra, innerHTML veya
outerHTML özelliklerini yalnızca belgeye statik içerik eklemek için kullanabilirsiniz. Çalıştırılabilir kod olarak
değerlendirilen innerHTML veya outerHTML özelliklerine atanan bir dizede bulunan herhangi bir ifade yoksayılır.
Örneğin bir olay geri çağırma niteliğini öğe tanımına dahil ederseniz, olay dinleyicisi eklenmez. Benzer şekilde,
gömülü <script> etiketleri de değerlendirilmez. Daha fazla bilgi için bkz. “HTML güvenliği” sayfa 29.
Document.write() ve Document.writeln() yöntemleri
Sayfanın load olayından önce uygulama sanal alanında write() ve writeln() yöntemlerinin kullanımı kısıtlı
değildir. Ancak sayfa yüklendikten sonra, bu yöntemlerden birini çağırmak sayfayı temizlemez veya yeni bir sayfa
oluşturmaz. Birçok web tarayıcısında olduğu gibi, bir sayfa yüklenmesini bitirdikten sonra uygulama dışı sanal alanda
document.write() veya writeln() yöntemini çağırmak geçerli sayfayı temizler ve yeni, boş bir sayfa açar.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 216
HTML ortamı hakkında
Document.designMode özelliği
Belgedeki tüm öğelerin düzenlenebilir olması için document.designMode özelliğini on olan bir değere ayarlayın.
Yerleşik düzenleyici desteği metin düzenleme, kopyalama, yapıştırma ve sürükleyip bırakmayı içerir. designMode
özelliğinin on olarak ayarlanması, body öğesinin contentEditable özelliğinin true olarak ayarlanmasına eşdeğerdir.
Bir belgenin hangi bölümlerinin düzenlenebilir olacağını tanımlamak için çoğu HTML öğesinde contentEditable
özelliğini kullanabilirsiniz. Ek bilgi için bkz. “HTML contentEditable niteliği” sayfa 221.
unload olayları (body ve frameset nesneleri için)
Bir pencerenin üst düzey frameset veya body etiketinde (uygulamanın ana penceresi de dahil olmak üzere), kapanan
pencereye (veya uygulamaya) yanıt vermek için unload olayını kullanmayın. Bunun yerine NativeApplication
nesnesinin exiting olayını kullanın (uygulamanın ne zaman kapandığını saptamak için). Veya NativeWindow
nesnesinin closing olayını kullanın (pencerenin ne zaman kapandığını saptamak için). Örneğin aşağıdaki JavaScript
kodu, kullanıcı uygulamayı kapattığında ("Goodbye.") mesajını görüntüler:
var app = air.NativeApplication.nativeApplication;
app.addEventListener(air.Event.EXITING, closeHandler);
function closeHandler(event)
{
alert("Goodbye.");
}
Ancak komut dosyaları, bir karenin, iframe'in veya üst düzey pencere içeriğinin gezinmesi sonucu oluşan unload
olayına başarılı bir şekilde yanıt verebilir.
Not: Adobe AIR'in gelecek sürümlerinde bu sınırlamalar kaldırılabilir.
JavaScript Window nesnesi
Window nesnesi, JavaScript çalışma bağlamında global nesne olarak kalır. AIR, uygulama sanal alanında, önemli ana
bilgisayar nesnelerinin yanı sıra yerleşik AIR sınıflarına erişim sağlamak için JavaScript Window nesnesine yeni
özellikler ekler. Ayrıca, bazı yöntemler ve özellikler, uygulama sanal alanının içinde bulunup bulunmamalarına bağlı
olarak farklı davranışlar gösterir.
Window.runtime özelliği runtime özelliği, yerleşik runtime sınıflarını uygulama sanal alanının içinden başlatmanızı
ve kullanmanızı sağlar. Bu sınıflar AIR ve Flash Player API'lerini içerir. (Ancak örneğin Flex çerçevesini içermez.)
Örneğin aşağıdaki ifade bir AIR file nesnesi oluşturur:
var preferencesFile = new window.runtime.flash.filesystem.File();
AIR SDK'de sağlanan AIRAliases.js dosyası, bu gibi başvuruları kısaltmanızı sağlayan başka ad tanımları içerir.
Örneğin AIRAliases.js bir sayfaya içe aktarıldığında, aşağıdaki ifade kullanılarak bir File nesnesi oluşturulabilir:
var preferencesFile = new air.File();
window.runtime özelliği, yalnızca uygulama sanal alanındaki içerik ve kareler veya iframe'ler içeren bir sayfanın üst
belgesi için tanımlanır.
Bkz. “AIRAliases.js dosyasını kullanma” sayfa 229.
Window.nativeWindow özelliği nativeWindow özelliği, alttaki yerel window nesnesine bir başvuru sağlar. Bu özellik
sayesinde ekran konumu, boyutu ve görünürlüğü gibi window işlevlerini ve özelliklerini komut dosyasına yazabilir ve
kapatma, yeniden boyutlandırma ve taşıma gibi window olaylarını işleyebilirsiniz. Örneğin aşağıdaki ifade pencereyi
kapatır:
window.nativeWindow.close();
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 217
HTML ortamı hakkında
Not: NativeWindow nesnesi tarafından sağlanan pencere kontrol özellikleri, JavaScript Window nesnesi tarafından
sağlanan özelliklerle örtüşür. Bu gibi durumlarda en uygun bulduğunuz yöntemi kullanabilirsiniz.
window.nativeWindow özelliği, yalnızca uygulama sanal alanındaki içerik ve kareler veya iframe'ler içeren bir
sayfanın üst belgesi için tanımlanır.
Window.htmlLoader özelliği htmlLoader özelliği, HTML içeriğine sahip olan AIR HTMLLoader nesnesine bir
başvuru sağlar. Bu özellik sayesinde, HTML ortamının görünümünü ve davranışını komut dosyasına yazabilirsiniz.
Örneğin kontrolün varsayılan, beyaz bir arka plan boyayıp boyamadığını belirlemek için
htmlLoader.paintsDefaultBackground özelliğini kullanabilirsiniz:
window.htmlLoader.paintsDefaultBackground = false;
Not: HTMLLoader nesnesi window özelliğine sahiptir, bu özellik, sahip olduğu HTML içeriğinin JavaScript Window
nesnesine başvurur. Bu özelliği, içeriğe sahip olan HTMLLoader nesnesine bir başvuru yoluyla JavaScript ortamına
erişmek için kullanabilirsiniz.
window.htmlLoader özelliği, yalnızca uygulama sanal alanındaki içerik ve kareler veya iframe'ler içeren bir sayfanın
üst belgesi için tanımlanır.
Window.parentSandboxBridge ve Window.childSandboxBridge özellikleri parentSandboxBridge ve
childSandboxBridge özellikleri sayesinde, üst ve alt kareler arasında bir arabirim tanımlayabilirsiniz. Daha fazla bilgi
için bkz. “Farklı güvenlik sanal alanlarında çapraz komut dosyası içeriği” sayfa 237.
Window.setTimeout() ve Window.setInterval() işlevleri AIR, setTimeout() ve setInterval() işlevlerinin uygulama
sanal alanında kullanılmasına yönelik güvenlik kısıtlamaları getirir. setTimeout() veya setInterval() işlevlerini
çağırırken bir dize olarak çalıştırılacak kodu tanımlayamazsınız. Bir işlev başvurusu kullanmanız gerekir. Daha fazla
bilgi için bkz. “setTimeout() ve setInterval()” sayfa 227.
Window.open() işlevi open() yöntemi uygulama dışı bir sanal alanda çalışan bir kod tarafından çağrıldığında,
yalnızca kullanıcı etkileşiminin (fare tıklatma veya tuşbasma gibi) bir sonucu olarak çağrılırsa bir pencere açar. Ayrıca,
uygulama başlığı pencere başlığına önek olarak getirilir (pencerelerin uzak içerik tarafından açılmasını engellemek için
). Daha fazla bilgi için bkz.“JavaScript window.open() yönteminin çağrılmasına ilişkin kısıtlamalar” sayfa 34.
air.NativeApplication nesnesi
NativeApplication nesnesi uygulama durumu hakkında bilgi sağlar, uygulama düzeyi birçok önemli olayı gönderir ve
uygulama davranışının kontrol edilmesine yönelik faydalı işlevler sağlar. NativeApplication nesnesinin tek bir örneği
otomatik olarak oluşturulur ve bu özelliğe sınıf tanımlı NativeApplication.nativeApplication özelliği
yardımıyla erişilebilir.
Nesneye JavaScript kodundan erişmek için şunu kullanabilirsiniz:
var app = window.runtime.flash.desktop.NativeApplication.nativeApplication;
Veya AIRAliases.js komut dosyası içe aktarılmışsa, daha kısa biçimini kullanabilirsiniz:
var app = air.NativeApplication.nativeApplication;
NativeApplication nesnesine yalnızca uygulama sanal alanından erişilebilir. İşletim sistemiyle etkileşim “Çalışma
zamanı ve işletim sistemi bilgileriyle çalışma” sayfa 286, NativeApplication nesnesini ayrıntılı olarak anlatmaktadır.
JavaScript URL şeması
Bir JavaScript URL şemasında tanımlanan kodu çalıştırma, (href="javascript:alert('Test')" gibi) uygulama
sanal alanının içinde engellenmiştir. Hata verilmez.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 218
HTML ortamı hakkında
HTML Uzantıları
AIR ve WebKit, aşağıdakiler de dahil olmak üzere, standart olmayan birkaç HTML öğesi ve niteliği tanımlar:
“HTML kare ve iframe öğeleri” sayfa 218
“HTML Tuval öğesi” sayfa 220
“HTML öğesi olay işleyicileri” sayfa 220
HTML kare ve iframe öğeleri
AIR, uygulama sanal alanındaki içeriğin kare ve iframe öğelerine yeni nitelikler ekler:
sandboxRoot niteliği sandboxRoot niteliği, kare src niteliği tarafından belirtilen dosya için alternatif, uygulama dışı
bir kaynak etki alanı belirtir. Dosya, belirtilen etki alanına karşılık gelen uygulama dışı sanal alana yüklenir. Dosyadaki
içerik ve belirtilen etki alanından yüklenen içerik, birbirlerinin çapraz dosyasını oluşturabilir.
Önemli: sandboxRoot değerini etki alanının temel URL'sine ayarlarsanız, bu etki alanından gelen tüm içeriğe yönelik
istekler uzak sunucu yerine uygulama dizininden yüklenir (isteğin sayfa gezinmesinden mi, XMLHttpRequest öğesinden
mi, yoksa başka içerik yükleme yollarından mı kaynaklandığına bakılmaksızın).
documentRoot niteliği documentRoot niteliği, sandboxRoot tarafından belirtilen konumdaki dosyalara çözülen
URL'lerin yükleneceği yerel dizini belirtir.
URL'leri çözerken, kare src niteliğinde veya kareye yüklenen içerikte, URL'nin sandboxRoot öğesinde belirtilen
değerle eşleşen bölümü documentRoot öğesinde belirtilen değerle değiştirilir. Bu nedenle aşağıdaki kare etiketinde:
<iframe src="http://www.example.com/air/child.html"
documentRoot="app:/sandbox/"
sandboxRoot="http://www.example.com/air/"/>
child.html, uygulama yükleme klasörünün sandbox altdizininden yüklenir. child.html içerisindeki göreceli
URL'ler, sandbox dizini temel alınarak çözülür. AIR, dosyaları app:/sandbox/ dizininden yükleme girişiminde
bulunacağı için, www.example.com/air adresinde bulunan uzak sunucudaki tüm dosyalara kareden erişilemediğini
unutmayın.
allowCrossDomainXHR niteliği Karedeki içeriğin herhangi bir uzak etki alanına XMLHttpRequest'leri yapmasını
sağlamak için, allowCrossDomainXHR="allowCrossDomainXHR" öğesini açılış kare etiketine dahil edin. Varsayılan
olarak uygulama dışı içerik, yalnızca kendi kaynak etki alanından bu tür isteklerde bulunabilir. Bunlar etki alanları
arası XHR'lere izin vermekten doğan ciddi güvenlik sonuçlarıdır. Sayfadaki kod, herhangi bir etki alanıyla veri
alışverişi yapabilir. Kötü amaçlı içerik bir şekilde sayfaya dahil olursa, geçerli sanal alanda kodun erişimi olan tüm
veriler tehlikeye girebilir. Etki alanları arası XHR'leri yalnızca oluşturduğunuz ve kontrol ettiğiniz sayfalarda ve
yalnızca etki alanları arası veri yükleme gerçekten gerekli olduğunda etkinleştirin. Ayrıca, kod dahil etmeyi veya başka
yollarla yapılan saldırıları önlemek için, sayfa tarafından yüklenen tüm harici verileri dikkatli bir şekilde doğrulayın.
Önemli: allowCrossDomainXHR niteliği bir kare veya iframe öğesine dahil edilmişse, etki alanları arası XHR'ler
etkindir (atanan değer "0" olmadığı veya "f" ya da "n" harfleriyle başlamadığı sürece). Örneğin, allowCrossDomainXHR
değerini "deny" olarak ayarlamak da etki alanları arası XHR'leri etkinleştirir. Etki alanları arası istekleri etkinleştirmek
istemiyorsanız, niteliği tamamen öğe bildiriminin dışında bırakın.
ondominitialize niteliği Bir karenin dominitialize olayının olay işleyicisini belirtir. Bu olay, karenin pencere ve
belge nesneleri oluşturulduğunda ancak herhangi bir komut dosyası ayrıştırılmadan veya belge öğeleri
oluşturulmadan önce çalışan, AIR'e özgü bir olaydır.
Kare, dominitialize olayını yükleme dizisinde, alt sayfadaki komut dosyaları alt belgeye dominitialize işleyicisi
tarafından eklenen nesnelere, değişkenlere ve işlevlere başvurmadan önce, yeterince erken bir zamanda gönderir. Bir
alt belgeye doğrudan nesne eklemek veya alt belgedeki nesnelere doğrudan erişmek için üst sayfayla alt sayfa aynı sanal
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 219
HTML ortamı hakkında
alanda bulunmalıdır. Ancak uygulama sanal alanındaki bir üst öğe, uygulama dışı sanal alandaki içerikle iletişim
kurmak için sanal alan köprüsü kurabilir.
Aşağıdaki örnekler iframe etiketinin AIR'deki kullanımını gösterir:
child.html öğesini, uzak sunucudaki gerçek bir etki alanına eşlemeden uzak sanal alana yerleştirin:
<iframe src="http://localhost/air/child.html"
documentRoot="app:/sandbox/"
sandboxRoot="http://localhost/air/"/>
child.html öğesini, XMLHttpRequest'lerinin yalnızca www.example.com adresine yapılmasına izin vererek uzak
sanal alana yerleştirin:
<iframe src="http://www.example.com/air/child.html"
documentRoot="app:/sandbox/"
sandboxRoot="http://www.example.com/air/"/>
child.html öğesini, XMLHttpRequest'lerinin herhangi bir uzak etki alanına yapılmasına izin vererek uzak sanal
alana yerleştirin:
<iframe src="http://www.example.com/air/child.html"
documentRoot="app:/sandbox/"
sandboxRoot="http://www.example.com/air/"
allowCrossDomainXHR="allowCrossDomainXHR"/>
child.html öğesini dosya sistemiyle yerel sanal alana yerleştirin:
<iframe
src="file:///templates/child.html"
documentRoot="app:/sandbox/"
sandboxRoot="app-storage:/templates/"/>
child.html öğesini, sanal alan köprüsü kurmak için dominitialize olayını kullanarak uzak sanal alana yerleştirin:
<html>
<head>
<script>
var bridgeInterface = {};
bridgeInterface.testProperty = "Bridge engaged";
function engageBridge(){
document.getElementById("sandbox").parentSandboxBridge = bridgeInterface;
}
</script>
</head>
<body>
<iframe id="sandbox"
src="http://www.example.com/air/child.html"
documentRoot="app:/"
sandboxRoot="http://www.example.com/air/"
ondominitialize="engageBridge()"/>
</body>
</html>
Aşağıdaki child.html belgesi, alt içeriğin üst sanal alan köprüsüne nasıl erişebildiğini gösterir:
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 220
HTML ortamı hakkında
<html>
<head>
<script>
document.write(window.parentSandboxBridge.testProperty);
</script>
</head>
<body></body>
</html>
Daha fazla bilgi için bkz. “Farklı güvenlik sanal alanlarında çapraz komut dosyası içeriği” sayfa 237 ve “HTML
güvenliği” sayfa 29.
HTML Tuval öğesi
Webkit Canvas API'siyle kullanmak için bir çizim alanı tanımlar. Grafik komutları etiketin kendisinde belirtilemez.
Tuvalde çizim yapmak için, JavaScript yardımıyla tuvale çizme yöntemlerini çağırın.
<canvas id="drawingAtrium" style="width:300px; height:300px;"></canvas>
Daha fazla bilgi için bkz. “Canvas nesnesi” sayfa 213.
HTML öğesi olay işleyicileri
AIR ve Webkit'teki DOM nesneleri, standart DOM olayı modelinde bulunmayan bazı olayları gönderir. Aşağıdaki
tablo, bu olaylara işleyici belirtmek için kullanabileceğiniz ilgili olay niteliklerini listeler.
Callback nitelik adı
Açıklama
oncontextmenu
Seçili metinde sağ tıklatılarak veya komut tuşuna basıp tıklatılarak
bir bağlam menüsü çağrıldığında çağrılır.
oncopy
Bir öğedeki seçim kopyalandığında çağrılır.
oncut
Bir öğedeki seçim kesildiğinde çağrılır.
ondominitialize
Bir kareye veya iframe'e yüklenen belgenin DOM'si
oluşturulduğunda, ancak bir DOM öğesi oluşturulmadan veya
komut dosyaları ayrıştırılmadan çağrılır.
ondrag
Bir öğe sürüklendiğinde çağrılır.
ondragend
Sürükleme işlemi bırakıldığında çağrılır.
ondragenter
Sürükleme hareketi bir öğenin sınırlarına girdiğinde çağrılır.
ondragleave
Sürükleme hareketi bir öğenin sınırlarından çıktığında çağrılır.
ondragover
Sürükleme hareketi bir öğenin sınırları içerisindeyken sürekli çağrılır.
ondragstart
Sürükleme hareketi başladığında çağrılır.
ondrop
Bir öğenin üzerindeyken sürükleme hareketi bırakıldığında çağrılır.
onerror
Bir öğe yüklenirken hata oluştuğunda çağrılır.
oninput
Bir öğe biçimine metin girildiğinde çağrılır.
onpaste
Öğe, bir öğeye yapıştırıldığında çağrılır.
onscroll
Kaydırılabilir öğenin içeriği kaydırıldığında çağrılır.
onsearch
Bir öğe kopyalandığında çağrılır (? Apple belgeleri doğru mu?)
onselectstart
Bir seçim başladığında çağrılır.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 221
HTML ortamı hakkında
HTML contentEditable niteliği
Kullanıcıların öğenin içeriğini düzenlemelerine olanak sağlamak için, contentEditable niteliğini herhangi bir
HTML öğesine ekleyebilirsiniz. Örneğin aşağıdaki örnek HTML kodu, ilk p öğe dışında belgenin tamamını
düzenlenebilir olarak ayarlar:
<html>
<head/>
<body contentEditable="true">
<h1>de Finibus Bonorum et Malorum</h1>
<p contentEditable="false">Sed ut perspiciatis unde omnis iste natus error.</p>
<p>At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis.</p>
</body>
</html>
Not: document.designMode özelliğini on olarak ayarlarsanız, tek bir öğe için contentEditable ayarına
bakılmaksızın belgedeki tüm öğeler düzenlenebilir hale gelir. Ancak designMode özelliğini off olarak ayarlamak,
contentEditable değerinin true olduğu öğelerin düzenlenme özelliğini devre dışı bırakmaz. Ek bilgi için bkz.
“Document.designMode özelliği” sayfa 216.
CSS Uzantıları
WebKit birçok genişletilmiş CSS özelliğini destekler. Aşağıdaki tablo, destek sağlanan genişletilmiş özellikleri listeler.
Ek, standart olmayan özellikler WebKit'te mevcuttur, ancak AIR'de tamamen desteklenmez; bunun nedeni hala
WebKit'te geliştirilmekte olmaları veya gelecekte kaldırılabilecek deneysel özellikler olmalarıdır.
CSS özellik adı
Değerler
Açıklama
-webkit-border-horizontal-spacing
Negatif olmayan uzunluk birimi
Kenarlık boşluğunun yatay bileşenini
belirtir.
-webkit-border-vertical-spacing
Negatif olmayan uzunluk birimi
Kenarlık boşluğunun dikey bileşenini
belirtir.
-webkit-line-break
after-white-space, normal
Çince, Japonca ve Korece (CJK) metinler
için kullanılacak satır kesmesi kuralını
belirtir.
-webkit-margin-bottom-collapse
collapse, discard, separate
Bir tablo hücresinin alt kenar boşluğunun
nasıl daraltıldığını tanımlar.
-webkit-margin-collapse
collapse, discard, separate
Bir tablo hücresinin üst ve alt kenar
boşluğunun nasıl daraltıldığını tanımlar.
-webkit-margin-start
Bir uzunluk birimi.
Başlangıç kenar boşluğunun genişliği. Bu
özellik soldan sağa metinlerde sol kenar
boşluğunu geçersiz kılar. Bu özellik sağdan
sola metinlerde sağ kenar boşluğunu
geçersiz kılar.
-webkit-margin-top-collapse
collapse, discard, separate
Bir tablo hücresinin üst kenar boşluğunun
nasıl daraltıldığını tanımlar.
-webkit-nbsp-mode
normal, space
İçerikte bulunan kesmeyen boşlukların
davranışını tanımlar.
-webkit-padding-start
Bir uzunluk birimi
Başlangıç dolgusunun genişliğini belirtir.
Bu özellik soldan sağa metinlerde sol
dolgu değerini geçersiz kılar. Bu özellik
sağdan sola metinlerde sağ dolgu değerini
geçersiz kılar.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 222
HTML ortamı hakkında
CSS özellik adı
Değerler
Açıklama
-webkit-rtl-ordering
logical, visual
Soldan sağa ve sağdan sola karışık metnin
varsayılan işlemesini geçersiz kılar.
-webkit-text-fill-color
Adlı bir renk veya sayısal renk değeri.
Metin dolgu rengini belirtir.
-webkit-text-security
circle, disc, none, square
Şifre girişi alanında kullanılacak değiştirme
şeklini belirtir.
-webkit-user-drag
•
auto — Varsayılan davranış
Otomatik sürükleme davranışını geçersiz
kılar.
•
element — Öğenin tamamı sürüklenir
•
none — Öğe sürüklenemez
-webkit-user-modify
read-only, read-write, read-writeplaintext-only
Bir öğenin içeriğinin düzenlenip
düzenlenemeyeceğini belirtir.
-webkit-user-select
•
auto — Varsayılan davranış
Bir kullanıcının öğenin içeriğini seçip
seçemeyeceğini belirtir.
•
none — Öğe seçilemez
•
text — Yalnızca öğedeki metin
seçilebilir
Daha fazla bilgi için bkz. Apple Safari CSS Başvurusu
(http://developer.apple.com/documentation/AppleApplications/Reference/SafariCSSRef/).
223
Bölüm 21: HTML ve JavaScript'te
programlama
Adobe® AIR™ uygulamalarını HTML ve JavaScript ile geliştirmeye özgü bir dizi programlama başlığı mevcuttur.
HTML tabanlı bir AIR uygulaması veya HTMLLoader sınıfını (veya mx:HTML Flex™ bileşenini) kullanarak HTML
veya JavaScript çalıştıran SWF tabanlı bir AIR uygulamasını programladığınızda, aşağıdaki bilgiler önemlidir.
HTMLLoader sınıfı hakkında
Adobe AIR HTMLLoader sınıfı, AIR uygulamasında HTML içeriğini görüntüleyebilen display nesnesini tanımlar.
SWF tabanlı uygulamalar, var olan bir pencereye HTMLLoader denetimi ekleyebilir veya
HTMLLoader.createRootWindow() öğesine sahip HTMLLoader nesnesini otomatik olarak içeren bir HTML
penceresi oluşturabilir. HTMLLoader nesnesine yüklenen HTML sayfasından JavaScript window.htmlLoader özelliği
aracılığıyla erişilebilir.
URL'den HTML içeriği yükleme
Aşağıdaki kod, HTMLLoader nesnesine bir URL yükler (uygulamanızdaki HTML içeriğini görüntülemek için
HTMLLoader nesnesini sahne veya diğer görüntü nesnelerinin alt öğesi olarak ekleyin):
import flash.html.HTMLLoader;
var html:HTMLLoader = new HTMLLoader;
html.width = 400;
html.height = 600;
var urlReq:URLRequest = new URLRequest("http://www.adobe.com/");
html.load(urlReq);
HTMLLoader nesnesinin width ve height özellikleri varsayılan olarak 0'a ayarlanmıştır. Sahneye HTMLLoader
nesnesi eklerken bu boyutları ayarlamak isteyeceksiniz. HTMLLoader öğesi, sayfa yüklenirken birçok olay gönderir.
Yüklenen sayfayla etkileşim kurmanın ne zaman güvenli olduğunu belirlemek için bu olauları kullanabilirsiniz. Bu
olaylar, “HTML ile ilgili olayları işleme” sayfa 241 bölümünde anlatılmıştır.
Ayrıca TextField sınıfını kullanarak HTML metni oluşturabilirsiniz, ancak bunun özellikleri sınırlıdır. Adobe® Flash®
Player’ın TextField sınıfı, HTML işaretleme alt kümesini destekler, ancak boyut sınırlamaları nedeniyle özellikleri
sınırlıdır. (Adobe AIR'de bulunan HTMLLoader sınıfı Flash Player'da mevcut değildir.)
Bir dizeden HTML içeriğini yükleme
HTMLLoader nesnesinin loadString() yöntemi, HTML içeriğinin bir dizesini HTMLLoader nesnesine yükler:
var html:HTMLLoader = new HTMLLoader();
var htmlStr:String = "<html><body>Hello <b>world</b>.</body></html>";
html.loadString(htmlStr);
loadString() yöntemi yoluyla yüklenen içerik varsayılan olarak aşağıdaki karakteristiklere sahip uygulama dışı bir
sanal alanda konumlandırılır:
• Ağdan içerik yüklemek için erişime sahiptir (Ancak dosya sisteminden değil.)
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 224
HTML ve JavaScript'te programlama
• Verileri XMLHttpRequest kullanarak yükleyemez.
•
window.location özelliği "about:blank" olarak ayarlanır.
• İçerik, window.runtime özelliğine (herhangi bir uygulama dışı sanal alanda yer alan içeriğin erişebildiği biçimde)
erişemez.
AIR 1.5'te, HTMLLoader sınıfı bir placeLoadStringContentInApplicationSandbox özelliği içerir. Bu özellik
HTMLLoader nesnesi için true olarak ayarlandığında, loadString() yöntemiyle yüklenen içerik uygulama sanal
alanında konumlandırılır. (Varsayılan değer, false değeridir.) Bu, loadString() yöntemiyle yüklenen içerik için
window.runtime özelliğine ve diğer tüm AIR API'lerine erişim sağlar. Bu özelliği true olarak ayarladığınızda,
loadString() yöntemine yapılan çağrıda kullanılan dizeye ilişkin veri kaynağının güvenilir olduğundan emin olun.
Bu özellik true olarak ayarlandığında, HTML dizesindeki kod ifadeleri tam uygulama ayrıcalıklarıyla yürütülür. Bu
özelliği yalnızca dizenin zararlı kodlar içermediğinden emin olduğunuzda true olarak ayarlayın.
AIR 1.0 veya AIR 1.1 SDK'larıyla derlenen uygulamalarda, loadString() yöntemiyle yüklenen içerik uygulama sanal
alanında konumlandırılır.
HTML ve AIR uygulamalarının kullanımında önemli güvenlik kuralları
AIR uygulamasıyla kurduğunuz dosyalar AIR API'lerine erişime sahiptir. Güvenlik nedenleriyle, diğer kaynaklardan
gelen içerik bu erişime sahip değildir. Örneğin bu kısıtlama uzak bir etki alanından (http://ornek.com gibi) gelen
içeriğin kullanıcının masaüstü dizini içeriğini okumasını (veya daha kötüsünü) engeller.
Çünkü eval() işlevinin (ve ilgili API'lerin) çağrılması yoluyla yararlanılabilecek güvenlik boşlukları mevcuttur,
uygulamayla yüklenen içerik, varsayılan olarak bu yöntemleri kullanamaz. Ancak, bazı Ajax çerçeveleri eval()
işlevini ve ilgili API'leri çağırma yolunu kullanır.
İçeriği bir AIR uygulamasında çalışmak üzere düzgün biçimde yapılandırmak için farklı kaynaklardan gelen içerikteki
güvenlik kısıtlamalarına ilişkin kuralları dikkate almalısınız. Farklı kaynaklardan gelen içerik, sanal alan adı verilen
ayrı güvenlik sınıflandırmalarına yerleştirilir (bkz. “Sanal alanlar” sayfa 27). Varsayılan olarak, uygulamayla yüklenen
içerik uygulama sanal alanı olarak bilinen bir sanal alana yüklenir ve bu sayede AIR API'lerine erişebilir. Uygulama
sanal alanı güvenilmeyen kodların yürütülmesini engellemek üzere tasarlanmış kısıtlamalar içerdiğinden, genellikle en
güvenli sanal alandır.
Çalışma zamanı, uygulamanızla yüklenen içeriği uygulama sanal alanından farklı bir sanal alana yüklemenize olanak
verir. Uygulama dışı sanal alanlardaki içerik, tipik web tarayıcılarınınkine benzer bir güvenlik ortamında çalışır.
Örneğin, uygulama dışı sanal alanlardaki kod eval() yöntemini ve ilgili yöntemleri kullanabilir. (Ancak aynı
zamanda AIR API'lerine erişme izni yoktur.) Çalışma zamanı, içeriğin farklı sanal alanlarda güvenli biçimde iletişim
kurmasına yönelik yollar içerir (örneğin, AIR API'lerini uygulama dışı içeriğe göstermeden). Ayrıntılar için bkz.
“Farklı güvenlik sanal alanlarında çapraz komut dosyası içeriği” sayfa 237.
Güvenlik nedenleriyle sanal alanda kullanımı kısıtlanmış olan kodu çağırdığınızda çalıştırma zamanı bir JavaScript
hatası gönderir: “Uygulama güvenlik sanal alanında JavaScript koduna ilişkin Adobe AIR çalıştırma zamanı güvenlik
ihlali.”
Bu hatayı önlemek için sonraki “Güvenlik ilişkili JavaScript hatalarını önleme” sayfa 225 bölümünde anlatılan
kodlama uygulamalarını takip edin.
Daha fazla bilgi için bkz. “HTML güvenliği” sayfa 29.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 225
HTML ve JavaScript'te programlama
Güvenlik ilişkili JavaScript hatalarını önleme
Bu güvenlik kısıtlamaları nedeniyle sanal alanda kullanımı kısıtlanmış olan kodu çağırdığınızda çalıştırma zamanı bir
JavaScript hatası gönderir: “Uygulama güvenlik sanal alanında JavaScript koduna ilişkin Adobe AIR çalıştırma zamanı
güvenlik ihlali.” Bu hatayı önlemek için, bu kodlama uygulamalarını takip edin.
Güvenlik ilişkili JavaScript hatalarının nedenleri
Belge load olayı tetiklendiğinde ve herhangi bir load olay işleyicisinden çıkıldığında, uygulama sanal alanında
yürütülen kod, değerlendirme ve yürütme dizeleri içeren çoğu uygulamadan kısıtlanır. Güvenli olmayabilecek dizeleri
değerlendiren ve yürüten aşağıdaki JavaScript ifade türlerinin kullanılmaya çalışılması JavaScript hataları oluşturur:
• eval() işlevi
• setTimeout() ve setInterval()
• İşlev yapıcısı
Ayrıca, aşağıdaki JavaScript ifade türleri güvenli olmayan JavaScript hatası oluşturmadan başarısız olur:
• javascript: URL'ler
• innerHTML ve outerHTML ifadelerinde onevent nitelikleri aracılığıyla atanan olay geri çağrıları
• JavaScript dosyalarını uygulama yükleme dizini dışından yükleme
• document.write() ve document.writeln()
• load olayından önce veya load olay işleyicisi sırasında senkronize XMLHttpRequests
• Dinamik olarak oluşturulan komut dosyası öğeleri
Not: Bazı sınırlı durumlarda, dizelerin değerlendirilmesine izin verilir. Daha fazla bilgi için bkz. “Farklı sanal
alanlardaki içerik için kod kısıtlamaları” sayfa 31.
Adobe http://www.adobe.com/go/airappsandboxframeworks_tr adreslerinde uygulama güvenlik sanal alanını
desteklemek üzere bilinen bir dizi Ajax çerçevesi tutar.
Aşağıdaki bölümler, güvenli olmayan JavaScript hatalarını ve uygulama sanal alanında çalışan koda ilişkin sessiz
hataları önlemek için komut dosyalarının nasıl yeniden yazılacağını anlatır.
Uygulama içeriğini farklı bir sanal alana eşleme
Çoğu durumda, güvenlik ilişkili JavaScript hatalarını önlemek amacıyla bir uygulamayı yeniden yazabilir veya yeniden
yapılandırabilirsiniz. Ancak, yeniden yazma veya yeniden yapılandırma olanaklı olmadığında uygulama içeriğini
“Uygulama içeriğini uygulama dışı sanal alana yükleme” sayfa 238 bölümünde anlatılan tekniği kullanarak farklı bir
sanal alana yükleyebilirsiniz. Bu içeriğin AIR API'lerine de erişmesi gerekiyorsa, “Sanal alan köprü arabirimini kurma”
sayfa 238 bölümünde anlatıldığı biçimde bir sanal alan köprüsü oluşturabilirsiniz.
eval() işlevi
Uygulama sanal alanında, eval() işlevi yalnızca load olayı sayfasından önce veya load olay işleyicisi sırasında
kullanılabilir. Sayfa yüklendikten sonra, eval() işlevine yapılan çağrılar kodu yürütmez. Ancak, aşağıdaki
durumlarda eval() işlevinin kullanımını önlemek için kodunuzu yeniden yazabilirsiniz.
Nesneye özellikler atama
Özellik erişimcisi oluşturmak için dizeyi ayrıştırmak yerine:
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 226
HTML ve JavaScript'te programlama
eval("obj." + propName + " = " + val);
köşeli parantez açıklaması içeren access özellikleri:
obj[propName] = val;
Bağlamda var olan değişkenler içeren işlev oluşturma
İfadeleri aşağıdaki şekilde değiştirin:
function compile(var1, var2){
eval("var fn = function(){ this."+var1+"(var2) }");
return fn;
}
şununla:
function compile(var1, var2){
var self = this;
return function(){ self[var1](var2) };
}
Sınıf adını dize parametresi olarak kullanarak nesne oluşturma
Aşağıdaki kodla tanımlanan varsayımsal bir JavaScript sınıfı düşünün:
var CustomClass =
{
Utils:
{
Parser: function(){ alert('constructor') }
},
Data:
{
}
};
var constructorClassName = "CustomClass.Utils.Parser";
Örnek oluşturmanın en basit yolu eval() işlevini kullanmaktır:
var myObj;
eval('myObj=new ' + constructorClassName +'()')
Ancak, sınıf adının her bileşenini ayrıştırma ve köşeli parantez açıklaması kullanarak yeni nesne oluşturma yoluyla,
eval() işlevinin çağrılmasını önleyebilirsiniz:
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 227
HTML ve JavaScript'te programlama
function getter(str)
{
var obj = window;
var names = str.split('.');
for(var i=0;i<names.length;i++){
if(typeof obj[names[i]]=='undefined'){
var undefstring = names[0];
for(var j=1;j<=i;j++)
undefstring+="."+names[j];
throw new Error(undefstring+" is undefined");
}
obj = obj[names[i]];
}
return obj;
}
Örneği oluşturmak için şunu kullanın:
try{
var Parser = getter(constructorClassName);
var a = new Parser();
}catch(e){
alert(e);
}
setTimeout() ve setInterval()
İşleyici işlevi olarak onaylanan dizeyi bir işlev başvurusu veya nesneyle değiştirin. Örneğin, ifadeyi şu şekilde
değiştirin:
setTimeout("alert('Timeout')", 10);
şununla:
setTimeout(alert('Timeout'), 10);
Veya işlev this nesnesinin çağıran tarafından ayarlanmasını gerektirdiğinde ifadeyi şu şekilde değiştirin:
this.appTimer = setInterval("obj.customFunction();", 100);
şununla:
var _self = this;
this.appTimer = setInterval(function(){obj.customFunction.apply(_self);}, 100);
İşlev yapıcısı
new Function(param, body) çağrıları bir satır içi işlev bildirimiyle değiştirilebilir veya yalnızca sayfa load olayı
işlenmeden önce kullanılabilir.
javascript: URL'ler
javascript kullanılarak linkte tanımlanan kod: Uygulama sanal alanında URL şeması yoksayılır. Güvenli olmayan
JavaScript hatası oluşmadı. javascript aracılığıyla linkleri değiştirebilirsiniz: URL'ler, örneğin:
<a href="javascript:code()">Click Me</a>
şununla:
<a href="#" onclick="code()">Click Me</a>
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 228
HTML ve JavaScript'te programlama
innerHTML ve outerHTML ifadelerinde onevent nitelikleri aracılığıyla atanan
olay geri çağrıları
Belge DOM'una öğe eklemek için innerHTML veya outerHTML kullandığınızda, ifadede atanan onclick veya
onmouseover gibi olay geri çağrıları yoksayılır. Güvenlik hatası oluşmadı. Bunun yerine, addEventListener()
yöntemini kullanarak yeni öğelere id niteliği atayabilir ve olay işleyici geri çağrı işlevlerini ayarlayabilirsiniz.
Örneğin, belgede şu şekilde bir hedef öğe belirlendiğinde:
<div id="container"></div>
İfadeleri şu şekilde değiştirin:
document.getElementById('container').innerHTML =
'<a href="#" onclick="code()">Click Me.</a>';
şununla:
document.getElementById('container').innerHTML = '<a href="#" id="smith">Click Me.</a>';
document.getElementById('smith').addEventListener("click", function() { code(); });
JavaScript dosyalarını uygulama yükleme dizini dışından yükleme
Uygulama sanal alanının dışından komut dosyaları yüklemeye izin verilmez. Güvenlik hatası oluşmadı. Uygulama
sanal alanında çalışan tüm komut dosyaları uygulama dizinine yüklenmiş olmalıdır. Sayfada harici komut dosyaları
kullanmak için, sayfayı farklı bir sanal alana eşlemelisiniz. Bkz. “Uygulama içeriğini uygulama dışı sanal alana
yükleme” sayfa 238.
document.write() ve document.writeln()
Sayfa load olayı işlendikten sonra document.write() veya document.writeln() çağrıları yoksayılır. Güvenlik
hatası oluşmadı. Alternatif olarak yeni bir dosya yükleyebilir veya DOM işleme tekniklerini kullanarak belge gövdesini
değiştirebilirsiniz.
load olayından önce veya load olay işleyicisi sırasında senkronize
XMLHttpRequests
load olayından önce veya load olay işleyicisi sırasında başlatılan senkronize XMLHttpRequest'ler herhangi bir içerik
döndürmez. Senkronize olmayan XMLHttpRequest'ler başlatılabilir, ancak load olayının sonrasına kadar dönmez.
load olayı işlendikten sonra senkronize XMLHttpRequest'ler normal davranır.
Dinamik olarak oluşturulan komut dosyası öğeleri
Dinamik olarak oluşturulan komut dosyası öğeleri, örneğin innerHTML ile veyadocument.createElement()
yöntemiyle oluşturulduklarında yoksayılır.
AIR API sınıflarına JavaScript'ten erişme
Standart ve gelişmiş Webkit öğelerine ek olarak, HTML ve JavaScript kodu da çalışma zamanı tarafından sağlanan host
sınıflarına erişebilir. Bu sınıflar AIR'in sağladığı gelişmiş özelliklere erişmenizi sağlar, bu özellikler:
• Dosya sistemine erişim
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 229
HTML ve JavaScript'te programlama
• Yerel SQL veri tabanları kullanımı
• Uygulama ve pencere menülerinin denetimi
• Ağ iletişimi için soketlere erişim
• Kullanıcı tanımlı sınıfların ve nesnelerin kullanımı
• Ses özellikleri
Örneğin, AIR dosya API'si flash.filesystem paketinde bulunan bir File sınıfını içerir. JavaScript'te aşağıdaki şekilde
bir File nesnesi oluşturabilirsiniz:
var myFile = new window.runtime.flash.filesystem.File();
runtime nesnesi, uygulama sanal alanındaki AIR'de çalışan HTML içeriği tarafından kullanılabilen özel bir
JavaScript nesnesidir. JavaScript'ten runtime sınıflarına erişebilmenizi sağlar. runtime nesnesinin flash özelliği,
flash paketine erişim sağlar. Buna karşılık, runtime nesnesinin flash.filesystem özelliği flash.filesystem
paketine erişim sağlar (ve bu paket File sınıfını içerir). Paketler, ActionScript'te kullanılan sınıfları düzenlemenin
bir yoludur.
Not: runtime özelliği kareye veya iframe'e yüklenen sayfaların window nesnelerine otomatik olarak eklenmez.
Ancak, alt belge uygulama sanal alanında olduğu sürece, alt öğe üst öğenin runtime özelliğine erişebilir.
Runtime sınıflarının paket yapısı geliştiricilerin her sınıfa erişmek için uzun JavaScript kod dizelerini yazmasını
gerektirdiğinden (window.runtime.flash.desktop.NativeApplication içinde olduğu gibi), AIR SDK
runtime sınıflarına çok daha kolay erişmenizi sağlayan AIRAliases.js dosyasını içerir (örneğin yalnızca
air.NativeApplication yazarak).
Bu kılavuzda AIR API sınıfları tartışılmıştır. HTML geliştiricilerini ilgilendirebilecek Flash Player API dışındaki
sınıflar HTML Geliştiricileri için Adobe AIR Dil Başvurusu bölümünde anlatılmıştır. ActionScript, SWF (Flash
Player) içeriğinde kullanılan dildir. Ancak, JavaScript ve ActionScript sözdizimleri birbirine benzer. (ECMAScript
dilinin sürümlerini temel alır.) Tüm yerleşik sınıflar hem JavaScript'te (HTML içeriğinde) hem de ActionScript'te
(SWF içeriğinde) mevcuttur.
Not: JavaScript kodu ActionScript'te bulunan Dictionary, XML, and XMLList sınıflarını kullanamaz.
AIRAliases.js dosyasını kullanma
Runtime sınıfları, paket yapısında aşağıdaki şekilde düzenlenmiştir:
•
window.runtime.flash.desktop.NativeApplication
•
window.runtime.flash.desktop.ClipboardManager
•
window.runtime.flash.filesystem.FileStream
•
window.runtime.flash.data.SQLDatabase
AIR SDK içinde, runtime sınıflarına daha az yazı yazarak erişebilmenizi sağlayacak “başka ad” tanımlarını sunan
bir AIRAliases.js dosyası yer alır. Örneğin, yukarıda listelenen sınıflara yalnızca şunu yazarak erişebilirsiniz:
•
air.NativeApplication
•
air.Clipboard
•
air.FileStream
•
air.SQLDatabase
Bu liste, AIRAliases.js dosyasındaki sınıfların kısa bir alt kümesidir. Sınıfların ve paket düzeyindeki işlevlerin tam
listesi HTML Geliştiricileri için Adobe AIR Dil Başvurusu içinde bulunur.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 230
HTML ve JavaScript'te programlama
AIRAliases.js dosyası, yaygın olarak kullanılan runtime sınıflarının yanı sıra, yaygın olarak kullanılan paket
düzeyindeki işlevlere işlevler için başka adları da içerir: air.trace(), air.navigateToURL() ve
air.sendToURL() olarak farklı adlandırılan window.runtime.trace(),
window.runtime.flash.net.navigateToURL() ve window.runtime.flash.net.sendToURL().
AIRAliases.js dosyasını kullanmak için aşağıdaki script başvurusunu HTML sayfanıza ekleyin:
<script src="AIRAliases.js"></script>
Gerektiğinde src başvurusundaki yolu ayarlayın.
Önemli: Bu belgedeki JavaScript örnek kodu, aksi belirtilmediği sürece AIRAliases.js dosyasını HTML sayfanıza dahil
ettiğinizi varsayar.
AIR'deki URL'ler hakkında
AIR'den çalışan HTML içeriğinde, link etiketinin href niteliğinde veya URL girebileceğiniz herhangi bir yerde img,
frame, iframe ve script etiketlerine ilişkin src niteliklerini tanımlamak için aşağıdaki URL şemalarından birini
kullanabilirsiniz.
URL şeması
Açıklama
Örnek
file
Dosya sisteminin köküne ilişkin yol.
file:///c:/AIR Test/test.txt
app
Yüklenen uygulamanın kök dizinine ilişkin yol.
app:/images
app-storage
app-storage:/settings/prefs.xml
Uygulama depolama dizinine ilişkin yol. AIR, yüklenen her
uygulama için bu uygulamaya ilişkin verileri depolamak üzere
kullanışlı bir yer olan benzersiz bir uygulama depolama dizini
tanımlar.
http
Standart bir HTTP isteği.
http://www.adobe.com
https
Standart bir HTTPS isteği.
https://secure.example.com
URL şemalarının AIR'de kullanımı hakkında daha fazla bilgi için bkz. “URL'lerde AIR URL şemalarını kullanma”
sayfa 293.
File, Loader, URLStream ve Sound sınıfları dahil çoğu AIR API'leri URL içeren bir dize yerine URLRequest nesnesini
kullanır. URLRequest nesnesi, aynı url şemalarından herhangi birini kullanabilen bir dizeyle başlatılır. Örneğin,
aşağıdaki ifade Adobe ana sayfasını istemek için kullanılabilecek bir URLRequest nesnesi oluşturur.
var urlReq = new air.URLRequest("http://www.adobe.com/");
URLRequest nesneleri hakkında bilgi için bkz. “URL istekleri ve ağ iletişimi” sayfa 292.
ActionScript nesnelerini JavaScript için kullanılabilir
duruma getirme
HTMLLoader nesnesi tarafından yüklenen HTML sayfasındaki JavaScript, ActionScript yürütme bağlamında HTML
sayfasının window.runtime, window.htmlLoader ve window.nativeWindow özellikleri kullanılarak tanımlanan
sınıfları, nesneleri ve işlevleri çağırabilir. Ayrıca JavaScript yürütme bağlamında ActionScript nesneleri ve işlevlerine
başvurular oluşturarak bunları JavaScript için kullanılabilir duruma getirebilirsiniz.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 231
HTML ve JavaScript'te programlama
JavaScript nesnelerine ActionScript üzerinden erişmenin basit bir örneği
Aşağıdaki örnek, ActionScript nesnelerine başvuru yapan özelliklerin bir HTML'sayfasının global window nesnesine
nasıl eklendiğini gösterir:
var html:HTMLLoader = new HTMLLoader();
var foo:String = "Hello from container SWF."
function helloFromJS(message:String):void {
trace("JavaScript says:", message);
}
var urlReq:URLRequest = new URLRequest("test.html");
html.addEventListener(Event.COMPLETE, loaded);
html.load(urlReq);
function loaded(e:Event):void{
html.window.foo = foo;
html.window.helloFromJS = helloFromJS;
}
Önceki örnekte HTMLLoader nesnesine yüklenen HTML içeriği (test.html adlı bir dosyada) üst SWF dosyasında
tanımlanan foo özelliği ve helloFromJS() yöntemine erişebilir:
<html>
<script>
function alertFoo() {
alert(foo);
}
</script>
<body>
<button onClick="alertFoo()">
What is foo?
</button>
<p><button onClick="helloFromJS('Hi.')">
Call helloFromJS() function.
</button></p>
</body>
</html>
Yüklenen bir belgenin JavaScript bağlamına erişirken, sayfa yapım sırasında nesneleri sayfada tanımlanan tüm komut
dosyalarının erişebileceği kadar erken oluşturmak için htmlDOMInitialize olayını kullanabilirsiniz. Complete
olayını beklerseniz, yalnızca sayfa load olayından sonra çalışan sayfadaki komut dosyaları eklenen nesnelere erişebilir.
Sınıf tanımlarını JavaScript için kullanılabilir duruma getirme
Uygulamanızın ActionScript sınıflarını JavaScript'te kullanılabilir duruma getirmek için, yüklenen HTML içeriğini
sınıf tanımlarını içeren uygulama etki alanına atayabilirsiniz. JavaScript yürütme bağlamının uygulama etki alanı,
HTMLLoader nesnesinin runtimeApplicationDomain özelliğiyle ayarlanabilir. Uygulama etki alanını birincil
uygulama etki alanı olarak ayarlamak için runtimeApplicationDomain öğesini aşağıdaki kodda gösterildiği şekilde
ApplicationDomain.currentDomain olarak ayarlayın:
html.runtimeApplicationDomain = ApplicationDomain.currentDomain;
runtimeApplicationDomain özelliği ayarlandığında, JavaScript bağlamı sınıf tanımlarını atanan etki alanıyla
paylaşır. JavaScript'teki özel bir sınıfın örneğini oluşturmak için window.runtime özelliği aracılığıyla sınıf tanımına
başvuru yapın ve new operatörü kullanın:
var customClassObject = new window.runtime.CustomClass();
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 232
HTML ve JavaScript'te programlama
HTML içeriği uyumlu bir güvenlik etki alanından geliyor olmalıdır. HTML içeriği atadığınız uygulama etki alanından
farklı bir güvenlik etki alaından geliyorsa, sayfa bunun yerine varsayılan uygulama etki alanını kullanır. Örneğin,
İnternet'ten uzak bir sayfa yüklediğinizde ApplicationDomain.currentDomain öğesini sayfanın uygulama etki alanı
olarak atayamazsınız.
Olay dinleyicilerini kaldırma
Runtime nesneleri, yüklenen SWF içeriğindeki nesneler ve hatta diğer sayfalarda çalışan JavaScript nesneleri de dahil
güncel sayfa dışındaki nesnelere JavaScript olay dinleyicileri eklediğinizde, sayfa boşaldığında her zaman bu olay
dinleyicilerini kaldırmalısınız. Aksi halde, olay dinleyicisi artık var olmayan bir işleyici işlevine olay gönderir. Bu
gerçekleşirse, şu hata mesajını görürsünüz: “Uygulama artık yüklenmeyen bir HTML sayfasındaki JavaScript
nesnesine başvuruda bulunmaya çalıştı." Gerekli olmayan olay dinleyicilerinin kaldırılması, AIR'in ilişkilendirilmiş
belleği geri istemesine olanak verir. Daha fazla bilgi için bkz. “Gezinilen HTML sayfalarındaki olay dinleyicilerini
kaldırma” sayfa 245.
HTML DOM ve JavaScript nesnelerine ActionScript'ten
erişme
HTMLLoader nesnesi complete olayını gönderdikten sonra, sayfaya ilişkin HTML DOM'daki (belge nesnesi modeli)
tüm nesnelere erişebilirsiniz. Erişilebilir nesneler görüntü öğelerininin (sayfadaki div ve p nesneleri gibi) yanı sıra
JavaScript değişkenleri ve işlevlerini kapsar. complete olayı, JavaScript sayfası load olayına karşılık gelir. complete
gönderilmeden önce DOM öğeleri, değişkenleri ve işlevleri ayrıştırılmamış veya oluşturulmamış olabilir. Mümkünse
HTML DOM'a erişmeden önce complete olayını bekleyin.
Örneğin, aşağıdaki HTML sayfasına bakın:
<html>
<script>
foo = 333;
function test() {
return "OK.";
}
</script>
<body>
<p id="p1">Hi.</p>
</body>
</html>
Bu basit HTML sayfası foo adlı bir JavaScript değişkeni ve test() adlı bir JavaScript işlevi tanımlar. Bunların her ikisi de
sayfanın genel window nesnesinin özellikleridir. Ayrıca, window.document nesnesi, getElementById() yöntemini
kullanarak erişebileceğiniz, (p1 kimliğiyle) adlandırılan P öğesini içerir. Sayfa yüklendiğinde (HTMLLoader nesnesi
complete olayını gönderdiğinde), bu nesnelerin her birine aşağıdaki ActionScript kodunda gösterildiği şekilde
ActionScript'ten erişebilirsiniz:
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 233
HTML ve JavaScript'te programlama
var html:HTMLLoader = new HTMLLoader();
html.width = 300;
html.height = 300;
html.addEventListener(Event.COMPLETE, completeHandler);
var xhtml:XML =
<html>
<script>
foo = 333;
function test() {
return "OK.";
}
</script>
<body>
<p id="p1">Hi.</p>
</body>
</html>;
html.loadString(xhtml.toString());
function completeHandler(e:Event):void {
trace(html.window.foo); // 333
trace(html.window.document.getElementById("p1").innerHTML); // Hi.
trace(html.window.test()); // OK.
}
HTML öğesinin içeriğine erişmek için innerHTML özelliğini kullanın. Örneğin, önceki kod p1 adlı HTML öğesinin
içeriğini getirmek için html.window.document.getElementById("p1").innerHTML kullanır.
HTML sayfasının özelliklerini ActionScript'ten de ayarlayabilirsiniz. Örneğin, aşağıdaki örnek var olan HTMLLoader
nesnesine ilişkin başvuruyu kullanarak p1 öğesinin içeriğini ve sayfadaki foo JavaScript değişkeninin değerini ayarlar:
html.window.document.getElementById("p1").innerHTML = "Goodbye";
html.window.foo = 66;
SWF içeriğini HTML'e gömme
SWF içeriğini tarayıcıda olduğu gibi AIR uygulamasında da HTML içeriğine gömebilirsiniz. SWF içeriğini object
etiketini, embed etiketini veya her ikisini de kullanarak gömün.
Not: SWF içeriğini HTML sayfasında görüntülemek için object etiketi ve embed etiketinin her ikisini de kullanmak,
yaygın bir web geliştirme uygulamasıdır. Bu uygulamanın AIR'de hiçbir yararı yoktur. AIR'de görüntülenmesi için
içerikteki W3C standart object etiketinin kendisini kullanabilirsiniz. Aynı zamanda, tarayıcıda da görüntülenen
HTML içeriği için gerektiğinde object ve embed etiketlerinin ikisini birlikte kullanmaya devam edebilirsiniz.
Aşağıdaki örnek, bir SWF dosyasını HTML içeriğinde görüntülemek için HTML object etiketinin kullanımını
gösterir. SWF dosyası uygulama dizininden yüklenir, ancak AIR tarafından desteklenen herhangi bir URL şemasını
kullanabilirsiniz. (SWF dosyasının yüklendiği kaynak, AIR'in içeriği yerleştirdiği güvenlik sanal alanını belirler.)
<object type="application/x-shockwave-flash" width="100%" height="100%">
<param name="movie" value="app:/SWFFile.swf"></param>
</object>
İçeriği dinamik olarak yüklemek için bir komut dosyası da kullanabilirsiniz. Aşağıdaki örnek, urlString
parametresinde belirtilen SWF dosyasını görüntülemek üzere bir object düğümü oluşturur. Örnek, düğümü
elementID parametresiyle belirtilen kimliğe sahip sayfa öğesinin alt öğesi olarak ekler.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 234
HTML ve JavaScript'te programlama
<script>
function showSWF(urlString, elementID){
var displayContainer = document.getElementById(elementID);
displayContainer.appendChild(createSWFObject(urlString,650,650));
}
function createSWFObject(urlString, width, height){
var SWFObject = document.createElement("object");
SWFObject.setAttribute("type","application/x-shockwave-flash");
SWFObject.setAttribute("width","100%");
SWFObject.setAttribute("height","100%");
var movieParam = document.createElement("param");
movieParam.setAttribute("name","movie");
movieParam.setAttribute("value",urlString);
SWFObject.appendChild(movieParam);
return SWFObject;
}
</script>
HTML sayfasında ActionScript kitaplıkları kullanma
AIR, sayfanın ActionScript sınıflarını derlenmiş bir SWF dosyasına yükleyebilmesi için HTML komut dosyası öğesini
genişletir. Kök uygulama klasörünün lib alt dizininde yer alan myClasses.swf adlı kitaplığı içe aktarmak için HTML
dosyasında yer alan aşağıdaki komut dosyasını dahil edin:
<script src="lib/myClasses.swf" type="application/x-shockwave-flash"></script>
Önemli: Kitaplığın düzgün biçimde yüklenmesi için tür niteliği type="application/x-shockwave-flash"
olmalıdır.
SWF içeriği Flash Player 10 veya AIR 1.5 olarak derlendiyse, uygulama tanımlayıcı dosyasının XML ad alanını AIR 1.5
ad alanına ayarlamanız gerekir. Daha fazla bilgi için bkz. “Uygulama tanımlayıcı dosyasında özellikleri tanımlama”
sayfa 43.
AIR dosyası paketlendiğinde lib dizini ve myClasses.swf dosyası da dahil edilmelidir.
İçe aktarılan sınıflara JavaScript Window nesnesinin runtime özelliği aracılığıyla erişin:
var libraryObject = new window.runtime.LibraryClass();
SWF dosyasındaki sınıflar paketler halinde düzenlenmişse, paket adını da eklemelisiniz. Örneğin, LibraryClass tanımı
utilities adlı paketteyse, aşağıdaki ifadeyi içeren sınıf örneğini oluşturursunuz:
var libraryObject = new window.runtime.utilities.LibraryClass();
Not: ActionScript SWF kitaplığını AIR'de yer alan bir HTML sayfasının parçası olarak kullanmak üzere derlemek için
acompc derleyicisini kullanın. Acompc yardımcı programı, Flex 3 SDK'nin parçasıdır ve Flex 3 SDK belgesinde açıklanır.
HTML DOM ve JavaScript nesnelerine içe aktarılan bir ActionScript
dosyasından erişme
<script> etiketi kullanılarak sayfaya aktarılmış bir SWF dosyasındaki ActionScript'ten HTML sayfasındaki nesnelere
erişmek için, window veya document gibi bir JavaScript nesnesine ilişkin başvuruyu ActionScript kodunda tanımlanan
bir işleve iletin. JavaScript nesnesine (veya iletilen başvuru aracılığıyla erişilebilen diğer nesnelere) erişmek için
işlevdeki başvuruyu kullanın.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 235
HTML ve JavaScript'te programlama
Örneğin, aşağıdaki HTML sayfasına bakın:
<html>
<script src="ASLibrary.swf" type="application/x-shockwave-flash"></script>
<script>
num = 254;
function getStatus() {
return "OK.";
}
function runASFunction(window){
var obj = new runtime.ASClass();
obj.accessDOM(window);
}
</script>
<body onload="runASFunction">
<p id="p1">Body text.</p>
</body>
</html>
Bu basit HTML sayfası num adlı bir JavaScript değişkeni ve getStatus() adlı bir JavaScript işlevi içerir. Bunların her ikisi
de sayfanın window nesnesinin özellikleridir. Ayrıca, window.document nesnesi (p1 kimliğiyle) adlandırılan bir P
öğesi içerir.
Sayfa, ASClass sınıfını içeren “ASLibrary.swf” adlı ActionScript dosyasını yükler. ASClass, bu JavaScript nesnelerinin
değerlerini izleyen accessDOM() adlı bir işlev tanımlar. accessDOM() yöntemi JavaScript Window nesnesini
argüman olarak alır. Window başvurusunu kullanarak, aşağıdaki tanımda gösterildiği şekilde değişkenler, işlevler ve
DOM öğeleri dahil sayfadaki diğer nesnelere erişebilir:
public class ASClass{
public function accessDOM(window:*):void {
trace(window.num); // 254
trace(window.document.getElementById("p1").innerHTML); // Body text..
trace(window.getStatus()); // OK.
}
}
İçe aktarılan ActionScript sınıfından HTML sayfasının özelliklerini getirebilir ve ayarlayabilirsiniz. Örneğin, aşağıdaki
işlev sayfadaki p1 öğesinin içeriğini ayarlar ve foo JavaScript değişkeninin değerini belirler:
public function modifyDOM(window:*):void {
window.document.getElementById("p1").innerHTML = "Bye";
window.foo = 66;
Date ve RegExp nesnelerini dönüştürme
JavaScript ve ActionScript dillerinin her ikisi de Date ve RegExp sınıflarını tanımlar, ancak bu türdeki nesneler iki
yürütme bağlamı arasında otomatik olarak dönüştürülmez. Date ve RegExp nesnelerini farklı yürütme
bağlamlarındaki özellikleri ve işlev parametrelerini ayarlamak için kullanmadan önce eşdeğer türe dönüştürmelisiniz.
Örneğin, aşağıdaki ActionScript kodu, jsDate adlı JavaScript Date nesnesini ActionScript Date nesnesine
dönüştürür:
var asDate:Date = new Date(jsDate.getMilliseconds());
Aşağıdaki ActionScript kodu, jsRegExp adlı JavaScript RegExp nesnesini ActionScript RegExp nesnesine
dönüştürür:
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 236
HTML ve JavaScript'te programlama
var flags:String = "";
if (jsRegExp.dotAll) flags += "s";
if (jsRegExp.extended) flags += "x";
if (jsRegExp.global) flags += "g";
if (jsRegExp.ignoreCase) flags += "i";
if (jsRegExp.multiline) flags += "m";
var asRegExp:RegExp = new RegExp(jsRegExp.source, flags);
HTML stil sayfasını ActionScript'ten değiştirme
HTMLLoader nesnesi complete olayını gönderdiğinde, sayfadaki CSS stillerini inceleyebilir ve değiştirebilirsiniz.
Örneğin, aşağıdaki basit HTML belgesine bakın:
<html>
<style>
.style1A { font-family:Arial; font-size:12px }
.style1B { font-family:Arial; font-size:24px }
</style>
<style>
.style2 { font-family:Arial; font-size:12px }
</style>
<body>
<p class="style1A">
Style 1A
</p>
<p class="style1B">
Style 1B
</p>
<p class="style2">
Style 2
</p>
</body>
</html>
HTMLLoader nesnesi bu içeriği yükledikten sonra sayfadaki CSS stillerini burada gösterildiği şekilde
window.document.styleSheets dizisinin cssRules dizisi yoluyla değiştirebilirsiniz:
var html:HTMLLoader = new HTMLLoader( );
var urlReq:URLRequest = new URLRequest("test.html");
html.load(urlReq);
html.addEventListener(Event.COMPLETE, completeHandler);
function completeHandler(event:Event):void {
var styleSheet0:Object = html.window.document.styleSheets[0];
styleSheet0.cssRules[0].style.fontSize = "32px";
styleSheet0.cssRules[1].style.color = "#FF0000";
var styleSheet1:Object = html.window.document.styleSheets[1];
styleSheet1.cssRules[0].style.color = "blue";
styleSheet1.cssRules[0].style.font-family = "Monaco";
}
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 237
HTML ve JavaScript'te programlama
Bu kod CSS stillerini, elde edilen HTML belgesinin aşağıdaki gibi görüneceği biçimde ayarlar:
HTMLLoader nesnesi complete olayını gönderdikten sonra kodun sayfaya stiller ekleyebileceğini göz önünde
bulundurun.
Farklı güvenlik sanal alanlarında çapraz komut dosyası
içeriği
Çalıştırma zamanı güvenlik modeli kodu farklı kaynaklardan ayırır. Farklı güvenlik sanal alanlarında içerik için komut
dosyası oluşturarak bir güvenlik sanal alanındaki içeriğin diğer sanal alandaki seçilen özellikler ve yöntemlere
erişmesini sağlayabilirsiniz.
AIR güvenlik sanal alanları ve JavaScript kodu
AIR, bir etki alanındaki kodun diğer etki alanındaki içerikle etkileşime girmesini engelleyen bir aynı kaynak politikası
uygular. Tüm dosyalar, kaynakları temel alınarak bir sanal alana yerleştirilir. Genellikle uygulama sanal alanındaki
içerik aynı kaynak ilkesini ihlal edemez ve uygulama yükleme dizininin dışından yüklenen içerik için çapraz komut
dosyası oluşturur. Ancak, AIR uygulama dışı içeriğe ilişkin çapraz komut dosyası oluşturmanızı sağlayan birkaç teknik
sunar.
Bir teknik, uygulama içeriğini farklı bir güvenlik sanal alanına eşlemek için çerçeveleri veya iframe'leri kullanır.
Uygulamanın sanal alanlı bölümünden yüklenen tüm sayfalar, uzak etki alanından yüklenmiş gibi davranır. Örneğin,
bu içerik uygulama içeriğini example.com etki alanına yükleyerek example.com'dan yüklenen sayfalar için çapraz
komut dosyası oluşturabilir.
Teknik uygulama içeriğini farklı bir sanal alana yerleştirdiğinden, bu içerikte bulunan kod artık değerlendirilen
dizelerdeki kod yürütmesine ilişkin kısıtlamalara tabi değildir. Bu sanal alan eşleme tekniğini, uzak içerik için çapraz
komut dosyası oluşturmanız gerekmese bile, bu kısıtlamaları kolaylaştırmak için kullanabilirsiniz. İçeriği bu şekilde
eşlemek özellikle birden çok JavaScript çerçevesinden biriyle veya dizelerin değerlendirilmesine dayanan mevcut kodla
çalışırken kullanışlıdır. Ancak, güvenli olmayan içeriğin uygulama sanal alanı dışında çalışırken yerleştirilip ve
yürütülebiliyor olması riskini göz önünde bulundurun ve buna karşı önlem alın.
Aynı zamanda, başka bir sanal alana eşlenen uygulama içeriği AIR API'lerine erişimini kaybeder, bu nedenle sanal alan
eşleme tekniği AIR işlevlerini uygulama sanal alanının dışında yürütülen koda göstermek için kullanılamaz.
Diğer bir çapraz komut dosyası oluşturma tekniği, uygulama dışı sanal alandaki içerikle bunun uygulama sanal
alanında bulunan üst belgesindeki içerik arasında sanal alan köprüsü adı verilen bir arabirim oluşturmanıza olanak
verir. Köprü, alt içeriğin üst içerik tarafından tanımlanan özellikler ve yöntemlere erişmesini, üst içeriğin alt içerik
tarafından tanımlanan özellikler ve yöntemlere erişmesini, veya bunların her ikisini sağlar.
Son olarak, uygulama sanal alanından ve isteğe bağlı olarak diğer sanal alanlardan etki alanları arası XMLHttpRequests
de gerçekleştirebilirsiniz.
Daha fazla bilgi için bkz. “HTML kare ve iframe öğeleri” sayfa 218, “HTML güvenliği” sayfa 29, ve “XMLHttpRequest
nesnesi” sayfa 212.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 238
HTML ve JavaScript'te programlama
Uygulama içeriğini uygulama dışı sanal alana yükleme
Uygulama içeriğinin uygulama yükleme dizininin dışından yüklenen içerik için güvenli biçimde çapraz komut dosyası
oluşturmasını sağlamak amacıyla, uygulama içeriğini harici içerikle aynı güvenlik sanal alanına yüklemek için frame
veya iframe öğelerini kullanın. Uzak içerik için çapraz komut dosyası oluşturmanız gerekmiyorsa, ancak yine de
uygulamanızın bir sayfasını uygulama sanal alanının dışından yüklemek istiyorsanız kaynak etki alanı olarak
http://localhost/ veya başka bir zararsız değer kullanın.
AIR, çerçeveye yüklenen uygulama dosyasının uygulama dışı bir sanal alana eşlenmesi gerekip gerekmediğini
belirlemenizi sağlayan kare öğesine yeni sandboxRoot ve documentRoot niteliklerini ekler. sandboxRoot URL'sinin
altındaki bir yola çözümlenen dosyalar bunun yerine documentRoot dizininden yüklenir. Güvenlik nedenleriyle, bu
şekilde yüklenen uygulama içeriği, sandboxRoot URL'sinden yüklenmiş gibi ele alınır.
sandboxRoot özelliği, kare içeriğinin yerleştirileceği sanal alan ve etki alanını belirlemek için kullanılacak URL'yi
belirtir. URL şemasının kullanması gereken file:, http: veya https:. İlişkili bir URL belirtirseniz, içerik uygulama
sanal alanında kalır.
documentRoot özelliği, çerçeve içeriğinin yükleneceği kaynak dizini belirtir. URL şemasının kullanması gereken
file:, app: veya app-storage:.
Aşağıdaki örnek, uygulamanın sandbox alt dizinine yüklenen içeriği uzak sanal alanda ve www.example.com etki
alanında çalışacak biçimde eşler:
<iframe
src="http://www.example.com/local/ui.html"
sandboxRoot="http://www.example.com/local/"
documentRoot="app:/sandbox/">
</iframe>
ui.html sayfası aşağıdaki komut dosyası etiketini kullanarak yerel sandbox klasöründen bir javascript dosyası
yükleyebilir:
<script src="http://www.example.com/local/ui.js"></script>
Ayrıca, aşağıdaki gibi komut dosyası etiketini kullanarak uzak sunucudaki bir dizinden de içerik yükleyebilir:
<script src="http://www.example.com/remote/remote.js"></script>
sandboxRoot URL'si, uzak sunucuda bulunan aynı URL'deki tüm içeriği maskeler. Yukarıdaki örnekte, AIR, isteği
yerel uygulama dizinine yeniden eşlediğinden www.example.com/local/ linkindeki (veya onun alt dizinlerinden
birindeki) uzak içeriğe erişemezsiniz. İstekler, sayfada gezinmesinden, XMLHttpRequest'ten veya tüm diğer içerik
yükleme yöntemlerinden türetilseler de yeniden eşlenirler.
Sanal alan köprü arabirimini kurma
Uygulama sanal alanındaki içeriğin uygulama dışı bir sanal alandaki içerik tarafından tanımlanan özellikler ve
yöntemlere erişmesi veya uygulama dışı içeriğin uygulama sanal alanındaki içerik tarafından tanımlanan özellikler
veya yöntemlere erişmesi gerektiğinde sanal alan köprüsü kullanmalısınız. Herhangi bir alt belgenin window nesnesine
ait childSandboxBridge ve parentSandboxBridge özellikleriyle bir köprü oluşturun.
Alt sanal alan köprüsü oluşturma
childSandboxBridge özelliği, alt belgenin üst belgedeki içeriğe bir arabirim göstermesine olanak verir. Arabirim
göstermek için childSandbox özelliğini alt belgedeki bir işleme veya nesneye ayarlarsınız. Böylece nesneye veya işleve
üst belgedeki içerikten erişebilirsiniz. Aşağıdaki örnek, alt belgede çalışan bir komut dosyasının bir işlev ve bir özellik
içeren nesneyi üst öğesine nasıl gösterdiğini açıklar:
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 239
HTML ve JavaScript'te programlama
var interface = {};
interface.calculatePrice = function(){
return ".45 cents";
}
interface.storeID = "abc"
window.childSandboxBridge = interface;
Bu alt içerik, “alt” kimliği atanmış bir iframe'e yüklendiyse, karenin childSandboxBridge özelliğini okuyarak üst
içerikten arabirime erişebilirsiniz.
var childInterface = document.getElementById("child").contentWindow.childSandboxBridge;
air.trace(childInterface.calculatePrice()); //traces ".45 cents"
air.trace(childInterface.storeID)); //traces "abc"
Üst sanal alan köprüsü oluşturma
parentSandboxBridge özelliği, üst belgenin alt belgedeki içeriğe bir arabirim göstermesine olanak verir. Üst belge,
arabirim göstermek için alt belgenin parentSandbox özelliğini üst belgede tanımlanmış bir işleve veya nesneye
ayarlar. Böylece nesneye veya işleve alt belgedeki içerikten erişebilirsiniz. Aşağıdaki örnek, üst karede çalışan bir komut
dosyasının işlev içeren bir nesneyi alt belgeye nasıl gösterdiğini açıklar:
var interface = {};
interface.save = function(text){
var saveFile = air.File("app-storage:/save.txt");
//write text to file
}
document.getElementById("child").contentWindow.parentSandboxBridge = interface;
Alt karedeki içerik, bu arabirimi kullanarak metni save.txt adlı bir dosyaya kaydedebilir, ancak dosya sistemine
bunun dışında herhangi bir erişimi olmayacaktır. Alt içerik saklama işlevini aşağıdaki şekilde çağırabilir:
var textToSave = "A string.";
window.parentSandboxBridge.save(textToSave);
Uygulama içeriği, diğer sanal alanlara mümkün olan en dar arabirimi göstermelidir. Uygulama dışı içerik, yanlışlıkla
veya kötü amaçla kod yerleştirmesine maruz kalabileceğinden yapısı gereği güvenilmez olarak ele alınmalıdır. Üst
sanal alan köprüsü aracılığıyla gösterdiğiniz arabirimin hatalı kullanımını engellemek için uygun korumaları yerine
koymalısınız.
Sayfa yükleme sırasında üst sanal alan köprüsüne erişme
Alt belgedeki komut dosyasının bir üst sanal alan köprüsüne erişmesi için, köprü komut dosyası çalıştırılmadan
kurulmalıdır. Yeni bir sayfa DOM'u oluşturulduğunda, ancak herhangi bir komut dosyası ayrıştırılmadan veya DOM
öğeleri eklenmeden pencere, kare ve iframe bir dominitialize olayı gönderir. Sayfa yapım sırasında, köprüyü alt
belgedeki tüm komut dosyalarının erişebileceği kadar erken oluşturmak için dominitialize olayını kullanabilirsiniz.
Aşağıdaki örnek, alt kareden gönderilen dominitialize olayına karşılık olarak üst sanal alan köprüsünün nasıl
oluşturulacağını gösterir:
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 240
HTML ve JavaScript'te programlama
<html>
<head>
<script>
var bridgeInterface = {};
bridgeInterface.testProperty = "Bridge engaged";
function engageBridge(){
document.getElementById("sandbox").contentWindow.parentSandboxBridge = bridgeInterface;
}
</script>
</head>
<body>
<iframe id="sandbox"
src="http://www.example.com/air/child.html"
documentRoot="app:/"
sandboxRoot="http://www.example.com/air/"
ondominitialize="engageBridge()"/>
</body>
</html>
Aşağıdaki child.html belgesi, alt içeriğin üst sanal alan köprüsüne nasıl erişebileceğini gösterir:
<html>
<head>
<script>
document.write(window.parentSandboxBridge.testProperty);
</script>
</head>
<body></body>
</html>
Kare yerine alt penceredeki dominitialize olayını dinlemek için dinleyiciyi window.open() işleviyle oluşturulan
yeni alt window nesnesine eklemelisiniz:
var childWindow = window.open();
childWindow.addEventListener("dominitialize", engageBridge());
childWindow.document.location = "http://www.example.com/air/child.html";
Bu durumda, uygulama içeriğini uygulama dışı bir sanal alana eşlemenin yolu yoktur. Bu teknik, yalnızca child.html
öğesi uygulama dizininin dışından yüklendiğinde kullanışlıdır. Yine de penceredeki uygulama içeriğini uygulama dışı
bir sanal alana eşleyebilirsiniz, ancak öncesinde alt belgeyi yüklemek ve bunu istenen sanal alana eşlemek için kendisi
çerçeveler kullanan bir ara sayfa yüklemelisiniz.
Pencere oluşturmak için HTMLLoader sınıfının createRootWindow() işlevini kullandığınızda, yeni pencere
createRootWindow() öğesinin çağrıldığı kaynak belgenin alt öğesi değildir.. Bu nedenle, çağıran pencere ve yeni
pencereye yüklenen uygulama dışı içerik arasında sanal alan köprüsü oluşturamazsınız. Bunun yerine, alt belgeyi
yüklemek için kendisi çerçeveler kullanan yeni pencereye bir ara pencere yükleme işlevini kullanmalısınız. Yeni
pencerenin üst belgesi ve kareye yüklenen alt belge arasında köprü oluşturabilirsiniz.
241
Bölüm 22: HTML ile ilgili olayları işleme
Olay işleme sistemi, programcıların kullanıcı girişlerine ve sistem olaylarına pratik bir şekilde yanıt vermesini sağlar.
Adobe® AIR™ olay modeli hem pratik, hem de standartlara uygundur. Belge Nesnesi Modeli (DOM) Düzey 3 Olaylar
Tanımlaması'na dayalı olarak, endüstri standartlarında bir olay işleme mimarisi olan olay modeli, programcılara güçlü
ve sezgisel bir olay işleme aracı sunar.
HTMLLoader olayları
HTMLLoader nesnesi aşağıdaki Adobe® ActionScript® 3.0 olaylarını gönderir:
Olay
Açıklama
htmlDOMInitialize
HTML belgesi oluşturulduğunda, ancak herhangi bir komut ayrıştırılmadan veya DOM
düğümleri sayfaya eklenmeden gönderilir.
complete
HTML sayfasındaki onload olayından hemen sonra, HTML DOM bir yükleme işlemine
yanıt olarak yaratıldığında gönderilir.
htmlBoundsChanged
contentWidth ve contentHeight özelliklerinden biri veya her ikisi de değiştiğinde
gönderilir.
locationChange
HTMLLoader öğesinin konum özelliği değiştiğinde gönderilir.
scroll
HTML motoru kaydırma konumunu her değiştirdiğinde gönderilir. Scroll olaylarının
nedeni sayfadaki çapa linklerinde (# linkleri) gezinme veya window.scrollTo()
yöntemine yapılan çağrılar olabilir. Bir metin girişine veya metin alanına metin girmek
de scroll olayına neden olabilir.
uncaughtScriptException
HTMLLoader öğesinde bir JavaScript istisnası oluştuğunda ve istisna JavaScript
kodunda yakalanmadığında gönderilir.
Bir ActionScript işlevini JavaScript olayı için de kaydedebilirsiniz (onClick gibi). Ayrıntılar için bkz. “DOM olaylarını
ActionScript ile işleme” sayfa 241.
DOM olaylarını ActionScript ile işleme
ActionScript işlevlerini JavaScript olaylarına yanıt vermesi için kaydedebilirsiniz. Örneğin aşağıdaki HTML içeriğini
düşünün:
<html>
<body>
<a href="#" id="testLink">Click me.</a>
</html>
Bir ActionScript işlevini sayfadaki herhangi bir olay için işleyici olarak kaydedebilirsiniz. Örneğin aşağıdaki kod
clickHandler() işlevini, HTML sayfasındaki testLink öğesinin onclick olayının dinleyicisi olarak ekler:
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 242
HTML ile ilgili olayları işleme
var html:HTMLLoader = new HTMLLoader( );
var urlReq:URLRequest = new URLRequest("test.html");
html.load(urlReq);
html.addEventListener(Event.COMPLETE, completeHandler);
function completeHandler(event:Event):void {
html.window.document.getElementById("testLink").onclick = clickHandler;
}
function clickHandler():void {
trace("You clicked it!");
}
Bu olaylar için kayıt yaparken addEventListener() yöntemini de kullanabilirsiniz. Örneğin önceki örnekteki
completeHandler() yöntemini aşağıdaki kodla değiştirebilirsiniz:
function completeHandler(event:Event):void {
var testLink:Object = html.window.document.getElementById("testLink");
testLink.addEventListener("click", clickHandler);
}
Bir dinleyici belirli bir DOM öğesine başvurduğunda, olay dinleyicilerini eklemeden önce HTMLLoader üst öğesinin
complete olayını göndermesini beklemek yerinde bir uygulama olur. HTML sayfaları genellikle birden çok dosya
yükler ve tüm dosyalar yüklenip ayrıştırılana kadar HTML DOM tamamen oluşturulmaz. Tüm öğeler
oluşturulduğunda, HTMLLoader complete olayını gönderir.
Yakalanmayan JavaScript istisnalarına yanıt verme
Aşağıdaki HTML'ye bakın:
<html>
<head>
<script>
function throwError() {
var x = 400 * melbaToast;
}
</script>
</head>
<body>
<a href="#" onclick="throwError()">Click me.</a>
</html>
melbaToast adlı bilinmeyen değişkene başvuran throwError() JavaScript işlevini içerir:
var x = 400 * melbaToast;
JavaScript işlemi, JavaScript kodunda try/catch yapısıyla yakalanmayan geçersiz bir işlemle karşılaştığında, sayfayı
içeren HTMLLoader nesnesi bir HTMLUncaughtScriptExceptionEvent olayı gönderir. Aşağıdaki kodda olduğu gibi,
bu olay için bir işleyici kaydedebilirsiniz:
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 243
HTML ile ilgili olayları işleme
var html:HTMLLoader = new HTMLLoader();
var urlReq:URLRequest = new URLRequest("test.html");
html.load(urlReq);
html.width = container.width;
html.height = container.height;
container.addChild(html);
html.addEventListener(HTMLUncaughtScriptExceptionEvent.UNCAUGHT_SCRIPT_EXCEPTION,
htmlErrorHandler);
function htmlErrorHandler(event:HTMLUncaughtJavaScriptExceptionEvent):void
{
event.preventDefault();
trace("exceptionValue:", event.exceptionValue)
for (var i:int = 0; i < event.stackTrace.length; i++)
{
trace("sourceURL:", event.stackTrace[i].sourceURL);
trace("line:", event.stackTrace[i].line);
trace("function:", event.stackTrace[i].functionName);
}
}
JavaScript'in içinde, window.htmlLoader özelliğini kullanarak aynı olayı işleyebilirsiniz:
<html>
<head>
<script language="javascript" type="text/javascript" src="AIRAliases.js"></script>
<script>
function throwError() {
var x = 400 * melbaToast;
}
function htmlErrorHandler(event) {
event.preventDefault();
var message = "exceptionValue:" + event.exceptionValue + "\n";
for (var i = 0; i < event.stackTrace.length; i++){
message += "sourceURL:" + event.stackTrace[i].sourceURL +"\n";
message += "line:" + event.stackTrace[i].line +"\n";
message += "function:" + event.stackTrace[i].functionName + "\n";
}
alert(message);
}
window.htmlLoader.addEventListener("uncaughtScriptException", htmlErrorHandler);
</script>
</head>
<body>
<a href="#" onclick="throwError()">Click me.</a>
</html>
htmlErrorHandler() olay işleyicisi, olayın varsayılan davranışını (JavaScript hata mesajını AIR izleme çıktısına
göndermeyi) iptal eder ve kendi çıktı mesajını oluşturur. HTMLUncaughtScriptExceptionEvent nesnesinin
exceptionValue öğesinin değerini çıkarır. stackTrace dizisindeki her bir nesnenin özelliklerini çıkarır:
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 244
HTML ile ilgili olayları işleme
exceptionValue: ReferenceError: Can't find variable: melbaToast
sourceURL: app:/test.html
line: 5
function: throwError
sourceURL: app:/test.html
line: 10
function: onclick
Çalışma zamanı olaylarını JavaScript'le işleme
runtime sınıfları, addEventListener() yöntemiyle olay işleyicileri eklemeyi destekler. Bir olay için işleyici işlevi
eklemek üzere, olay türünü ve işleme işlevini sağlayarak olayı gönderen nesnenin addEventListener() yöntemini
çağırın. Örneğin kullanıcı başlık çubuğunda pencereyi kapatma düğmesini tıkladığında gönderilen closing olayını
dinlemek için, aşağıdaki ifadeyi kullanın:
window.nativeWindow.addEventListener(air.NativeWindow.CLOSING, handleWindowClosing);
Olay işleyici işlevi yaratma
Aşağıdaki kod, ana pencerenin konumu hakkında bilgi görüntüleyen basit bir HTML dosyası oluşturur.
moveHandler() adlı bir işleyici işlevi, ana pencerenin move olayını dinler (NativeWindowBoundsEvent sınıfı
tarafından tanımlanan).
<html>
<script src="AIRAliases.js" />
<script>
function init() {
writeValues();
window.nativeWindow.addEventListener(air.NativeWindowBoundsEvent.MOVE,
moveHandler);
}
function writeValues() {
document.getElementById("xText").value = window.nativeWindow.x;
document.getElementById("yText").value = window.nativeWindow.y;
}
function moveHandler(event) {
air.trace(event.type); // move
writeValues();
}
</script>
<body onload="init()" />
<table>
<tr>
<td>Window X:</td>
<td><textarea id="xText"></textarea></td>
</tr>
<tr>
<td>Window Y:</td>
<td><textarea id="yText"></textarea></td>
</tr>
</table>
</body>
</html>
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 245
HTML ile ilgili olayları işleme
Bir kullanıcı pencereyi taşıdığında, metin alanı öğeleri pencerenin güncellenen X ve Y konumlarını görüntüler.
Olay nesnesinin bir argüman olarak moveHandler() yöntemine iletildiğine dikkat edin. Olay parametresi işleyici
işlevinizin olay nesnesini incelemesini sağlar. Bu örnekte olay nesnesinin type özelliğini, olayın bir move olayı
olduğunu bildirmek için kullanırsınız.
Olay dinleyicilerini kaldırma
Artık ihtiyacınız olmayan bir olay dinleyicisini kaldırmak için removeEventListener() yöntemini kullanabilirsiniz.
Artık kullanılmayacak olan olay dinleyicilerinin tümünü kaldırmak yararlı olacaktır. Gerekli parametreler eventName
ve listener parametreleridir, bunlar addEventListener() yöntemi için gereken parametrelerle aynıdır.
Gezinilen HTML sayfalarındaki olay dinleyicilerini kaldırma
HTML içeriği gezindiğinde veya içeriğe sahip pencere kapatıldığı için HTML içeriği atıldığında, boşaltılan sayfadaki
nesnelere başvuran olay dinleyicileri otomatik olarak kaldırılmaz. Bir nesne, işleyiciye önceden boşaltılmış bir olay
gönderdiğinde, şu hata mesajını görürsünüz: "Uygulama, artık yüklü olmayan bir HTML sayfasındaki JavaScript
nesnesine başvurma girişiminde bulundu." (The application attempted to reference a JavaScript object in an HTML
page that is no longer loaded.)
Bu hatayı önlemek için, atılmadan önce HTML sayfasındaki JavaScript olay dinleyicilerini kaldırın. Sayfa gezinmesi
durumunda (HTMLLoader nesnesinin içinde), window nesnesinin unload olayı sırasında olay dinleyicisini kaldırın.
Örneğin aşağıdaki JavaScript kodu, uncaughtScriptException olayı için bir olay dinleyicisini kaldırır:
window.onunload = cleanup;
window.htmlLoader.addEventListener('uncaughtScriptException', uncaughtScriptException);
function cleanup()
{
window.htmlLoader.removeEventListener('uncaughtScriptException',
uncaughtScriptExceptionHandler);
}
HTML içeriğine sahip pencereler kapatılırken hata oluşmasını önlemek için, NativeWindow nesnesinin
(window.nativeWindow) closing olayına yanıt olarak bir temizleme işlevi çağırın. Örneğin aşağıdaki JavaScript
kodu, uncaughtScriptException olayı için bir olay dinleyicisini kaldırır:
window.nativeWindow.addEventListener(air.Event.CLOSING, cleanup);
function cleanup()
{
window.htmlLoader.removeEventListener('uncaughtScriptException',
uncaughtScriptExceptionHandler);
}
Ayrıca bir olay dinleyicisini çalışır çalışmaz kaldırarak da bu hatanın oluşmasını önleyebilirsiniz. Örneğin aşağıdaki
JavaScript kodu, HTMLLoader nesnesinin createRootWindow() yöntemini çağırarak bir html penceresi oluşturur ve
complete olayı için bir olay dinleyicisi ekler. complete olay işleyicisi çağrıldığında, removeEventListener() işlevini
kullanarak kendi olay dinleyicisini kaldırır:
var html = runtime.flash.html.HTMLLoader.createRootWindow(true);
html.addEventListener('complete', htmlCompleteListener);
function htmlCompleteListener()
{
html.removeEventListener(complete, arguments.callee)
// handler code..
}
html.load(new runtime.flash.net.URLRequest("second.html"));
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 246
HTML ile ilgili olayları işleme
Gerekmeyen olay dinleyicilerini kaldırmak da sistem çöp toplayıcısının bu dinleyicilerle ilişkilendirilen tüm belleği
geri istemesini sağlar.
Var olan olay dinleyicilerini kontrol etme
hasEventListener() yöntemi sayesinde bir nesnede olay dinleyicisi olup olmadığını kontrol edebilirsiniz.
247
Bölüm 23: HTML Kabı için Komut Dosyası
Oluşturma
HTMLLoader sınıfı, Adobe® AIR™ içindeki HTML içeriği için konteyner olarak görev yapar. Bu sınıf, ActionScript® 3.0
görüntü listesindeki nesnenin davranışı ve görünümünün denetlenmesi için Sprite sınıfından miras alınan birçok
özellik ve yöntem sağlar. Sınıf ayrıca, HTML içeriğinin yüklenmesi, HTML içeriğiyle etkileşim kurulması ve geçmişin
yönetilmesi gibi görevlere ilişkin özellikleri ve yöntemleri tanımlar.
HTMLHost sınıfı, HTMLLoader için bir dizi varsayılan davranış tanımlar. HTMLLoader nesnesini
oluşturduğunuzda, HTMLHost uygulaması sağlanmaz. Bu nedenle HTML içeriği pencere konumunun veya pencere
başlığının değiştirilmesi gibi varsayılan davranışlardan birini tetiklediğinde, hiçbir şey gerçekleşmez. Uygulamanız
için istenen davranışları tanımlamak için HTMLHost sınıfını genişletebilirsiniz.
AIR tarafından oluşturulan HTML pencereleri için varsayılan bir HTMLHost uygulaması sağlanmıştır. True olarak
ayarlanmış defaultBehavior parametresiyle oluşturulan yeni HTMLHost nesnesini kullanarak nesnenin htmlHost
özelliğini ayarlama yoluyla, varsayılan HTMLHost uygulamasını başka bir HTMLLoader nesnesine atayabilirsiniz.
HTMLLoader nesnelerinin görüntü özellikleri
HTMLLoader nesnesi, Adobe® Flash® Player Sprite sınıfının görüntü özelliklerini miras alır. Örneğin arka plan rengini
değiştirebilir, yeniden boyutlandırabilir, taşıyabilir ve gizleyebilirsiniz. Veya filtreler, maskeler, ölçeklendirme ve
döndürme gibi gelişmiş efektler uygulayabilirsiniz. Efektleri uygularken, okunaklılık üzerindeki etkilerini göz önüne
alın. HTML sayfasına yüklenen SWF ve PDF içeriği, bazı efektler uygulandığında görüntülenemez.
HTML pencereleri, HTML içeriğini oluşturan bir HTMLLoader nesnesi içerir. Bu nesne pencere alanı içinde
sınırlanmıştır, bu nedenle boyut, konum, döndürme veya ölçek faktörünün değiştirilmesi her zaman istenen sonuçları
vermez.
Temel görüntü özellikleri
HTMLLoader nesnesinin temel görüntü özellikleri, boyutu ayarlamak ve denetimi göstermek veya gizlemek için üst
display nesnesi içinde denetimi konumlandırmanıza olanak verir. HTML penceresinin HTMLLoader nesnesi için bu
özellikleri değiştirmemelisiniz.
Temel özellikler:
Özellik
Notlar
x, y
Nesneyi üst kabı içinde.
width, height
Görüntü alanının boyutlarını değiştirir.
visible
Nesnenin ve sahip olduğu tüm içeriğin görünürlüğünü denetler.
HTML penceresi dışında, HTMLLoader nesnesinin width ve height özellikleri varsayılan olarak 0'dır. Yüklenen
HTML içeriği görünür olmadan önce genişlik ve yüksekliği ayarlamalısınız. HTML içeriği HTMLLoader boyutuna
çizilir, içerikteki HTML ve CSS özelliklerine göre şekillendirilir. HTMLLoader boyutunun değiştirilmesi içeriği
yeniden akıtır.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 248
HTML Kabı için Komut Dosyası Oluşturma
Yeni bir HTMLLoader nesnesine (halen 0 olarak ayarlanmış width içeren) içerik yüklerken HTMLLoader görüntü
width ve height özelliklerini contentWidth ve contentHeight özelliklerini kullanarak ayarlamak size uygun
gelebilir. Bu teknik, HTML ve CSS akış kurallarına göre şekillendirildiğinde belirli bir minimum genişliğe sahip olan
sayfalar için çalışır. Ancak, bazı sayfalar HTMLLoader tarafından sağlanan belirli bir genişlik olmadığında uzun ve dar
bir mizanpajın içine akar.
Not: HTMLLoader nesnesinin genişliğini ve yüksekliğini değiştirdiğinizde, scaleX ve scaleY değerleri diğer birçok display
nesnesindekinin aksine değişmez.
HTMLLoader içeriğinin şeffaflığı
HTMLLoader nesnesinin varsayılan olarak true olan paintsDefaultBackground özelliği HTMLLoader nesnesinin
opak bir arka plan çizip çizmeyeceğini belirler. paintsDefaultBackground öğesi false olduğunda, arka plan boştur.
Display nesnesi konteyneri veya HTMLLoader nesnesinin altındaki diğer display nesneleri, HTML içeriğinin ön plan
öğelerinin arkasında görünür.
HTML belgesinin gövde öğesi veya diğer öğelerinden biri bir arka plan rengi belirlediğinde (örneğin,
style="background-color:gray"), HTML'in bu bölümünün arka plan rengi opaktır ve belirlenen arka plan
rengiyle oluşturulur. HTMLLoader nesnesinin opaqueBackground özelliğini ayarladığınızda ve
paintsDefaultBackground öğesi false olduğunda, opaqueBackground renk kümesi görünür.
Not: HTML belgesindeki öğe için alfa harmanlamalı bir arka plan sağlamak için şeffaf, PNG formatonda bir grafik
kullanabilirsiniz. HTML öğesinin opaklık stilini ayarlama desteklenmez.
HTMLLoader içeriğini ölçekleme
HTMLLoader nesnesini 1.0 dışında bir ölçek faktörüyle ölçeklemekten kaçının. HTMLLoader içeriğindeki metin
belirli bir çözünürlükte oluşturulur ve HTMLLoader nesnesi ölçeklendiğinde pikseller halinde görünebilir. Pencere
yeniden boyutlandırıldığında HTMLLoader nesnesi ve içeriğinin ölçeklenmesini engellemek için Sahne'nin
scaleMode özelliğini StageScaleMode.NO_SCALE olarak ayarlayın.
HTML sayfasına SWF ve PDF içeriği yüklenirken dikkate alınması gerekenler
HTMLLoader nesnesine yüklenen SWF ve PDF içeriği aşağıdaki koşullarda kaybolur:
• HTMLLoader nesnesini 1.0 dışında bir faktöre ölçeklerseniz.
• HTMLLoader nesnesinin alfa özelliğini 1.0 dışında bir değere ayarlarsanız.
• HTMLLoader içeriğini döndürürseniz.
Sorunlu özellik ayarını ve etkin filtreleri kaldırdığınızda içerik yeniden görünüz.
Not: Çalışma zamanı şeffaf pencerelerde SWF veya PDF içeriğini görüntüleyemez.
HTMLLoader nesnesinde bu tür ortamların yüklenmesi hakkında daha fazla bilgi için bkz. “SWF içeriğini HTML'e
gömme” sayfa 233 ve “PDF içeriği ekleme” sayfa 261.
Gelişmiş görüntü özellikleri
HTMLLoader sınıfı, özel efektler için kullanılabilecek birçok yöntemi miras alır. Bu efektler HTMLLoader
görüntüsüyle kullanıldıklarında genellikle sınırlamalar içerir, ancak geçişler veya diğer geçici efektler için kullanışlı
olabilir. Örneğin, kullanıcı girdisi toplamak için bir iletişim penceresi görüntülediğinizde, kullanıcı iletişim kutusunu
kapatana kadar ana pencere görüntüsünü bulanıklaştırabilirsiniz. Benzer şekilde, bir pencereyi kapatırken
görüntünün yavaşça kapanmasını sağlayabilirsiniz.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 249
HTML Kabı için Komut Dosyası Oluşturma
Gelişmiş görüntü özellikleri şunları içerir:
Özellik
Sınırlamalar
alpha
HTML içeriğinin okunaklılığını azaltabilir
filters
HTML penceresinde, dış efektler pencere kenarı tarafından kesilir.
graphics
Varsayılan arka plan dahil grafik komutlarıyla çizilen şekiller HTML içeriğinin
altında görünür. Çizilen şekillerin görünür olması için
paintsDefaultBackground özelliği false olmalıdır.
opaqueBackground
Varsayılan arka planın rengini değiştirmez. Bu renk katmanının görünür olması
için paintsDefaultBackground özelliği false olmalıdır.
rotation
Dikdörtgen HTMLLoader alanının köşeleri pencere kenarı tarafından
kesilebilir. HTML içeriğine yüklenen SWF ve PDF içeriği görüntülenmez.
scaleX, scaleY
Oluşturulan görüntü, 1'den büyük ölçek faktörlerinde pikseller halinde
görünebilir. HTML içeriğine yüklenen SWF ve PDF içeriği görüntülenmez.
transform
HTML içeriğinin okunaklılığını azaltabilir. HTML görüntüsü pencere kenarı
tarafından kesilebilir. Dönüştürme döndürme, ölçekleme veya eğriltme
içeriyorsa, HTML içeriğine yüklenen SWF ve PDF içeriği görüntülenmez.
Aşağıdaki örnek, tüm HTML görüntüsünü bulanıklaştırmak için filters dizisinin nasıl ayarlanacağını gösterir:
var html:HTMLLoader = new HTMLLoader();
var urlReq:URLRequest = new URLRequest("http://www.adobe.com/");
html.load(urlReq);
html.width = 800;
html.height = 600;
var blur:BlurFilter = new BlurFilter(8);
var filters:Array = [blur];
html.filters = filters;
HTML içeriğini kaydırma
HTMLLoader sınıfı, HTML içeriği kaydırmayı denetlemenizi sağlayan aşağıdaki özellikleri içerir:
Özellik
Açıklama
contentHeight
HTML içeriğinin piksel cinsinden yüksekliği.
contentWidth
HTML içeriğinin piksel cinsinden genişliği.
scrollH
HTMLLoader nesnesinde HTML içeriğinin yatay kaydırma konumu.
scrollV
HTMLLoader nesnesinde HTML içeriğinin dikey kaydırma konumu.
Aşağıdaki kod, scrollV özelliğini HTML içeriğinin sayfanın altına kaydırılacağı şekilde ayarlar.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 250
HTML Kabı için Komut Dosyası Oluşturma
var html:HTMLLoader = new HTMLLoader();
html.addEventListener(Event.HTML_BOUNDS_CHANGE, scrollHTML);
const SIZE:Number = 600;
html.width = SIZE;
html.height = SIZE;
var urlReq:URLRequest = new URLRequest("http://www.adobe.com");
html.load(urlReq);
this.addChild(html);
function scrollHTML(event:Event):void
{
html.scrollV = html.contentHeight - SIZE;
}
HTMLLoader, yatay ve dikey kaydırma çubukları içermez. Kaydırma çubuklarını ActionScript'te uygulayabilirsiniz.
Kaydırma çubuklarına sahip bir HTMLLoader nesnesi içeren bir pencere oluşturmak için
HTMLLoader.createRootWindow() yöntemini de kullanabilirsiniz (bkz. “HTML içeriğini kaydırarak pencereler
oluşturma” sayfa 259).
HTML geçmiş listesine erişme
HTMLLoader nesnesine yeni sayfalar yüklendiğinde, çalışma zamanı nesneye ilişkin bir geçmiş listesi tutar. Geçmiş
listesi, HTML sayfasındaki window.history nesnesine karşılık gelir. HTMLLoader nesnesi HTML geçmiş listesiyle
çalışmanızı sağlayan aşağıdaki özellikler ve yöntemleri içerir:
Sınıf üyesi
Açıklama
historyLength
Geri ve ileri girişler dahil, geçmiş listesinin tam uzunluğu.
historyPosition
Geçmiş listesindeki geçerli konum. Bu konumun önündeki geçmiş öğeleri “geri” gezinmeyi, arkasındaki öğeler
“ileri” gezinmeyi temsil eder.
getHistoryAt()
Geçmiş listesinde belirtilen konumdaki geçmiş girişine karşılık gelen URLRequest nesnesini döndürür.
historyBack()
Mümkinse geçmiş listesinde geriye doğru gezinir.
historyForward()
Mümkünse geçmiş listesinde ileriye doğru gezinir.
historyGo()
Tarayıcı geçmişinde belirtilen adım sayısı kadar gezinir. Pozitifse ileriye, negatifse geriye doğru gezinir. Sıfıra
doğru gezinme, sayfayı yeniden yükler. Liste sonunun ardındaki bir konum belirtildiğinde, listenin sonuna
gider.
Geçmiş listesindeki öğeler, HistoryListItem türünde nesneler olarak saklanır. HistoryListItem sınıfı, aşağıdaki
özelliklere sahiptir:
Özellik
Açıklama
isPost
HTML sayfası POST verileri içeriyorsa true olarak ayarlanır.
originalUrl
HTML sayfasının tüm yeniden yönlendirmelerden önceki orijinal URL'si.
title
HTML sayfasının başlığı.
url
HTML sayfasının URL'si.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 251
HTML Kabı için Komut Dosyası Oluşturma
HTML içeriği yüklenirken kullanılan kullanıcı aracısını
ayarlama
HTMLLoader sınıfı, HTMLLoader tarafından kullanılan kullanıcı aracısı dizesini ayarlamanızı sağlayan userAgent
özelliğini içerir. load() yöntemini çağırmadan önce HTMLLoader nesnesinin userAgent özelliğini ayarlayın.
HTMLLoader nesnesinde bu özelliği ayarladığınızda, load() yöntemine iletilen URLRequest öğesinin userAgent
özelliği kullanılmaz.
Bir uygulama etki alanındaki tüm HTMLLoader nesneleri tarafından kullanılan varsayılan kullanıcı aracısını
URLRequestDefaults.userAgent özelliğini kullanarak ayarlayabilirsiniz. Statik URLRequestDefaults özellikleri,
yalnızca HTMLLoader nesnelerinin load() yöntemiyle kullanılan URLRequest nesneleri için değil, tüm URLRequest
nesneleri için varsayılan olarak geçerlidir. HTMLLoader nesnesinin userAgent özelliğinin ayarlanması, varsayılan
URLRequestDefaults.userAgent ayarını geçersiz kılar.
HTMLLoader nesnesinin userAgent özelliği veya URLRequestDefaults.userAgent için kullanıcı aracı değeri
ayarlamazsanız, varsayılan AIR kullanıcı aracı değeri kullanılır. Bu varsayılan değer, aşağıdaki iki örnekte olduğu gibi
çalışma zamanı işletim sistemine (Mac OS veya Windows gibi), çalışma zamanı diline ve çalışma zamanı sürümüne
bağlı olarak değişir:
•
"Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko)
AdobeAIR/1.0"
•
"Mozilla/5.0 (Windows; U; en) AppleWebKit/420+ (KHTML, like Gecko) AdobeAIR/1.0"
HTML içeriğinde kullanım için karakter kodlamasını
ayarlama
HTML sayfası, aşağıdaki şekilde meta etiketini dahil ederek kullandığı karakter kodlamasını belirleyebilir:
meta http-equiv="content-type" content="text/html" charset="ISO-8859-1";
HTMLLoader nesnesinin textEncodingOverride özelliğini ayarlayarak belirli bir karakter kodlamasının
kullanılmasını sağlamak için sayfa ayarını geçersiz kılın:
var html:HTMLLoader = new HTMLLoader();
html.textEncodingOverride = "ISO-8859-1";
HTML sayfası, HTMLLoader nesnesinin textEncodingFallback özelliğini içeren bir ayar belirtmediğinde
kullanılacak HTMLLoader içeriğine ilişkin karakter kodlamasını belirleyin:
var html:HTMLLoader = new HTMLLoader();
html.textEncodingFallback = "ISO-8859-1";
textEncodingOverride özelliği, HTML sayfasındaki ayarı geçersiz kılar. Ve textEncodingOverride özelliği ile
HTML sayfasındaki ayar, textEncodingFallback özelliğini geçersiz kılar.
HTML içeriğini yüklemeden önce textEncodingOverride özelliğini veya textEncodingFallback özelliğini
ayarlayın.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 252
HTML Kabı için Komut Dosyası Oluşturma
HTML içeriği için tarayıcı benzeri kullanıcı arabirimleri
tanımlama
JavaScript, HTML içeriğini görüntüleyen pencerenin denetlenmesi için birkaç çeşitli API'ler sağlar. Bu API'ler, AIR'de
özel bir HTMLHost sınıfının uygulanmasıyla geçersiz kılınabilir.
HTMLHost sınıfının genişletilmesi hakkında
Örneğin, uygulamanız sekmeli arabirimde birden çok HTMLLoader nesnesi sunuyorsa, ana pencere başlığını değil,
sekmenin etiketini değiştirmek için yüklenen HTML sayfaları tarafından başlık değişikliklerinin yapılmasını
isteyebilirsiniz. Benzer şekilde kodunuz üst görüntüleme nesnesi konteynerindeki HTMLLoader nesnesini yeniden
konumlandırarak, HTMLLoader nesnesini içeren pencereyi taşıyarak, hiçbir şey yapmayarak veya tamamen farklı bir
şey yaparak bir window.moveTo() çağrısına yanıt verebilir.
AIR HTMLHost sınıfı, aşağıdaki JavaScript özellikleri ve yöntemlerini denetler:
•
window.status
•
window.document.title
•
window.location
•
window.blur()
•
window.close()
•
window.focus()
•
window.moveBy()
•
window.moveTo()
•
window.open()
•
window.resizeBy()
•
window.resizeTo()
new HTMLLoader() kullanarak bir HTMLLoader nesnesi oluşturduğunuzda, listelenen JavaScript özellikleri ve
yöntemleri etkinleştirilmez. HTMLHost sınıfı, bu JavaScript API'lerinin varsayılan, tarayıcı benzeri bir uygulamasını
sağlar. Davranışı özelleştirmek için ayrıca HTMLHost sınıfını genişletebilirsiniz. Varsayılan davranışı destekleyen bir
HTMLHost nesnesi oluşturmak için HTMLHost yapıcısındaki defaultBehaviors parametresini true olarak
ayarlayın:
var defaultHost:HTMLHost = new HTMLHost(true);
AIR'de HTMLLoader sınıfının createRootWindow() yöntemiyle bir HTML penceresi oluşturduğunuzda, varsayılan
davranışları destekleyen bir HTMLHost örneği otomatik olarak atanır. HTMLLoader nesnesinin htmlHost özelliğine
farklı bir HTMLHost uygulaması atayarak ana bilgisayar nesne davranışını değiştirebilir veya özellikleri tamamen
devre dışı bırakmak için null değerini atayabilirsiniz.
Not: AIR, HTML tabanlı bir AIR uygulaması için oluşturulan ilk pencereye ve JavaScript window.open() yönteminin
varsayılan uygulamasıyla oluşturulan tüm pencerelere varsayılan bir HTMLHost nesnesi atar.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 253
HTML Kabı için Komut Dosyası Oluşturma
Örnek: HTMLHost sınıfını genişletme
Aşağıdaki örnek, HTMLHost sınıfının genişletilmesi yoluyla HTMLLoader nesnesinin kullanıcı arabirimini etkileme
biçiminin nasıl özelleştirildiğini gösterir:
1 AIR için bir Flash dosyası oluşturun. Bu dosyanın document sınıfını CustomHostExample olarak ayarlayın ve daha
sonra dosyayı CustomHostExample.fla olarak kaydedin.
2 HTMLHost sınıfını (alt sınıf) genişleten bir sınıf içeren CustomHost.as adlı bir ActionScript dosyası oluşturun. Bu
sınıf, kullanıcı arabirimi ilişkili ayarlardaki değişiklikleri işlemek için yeni sınıfın yöntemlerini geçersiz kılar.
Örneğin, aşağıdaki CustomHost sınıfı window.open() çağrılarına ilişkin davranışları tanımlar ve
window.document.title olarak değişir. window.open() yöntemine yapılan çağrılar HTML sayfasını yeni bir
pencerede açar ve bu pencerenin başlık window.document.title özelliğini (HTML sayfasının <title> öğesi
dahil) olarak ayarlamak üzere değiştirir.
package
{
import
import
import
import
import
import
import
import
import
import
flash.display.StageScaleMode;
flash.display.NativeWindow;
flash.display.NativeWindowInitOptions;
flash.events.Event;
flash.events.NativeWindowBoundsEvent;
flash.geom.Rectangle;
flash.html.HTMLLoader;
flash.html.HTMLHost;
flash.html.HTMLWindowCreateOptions;
flash.text.TextField;
public class CustomHost extends HTMLHost
{
public var statusField:TextField;
public function CustomHost(defaultBehaviors:Boolean=true)
{
super(defaultBehaviors);
}
override public function windowClose():void
{
htmlLoader.stage.nativeWindow.close();
}
override public function createWindow(
windowCreateOptions:HTMLWindowCreateOptions ):HTMLLoader
{
var initOptions:NativeWindowInitOptions = new NativeWindowInitOptions();
var bounds:Rectangle = new Rectangle(windowCreateOptions.x,
windowCreateOptions.y,
windowCreateOptions.width,
windowCreateOptions.height);
var htmlControl:HTMLLoader = HTMLLoader.createRootWindow(true, initOptions,
windowCreateOptions.scrollBarsVisible, bounds);
htmlControl.htmlHost = new HTMLHostImplementation();
if(windowCreateOptions.fullscreen){
htmlControl.stage.displayState =
StageDisplayState.FULL_SCREEN_INTERACTIVE;
}
return htmlControl;
}
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 254
HTML Kabı için Komut Dosyası Oluşturma
override public function updateLocation(locationURL:String):void
{
trace(locationURL);
}
override public function set windowRect(value:Rectangle):void
{
htmlLoader.stage.nativeWindow.bounds = value;
}
override public function updateStatus(status:String):void
{
statusField.text = status;
trace(status);
}
override public function updateTitle(title:String):void
{
htmlLoader.stage.nativeWindow.title = title + "- Example Application";
}
override public function windowBlur():void
{
htmlLoader.alpha = 0.5;
}
override public function windowFocus():void
{
htmlLoader.alpha = 1;
}
}
}
3 Uygulamaya ilişkin document sınıfını içerecek CustomHostExample.as adlı başka bir ActionScript dosyası
oluşturun. Bu sınıf HTMLLoader nesnesini oluşturur ve bu nesnenin host özelliğini önceki adımda tanımlanan
CustomHost sınıfı örneğine ayarlar:
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 255
HTML Kabı için Komut Dosyası Oluşturma
package
{
import
import
import
import
flash.display.Sprite;
flash.html.HTMLLoader;
flash.net.URLRequest;
flash.text.TextField;
public class CustomHostExample extends Sprite
{
function CustomHostExample():void
{
var html:HTMLLoader = new HTMLLoader();
html.width = 550;
html.height = 380;
var host:CustomHost = new CustomHost();
html.htmlHost = host;
var urlReq:URLRequest = new URLRequest("Test.html");
html.load(urlReq);
addChild(html);
var statusTxt:TextField = new TextField();
statusTxt.y = 380;
statusTxt.height = 20;
statusTxt.width = 550;
statusTxt.background = true;
statusTxt.backgroundColor = 0xEEEEEEEE;
addChild(statusTxt);
host.statusField = statusTxt;
}
}
}
Burada açıklanan kodu test etmek için, aşağıdaki içeriğe sahip bir HTML dosyasını uygulama dizinine dahil edin:
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 256
HTML Kabı için Komut Dosyası Oluşturma
<html>
<head>
<title>Test</title>
<script>
function openWindow()
{
document.title = "Test"
window.open('Test.html');
}
</script>
</head>
<body bgColor="#EEEEEE">
<a href="#" onclick="window.open('Test.html')">window.open('Test.html')</a>
<br/><a href="#" onclick="window.document.location='http://www.adobe.com'">
window.document.location = 'http://www.adobe.com'</a>
<br/><a href="#" onclick="window.moveBy(6, 12)">moveBy(6, 12)</a>
<br/><a href="#" onclick="window.close()">window.close()</a>
<br/><a href="#" onclick="window.blur()">window.blur()</a>
<br/><a href="#" onclick="window.focus()">window.focus()</a>
<br/><a href="#" onclick="window.status = new Date().toString()">window.status=new
Date().toString()</a>
</body>
</html>
Window.location özelliğindeki değişiklikleri işleme
HTML sayfasının URL'sindeki değişiklikleri işlemek için locationChange() yöntemini geçersiz kılın. Bir sayfadaki
JavaScript window.location değerini değiştirdiğinde locationChange() yöntemi çağrılır. Aşağıdaki örnek istenen
URL'yi yükler:
override public function updateLocation(locationURL:String):void
{
htmlLoader.load(new URLRequest(locationURL));
}
Not: Geçerli HTMLLoader nesnesine başvurmak için HTMLHost nesnesinin htmlLoader özelliğini kullanabilirsiniz.
window.moveBy(), window.moveTo(), window.resizeTo(), window.resizeBy()
için JavaScript çağrılarını işleme
HTML içeriğinin sınırlarındaki değişiklikleri işlemek için set windowRect() yöntemini geçersiz kılın. Bir sayfadaki
JavaScript window.moveBy(), window.moveTo(), window.resizeTo() veya window.resizeBy() çağırdığında, set
windowRect() yöntemi çağrılır. Aşağıdaki örnek, masaüstü penceresinin sınırlarını günceller:
override public function set windowRect(value:Rectangle):void
{
htmlLoader.stage.nativeWindow.bounds = value;
}
window.open() için JavaScript çağrılarını işleme
window.open() için JavaScript çağrılarını işlemek üzere createWindow() yöntemini geçersiz kılın. createWindow()
yöntemi uygulamaları, yeni bir HTMLLoader nesnesi oluşturmak ve döndürmekle sorumludur. HTMLLoader
nesnesini genellikle yeni bir pencerede görüntülersiniz, ancak pencere oluşturma zorunlu değildir.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 257
HTML Kabı için Komut Dosyası Oluşturma
Aşağıdaki örnek, window ve HTMLLoader nesnesi oluşturmak için HTMLLoader.createRootWindow() kullanan
createWindow() işlevinin nasıl uygulanacağını gösterir. Buna ek olarak, bir NativeWindow nesnesini ayrıca
oluşturabilir ve HTMLLoader nesnesini pencere sahnesine ekleyebilirsiniz.
override public function createWindow(windowCreateOptions:HTMLWindowCreateOptions):HTMLLoader{
var initOptions:NativeWindowInitOptions = new NativeWindowInitOptions();
var bounds:Rectangle = new Rectangle(windowCreateOptions.x, windowCreateOptions.y,
windowCreateOptions.width, windowCreateOptions.height);
var htmlControl:HTMLLoader = HTMLLoader.createRootWindow(true, initOptions,
windowCreateOptions.scrollBarsVisible, bounds);
htmlControl.htmlHost = new HTMLHostImplementation();
if(windowCreateOptions.fullscreen){
htmlControl.stage.displayState = StageDisplayState.FULL_SCREEN_INTERACTIVE;
}
return htmlControl;
}
Not: Bu örnek, window.open() ile oluşturulan tüm yeni pencerelere özel HTMLHost uygulamasını atar. Ayrıca farklı
bir uygulama kullanabilir veya istediğinizde yeni pencereler için htmlHost özelliğini null değerine ayarlayabilirsiniz.
Parametre olarak createWindow() yöntemine iletilen nesne, bir HTMLWindowCreateOptions nesnesidir.
HTMLWindowCreateOptions sınıfı, window.open() çağrısındaki features parametre dizesinde değerleri bildiren
özellikleri içerir:
HTMLWindowCreateOptions
özelliği
window.open() JavaScript
çağrısındaki features dizesinde
karşılık gelen ayar
fullscreen
fullscreen
height
height
locationBarVisible
location
menuBarVisible
menubar
resizeable
resizable
scrollBarsVisible
scrollbars
statusBarVisible
status
toolBarVisible
toolbar
width
width
x
left veya screenX
y
top veya screenY
HTMLLoader sınıfı, özellik dizesinde belirtilebilecek tüm özellikleri uygulamaz. Uygulamanız gerektiğinde kaydırma
çubukları, konum çubukları, menü çubukları, durum çubukları ve araç çubukları sağlamalıdır.
JavaScript window.open() yöntemine ilişkin diğer argümanlar sistem tarafından işlenir. createWindow()
uygulaması, HTMLLoader nesnesine içerik yükleyemez veya pencere başlığını ayarlayamaz.
window.close() için JavaScript çağrılarını işleme
Window.close() yöntemine JavaScript çağrılarını işlemek için windowClose() yöntemini geçersiz kılın. Aşağıdaki
örnek, window.close() yöntemi çağrıldığında masaüstü penceresini kapatır:
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 258
HTML Kabı için Komut Dosyası Oluşturma
override public function windowClose():void
{
htmlLoader.stage.nativeWindow.close();
}
window.close() için JavaScript çağrılarının var olan pencereyi kapatması gerekmez. Örneğin, aşağıdaki örnekte
olduğu gibi pencereyi (başka bir içeriğe sahip olabilir) açık bırakarak görüntü listesinden HTMLLoader nesnesini
kaldırabilirsiniz:
override public function windowClose():void
{
htmlLoader.parent.removeChild(htmlLoader);
}
window.status özelliğindeki değişiklikleri işleme
window.status değerindeki JavaScript değişikliklerini işlemek için updateStatus() yöntemini geçersiz kılın.
Aşağıdaki örnek durum değerini izler:
override public function updateStatus(status:String):void
{
trace(status);
}
İstenen durum dize olarak updateStatus() yöntemine iletilir.
HTMLLoader nesnesi durum çubuğu sağlamaz.
window.document.title özelliğindeki değişiklikleri işleme
window.document.title değerindeki JavaScript değişikliklerini işlemek için updateTitle() yöntemini geçersiz
kılın. Aşağıdaki örnek, pencere başlığını değiştirir ve başlığa "Örnek," dizesini ekler:
override public function updateTitle(title:String):void
{
htmlLoader.stage.nativeWindow.title = title + " - Sample";
}
HTML sayfasında document.title ayarlandığında, istenen başlık dize olarak updateTitle() yöntemine iletilir.
document.title öğesindeki değişiklikler, HTMLLoader nesnesini içeren pencerenin başlığını değiştirmek zorunda
değildir. Örneğin metin alanı gibi başka bir arabirim öğesini değiştirebilirsiniz.
window.blur() ve window.focus() için JavaScript çağrılarını işleme
Aşağıdaki örnekte gösterildiği gibi window.blur() ve window.focus() için JavaScript çağrılarını işlemek için
windowBlur() ve windowFocus() yöntemlerini geçersiz kılın:
override public function windowBlur():void
{
htmlLoader.alpha = 0.5;
}
override public function windowFocus():void
{
htmlLoader.alpha = 1.0;
NativeApplication.nativeApplication.activate(htmlLoader.stage.nativeWindow);
}
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 259
HTML Kabı için Komut Dosyası Oluşturma
Not: AIR, bir pencerenin veya bir uygulamanın devre dışı bırakılması için API sağlamaz.
HTML içeriğini kaydırarak pencereler oluşturma
HTMLLoader sınıfı, bir HTMLLoader nesnesi içeren ve bu pencere için bazı kullanıcı arabirimi ayarları tanımlayan
yeni bir pencere (bir NativeWindow nesnesi tarafından temsil edilen) açmanızı sağlayan,
HTMLLoader.createRootWindow() adında statik bir yöntem içerir. Bu yöntem, kullanıcı arabirimini tanımlamanızı
sağlayan dört parametre içerir:
Parametre
Açıklama
visible
Pencerenin başlangıçta görünür olup olmadığını belirten bir Boolean değeri (true veya false).
windowInitOptions
NativeWindowInitOptions nesnesi. NativeWindowInitOptions sınıfı, NativeWindow nesnesi için aşağıdaki
başlatma seçeneklerini tanımlar: pencerenin küçültülebilir, büyütülebilir veya yeniden boyutlandırılabilir olup
olmadığı, pencerenin sistem kromu veya özel krom içerdiği, pencerenin şeffaf olup olmadığı (sistem kromu
kullanmayan pencereler için) ve pencerenin türü.
scrollBarsVisible
Kaydırma çubuklarının olup olmadığı (true veya false).
bounds
Yeni pencerenin konumunu ve boyutunu tanımlayan bir Rectangle nesnesi.
Örneğin, aşağıdaki kod kaydırma çubukları kullanan HTMLLoader içeriğine sahip bir pencere oluşturmak için
HTMLLoader.createRootWindow() yöntemini kullanır:
var initOptions:NativeWindowInitOptions = new NativeWindowInitOptions();
var bounds:Rectangle = new Rectangle(10, 10, 600, 400);
var html2:HTMLLoader = HTMLLoader.createRootWindow(true, initOptions, true, bounds);
var urlReq2:URLRequest = new URLRequest("http://www.example.com");
html2.load(urlReq2);
html2.stage.nativeWindow.activate();
Not: Doğrudan JavaScript içinde createRootWindow() çağrılarak oluşturulan pencereler açılan HTML penceresinden
bağımsız kalır. Örneğin, JavaScript Window opener ve parent özellikleri null değerindedir. Ancak,
createRootWindow() yöntemini dolaylı olarak createRootWindow() çağıran createWindow() yöntemini geçersiz
kılarak çağırırsanız, opener ve parent açılan HTML penceresine başvurur.
HTMLLoader sınıfının alt sınıflarını oluşturma
Yeni davranışlar oluşturmak için, HTMLLoader sınıfının alt sınıflarını oluşturabilirsiniz. Örneğin, HTMLLoader
olayları için varsayılan olay dinleyicilerini tanımlayan bir alt sınıf oluşturabilirsiniz (HTML oluşturulduğunda veya
kullanıcı bir linki tıklattığında gönderilen olaylar gibi).
Aşağıdaki örnek, JavaScript window.open() yöntemi çağrıldığında normal davranış sağlamak için HTMLHost
sınıfını genişletir. Örnek daha sonra özel HTMLHost uygulama sınıfını kullanan bir HTMLLoader alt sınıfı tanımlar:
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 260
HTML Kabı için Komut Dosyası Oluşturma
package
{
import flash.html.HTMLLoader;
public class MyHTMLHost extends HTMLHost
{
public function MyHTMLHost()
{
super(false);
}
override public function createWindow(opts:HTMLWindowCreateOptions):void
{
var initOptions:NativeWindowInitOptions = new NativeWindowInitOptions();
var bounds:Rectangle = new Rectangle(opts.x, opts.y, opts.width, opts.height);
var html:HTMLLoader = HTMLLoader.createRootWindow(true,
initOptions,
opts.scrollBarsVisible,
bounds);
html.stage.nativeWindow.orderToFront();
return html
}
}
Aşağıdaki örnek, htmlHost özelliğine bir MyHTMLHost nesnesi atayan HTMLLoader sınıfının alt sınıfını tanımlar:
package
{
import flash.html.HTMLLoader;
import MyHTMLHost;
import HTMLLoader;
public class MyHTML extends HTMLLoader
{
public function MyHTML()
{
super();
htmlHost = new MyHTMLHost();
}
}
}
Bu örnekte kullanılan HTMLHost sınıfı ve HTMLLoader.createRootWindow() yöntemine ilişkin ayrıntılar için bkz.
“HTML içeriği için tarayıcı benzeri kullanıcı arabirimleri tanımlama” sayfa 252.
261
Bölüm 24: PDF içeriği ekleme
Adobe® AIR™'de çalışan uygulamalar yalnızca SWF ve HTML içeriği değil, PDF içeriği de oluşturabilir. AIR
uygulamaları, HTMLLoader sınıfını, WebKit motorunu ve Adobe® Reader® tarayıcı eklentisini kullanarak PDF içeriği
oluşturur. AIR uygulamasında, PDF içeriği uygulamanızın tam yükseklik ve genişliğine göre veya alternatif olarak
arabiriminin bir parçası olarak uzayabilir. Adobe Reader tarayıcı eklentisi PDF dosyasının AIR uygulamasındaki
görüntüsünü kontrol eder, böylece Reader araç çubuğu arabiriminde yapılan değişiklikler (konum, tutturma ve
görünürlük gibi) PDF dosyalarının AIR uygulamalarında ve tarayıcıda daha sonra görüntülenmesi için kalıcı duruma
gelir.
Önemli: Kullanıcı, AIR'de PDF içeriği oluşturmak için Adobe Reader ya da Adobe® Acrobat® 8.1 veya daha yeni bir
sürümü yüklemiş olmalıdır.
PDF Özelliklerini Saptama
Kullanıcı Adobe Reader veya Adobe Acrobat 8.1 ya da daha yeni bir sürüme sahip değilse, PDF içeriği AIR
uygulamasında görüntülenmez. Kullanıcının PDF içeriği oluşturup oluşturamayacağını saptamak için ilk önce
HTMLLoader.pdfCapability özelliğini kontrol edin. Bu özellik HTMLPDFCapability sınıfının aşağıdaki
sabitlerinden biri olarak ayarlanır:
Sabit
Açıklama
HTMLPDFCapability.STATUS_OK
Yeterli bir Adobe Reader sürümü (8.1 veya daha yeni) saptandı ve
PDF içeriği bir HTMLLoader nesnesine yüklenebilir.
HTMLPDFCapability.ERROR_INSTALLED_READER_NOT_FOUND
Herhangi bir Adobe Reader sürümü saptanmadı. Bir HTMLLoader
nesnesi PDF içeriğini görüntüleyemez.
HTMLPDFCapability.ERROR_INSTALLED_READER_TOO_OLD
Adobe Reader saptandı, ancak sürüm çok eski. Bir HTMLLoader
nesnesi PDF içeriğini görüntüleyemez.
HTMLPDFCapability.ERROR_PREFERRED_READER_TOO_OLD
Yeterli bir Adobe Reader sürümü (8.1 veya daha yeni) saptandı, ancak
Adobe Reader'ın PDF içeriğini işlemek üzere ayarlanan sürümü
Reader 8.1'den eski. Bir HTMLLoader nesnesi PDF içeriğini
görüntüleyemez.
Windows'ta, kullanıcının sisteminde Adobe Acrobat veya Adobe Reader 7.x ya da daha yeni bir sürüm çalışmaktaysa,
PDF yüklemeyi destekleyen daha yeni bir sürüm yüklenmiş olsa bile bu sürüm kullanılır. Bu durumda,
pdfCampability özelliğinin değeri HTMLPDFCapability.STATUS_OK ise, AIR uygulaması PDF içeriğini yüklemeye
çalışığında daha eski Acrobat veya Reader sürümü bir uyarı görüntüler (ve AIR uygulamasında istisna atılmaz). Bu son
kullanıcılarınız için olası bir durumsa, onlara uygulamanızı çalıştırdıkları sırada Acrobat'ı kapatmalarına ilişkin
talimatlar vermeyi deneyebilirsiniz. PDF içeriği kabul edilebilir bir zaman diliminde yüklenmiyorsa, bu talimatları
görüntülemek isteyebilirsiniz.
Linux'ta, AIR kullanıcının dışa aktardığı PATH içinde (acroread komutunu içeriyorsa) ve /opt/Adobe/Reader
dizininde Adobe Reader'ı arar.
Aşağıdaki kod, kullanıcının PDF içeriğini bir AIR uygulamasında görüntüleyip görüntüleyemeyeceğini belirtir. Eğer
görüntüleyemiyorsa, HTMLPDFCapability hata nesnesine karşılık gelen hata kodunu izler:
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 262
PDF içeriği ekleme
if(HTMLLoader.pdfCapability == HTMLPDFCapability.STATUS_OK)
{
trace("PDF content can be displayed");
}
else
{
trace("PDF cannot be displayed. Error code:", HTMLLoader.pdfCapability);
}
PDF içeriğini yükleme
Bir HTMLLoader örneği oluşturarak, bu örneğin boyutlarını ayarlayarak ve PDF yolunu yükleyerek AIR
uygulamasına bir PDF ekleyebilirsiniz.
Aşağıdaki örnek, harici bir siteden PDF yükler. URLRequest öğesini kullanılabilir harici bir PDF'e giden yolla
değiştirin.
var request:URLRequest = new URLRequest("http://www.example.com/test.pdf");
pdf = new HTMLLoader();
pdf.height = 800;
pdf.width = 600;
pdf.load(request);
container.addChild(pdf);
app ve app-storage gibi dosya URL'leri ve AIR'e özgü URL şemalarından da içerik yükleyebilirsiniz. Örneğin, aşağıdaki
kod uygulama dizininin PDF alt dizinindeki test.pdf dosyasını yükler:
app:/js_api_reference.pdf
AIR URL şemaları hakkında daha fazla bilgi için bkz. “URL'lerde AIR URL şemalarını kullanma” sayfa 293.
Komut dosyası PDF içeriği
PDF içeriğini tarayıcıdaki web sayfasındaki gibi kontrol etmek için JavaScript'i kullanabilirsiniz.
Acrobat'a ilişkin JavaScript geliştirmeleri aşağıdaki ek özellikleri sunar:
• Sayfa gezinmesini denetleme ve büyütme
• Belge içinde formları işleme
• Multimedya olaylarını denetleme
Adobe Acrobat'a yönelik JavaScript geliştirmelerine ilişkin tüm ayrıntılar
http://www.adobe.com/devnet/acrobat/javascript.html linklerindeki Adobe Acrobat Geliştirici Bağlantısı'nda
sunulmuştur.
HTML-PDF iletişim temelleri
HTML sayfasındaki JavaScript, PDF içeriğini temsil eden DOM nesnesinin postMessage() yöntemini çağırarak PDF
içeriğindeki JavaScript'e mesaj gönderebilir. Örneğin, aşağıdaki gömülü PDF içeriğini dikkate alın:
<object id="PDFObj" data="test.pdf" type="application/pdf" width="100%" height="100%"/>
Mevcut HTML içeriğinde aşağıdaki JavaScript kodu, PDF dosyasındaki JavaScript'e bir mesaj gönderir:
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 263
PDF içeriği ekleme
pdfObject = document.getElementById("PDFObj");
pdfObject.postMessage(["testMsg", "hello"]);
PDF dosyası, bu mesajın alınması için JavaScript'i dahil edebilir. Belge, klasör, sayfa, alan düzeyi ve toplu düzey
bağlamları dahil bazı bağlamlardaki PDF dosyalarına JavaScript kodu ekleyebilirsiniz. Burada yalnızca, PDF
dokümanı açıldığında değerlendirilen komut dosyalarını tanımlayan belge düzeyi bağlamı tartışılır.
PDF dosyası hostContainer nesnesine messageHandler özelliğini ekleyebilir. messageHandler özelliği, mesajları
yanıtlamak için işleyici işlevlerini tanımlayan bir nesnedir. Örneğin aşağıdaki kod, PDF dosyası tarafından ana
bilgisayar konteynerinden (PDF dosyasını içeren HTML içeriği) alınan mesajları işlemeye yönelik işlevi tanımlar:
this.hostContainer.messageHandler = {onMessage: myOnMessage};
function myOnMessage(aMessage)
{
if(aMessage[0] == "testMsg")
{
app.alert("Test message: " + aMessage[1]);
}
else
{
app.alert("Error");
}
}
HTML sayfasındaki JavaScript kodu, sayfada yer alan PDF nesnesinin postMessage() yöntemini çağırabilir. Bu
yöntemin çağrılması, PDF dosyasındaki belge düzeyinde JavaScript'e bir mesaj ("Hello from HTML") gönderir:
<html>
<head>
<title>PDF Test</title>
<script>
function init()
{
pdfObject = document.getElementById("PDFObj");
try {
pdfObject.postMessage(["alert", "Hello from HTML"]);
}
catch (e)
{
alert( "Error: \n name = " + e.name + "\n message = " + e.message );
}
}
</script>
</head>
<body onload='init()'>
<object
id="PDFObj"
data="test.pdf"
type="application/pdf"
width="100%" height="100%"/>
</body>
</html>
Daha gelişmiş bir örnek ve JavaScript'e PDF dosyası eklemek üzere Acrobat 8 kullanmaya ilişkin bilgi için bkz. Adobe
AIR'de PDF içeriği için çapraz komut dosyası.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 264
PDF içeriği ekleme
ActionScript'ten PDF içeriği için komut dosyası
ActionScript kodu (SWF içeriğindeki), PDF içeriğindeki JavaScript ile doğrudan iletişim kuramaz. Ancak,
ActionScript PSD içeriğini yükleyen bir HTMLLoader nesnesinde yüklenen HTML sayfasındaki JavaScript ile iletişim
kurabilir ve bu JavaScript kodu, yüklenen PDF sayfasındaki JavaScript ile iletişim kurabilir. Daha fazla bilgi için bkz.
“HTML ve JavaScript'te programlama” sayfa 223.
AIR'de PDF içeriği için bilinen sınırlamalar
Adobe AIR'deki PDF içeriği aşağıdaki sınırlamaları içerir:
• PDF içeriği saydam (transparent özelliğinin true olarak ayarlandığı) bir pencerede (bir NativeWindow nesnesi)
görüntülenemez.
• Bir PDF dosyasının görüntü düzeni, AIR uygulamasındaki diğer display nesnelerinden farklı çalışır. PDF içeriği
HTML görüntü düzenine göre doğru biçimde kesilse de, her zaman AIR uygulamasının görüntü düzenindeki
içeriğin en üstünde bulunacaktır.
• PDF içeriği tam ekran modundaki bir pencerede görüntülenmez (Sahne displayState özelliği
StageDisplayState.FULL_SCREEN veya StageDisplayState.FULL_SCREEN_INTERACTIVE olarak
ayarlandığında).
• PDF belgesi içeren HTMLLoader nesnesinin belirli görsel özellikleri değiştirildiğinde, PDF belgesi görünür
duruma gelir. Bu özellikler filters, alpha, rotation, ve scaling özelliklerini içerir. Bunların değiştirilmesi,
özellikler sıfırlanana kadar PDF dosyasını görünmez duruma getirir. Bu durum, HTMLLoader nesnesi içeren
display nesne konteynerlerinin özelliklerini değiştirdiğinizde de geçerlidir.
• PDF içeriği yalnızca PDF içeriğine sahip NativeWindow nesnesinin Stage nesnesine ilişkin scaleMode özelliği
StageScaleMode.NO_SCALE olarak ayarlandığında görünür. Bunun dışında herhangi bir değere ayarlandığında,
PDF içeriği görünmez.
• PDF dosyası içindeki içerik linklerinin tıklatılması, PDF içeriğinin kaydırma konumunu günceller. PDF dosyasının
dışındaki içerik linklerinin tıklatılması, PDF içeren HTMLLoader nesnesini yeniden yönlendirir (linkin hedefi yeni
bir pencere olsa da).
• PDF yorum oluşturma iş akışları AIR'da çalışmaz.
265
Bölüm 25: Dijital haklar yönetimini
kullanma
Adobe® Flash® Media Rights Management Server (FMRMS), ortam yayıncılarına içeriği, özellikle FLV ve MP4
dosyalarını dağıtma ve kullanıcıları tarafından sağlanan doğrudan (kullanıcı tarafından ödenen) veya dolaylı (reklamla
ödenen) tazminatla üretim maliyetlerini telafi etme olanağı sağlar. Yayıncılar ortamı, Adobe® Media Player™
uygulamasında veya dijital haklar yönetimi (DRM) API'sini kullanan herhangi bir AIR uygulamasında indirilip
oynatılabilen şifreli FLV'ler olarak dağıtır.
İçerik sağlayıcıları FMRMS ile, içeriklerini kullanıcı kimlik bilgileriyle korumak için kimlik tabanlı lisans kullanabilir.
Örneğin bir tüketici televizyon programını izlemek istiyor, ancak beraberindeki reklamları izlemek istemiyor. Tüketici
reklamları izlememek için kaydolur ve içerik yayıncısına bir prim öder. Artık kullanıcı kimlik denetimi bilgilerini
kullanarak, reklamları izlemeden programa erişip programı oynatabilir. Bir başka tüketici de Internet erişimi olmadan
seyahat ederken içeriği çevrimdışı görüntülemek isteyebilir. Kullanıcı kaydolduktan ve içerik yayıncısına öncelikli
hizmet için ödeme yaptıktan sonra, kimlik denetimi bilgileriyle yayıncının web sitesindeki programlara erişip bunları
indirebilir. Böylece kullanıcı, izin verilen süre boyunca içeriği çevrimdışı görüntüleyebilir. İçerik ayrıca kullanıcı
kimlik bilgileriyle korunur ve başka kullanıcılarla paylaşılamaz.
Bir kullanıcı DRM şifreli dosyayı oynatmayı denediğinde, uygulama FMRMS ile iletişime geçer, FMRMS de
kullanıcının kimliğini denetlemek ve lisans almak için hizmet sağlayıcı arabirimi (SPI) üzerinden içerik yayıncısının
sistemiyle iletişime geçer, lisans kullanıcının içeriği erişimi olup olmadığını ve varsa da ne kadar süreyle olduğunu
belirleyen bir makbuzdur. Makbuz ayrıca kullanıcının içeriğe çevrimdışı erişimi olup olmadığını ve varsa ne kadar
süreyle olduğunu da belirler. Bu gibi durumlarda, şifreli içeriğe erişim durumunu belirlemek için kullanıcı kimlik
bilgilerine ihtiyaç duyulur.
Kimlik tabanlı lisans da adsız erişimi destekler. Örneğin adsız erişim sağlayıcı tarafından reklam destekli içeriği
dağıtmak veya geçerli içeriğe belirli bir gün sayısı boyunca ücretsiz erişim vermek için kullanılabilir. Arşiv
malzemeleri, karşılığında ödeme yapılması gereken öncelikli içerik kapsamına giriyor olabilir ve kullanıcı kimlik
bilgileri gerekir. Ayrıca, içerik sağlayıcı, içeriği için gerekli olan oynatıcının türünü ve sürümünü belirtebilir ve
sınırlayabilir.
AIR uygulamanızın dijital haklar yönetimi şifrelemesiyle korunan içeriği oynatmasını nasıl sağlayacağınız burada
anlatılmaktadır. İçeriği DRM kullanarak nasıl şifreleyeceğini anlamanız gerekli değildir, ancak DRM şifreli içeriğe
erişiminiz olduğu ve kullanıcının kimliğini denetlemek ve makbuzu almak için FMRMS ile iletişim kurduğunuz
varsayılır.
Politika oluşturmak da dahil olmak üzere FMRMS'ye genel bakış için, FMRMS'nin beraberindeki belgelere bakın.
Adobe Media Player hakkında bilgi için bkz. Adobe Media Player içinde Adobe Media Player Yardımı.
Dijital haklar yönetimiyle ilgili ek çevrimiçi bilgiler
Bu kaynaklardan dijital haklar yönetimi hakkında daha fazla bilgi edinebilirsiniz:
Dil Başvurusu
• AuthenticationMethod
• DRMAuthenticationCompleteEvent
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 266
Dijital haklar yönetimini kullanma
• DRMAuthenticationErrorEvent
• DRMAuthenticateEvent
• DRMContentData
• DRMErrorEvent
• DRMManager
• DRMPlaybackTimeWindow
• DRMStatusEvent
• DRMVoucher
• LoadVoucherSetting
• NetStream
Adobe Geliştirici Bağlantısı Makaleler ve Örnekler
• Flash için Adobe AIR Geliştirici Bağlantısı ('dijital haklar yönetimi'ni veya 'drm'yi arayın)
Şifreli FLV iş akışını anlama
AIR uygulaması DRM şifreli bir dosyayı oynatma girişiminde bulunduğunda. gönderilebilen dört olay tipi vardır:
StatusEvent, DRMAuthenticateEvent, DRMErrorEvent ve DRMStatusEvent. Bu dosyaları desteklemek için uygulama
DRM olaylarını işleme için olay dinleyicileri eklemelidir.
Aşağıda, AIR uygulamasının DRM şifrelemeyle korunan içeriği nasıl aldığına ve oynattığına ilişkin bir iş akışı
bulunmaktadır:
1 NetStream nesnesi kullanan uygulama FLV veya MP4 dosyası yürütmeye çalışır. İçerik şifreliyse, FLV'nin şifreli
olduğunu belirten DRM.encryptedFLV koduna sahip bir events.StatusEvent olayı gönderilir.
Not: Bir uygulama DRM şifreli dosyayı oynatmak istemezse, şifreli içerikle karşılaştığında gönderilen status olayını
dinleyebilir ve ardından kullanıcıya dosyanın desteklenmediğini bildirip bağlantıyı kapatabilir.
2 Dosya tüm kullanıcıların içeriği kimlik denetim bilgilerini girmeden görüntüleyebileceği şekilde adsız olarak
şifrelenmişse, AIR uygulaması bu iş akışının son adımına geçer. Ancak, dosya kullanıcı kimlik bilgilerinin gerekli
olduğu anlamına gelecek şekilde kimliğe dayalı bir lisans gerektiriyorsa, NetStream nesnesi bir
DRMAuthenticateEvent olayı gönderir. Oynatmanın başlayabilmesi için kullanıcının kimlik denetimi bilgilerini
sağlaması gerekir.
3 AIR uygulaması, gerekli kimlik denetimi bilgilerinin toplanması için bazı mekanizmalar sağlamalıdır.
DRMAuthenticationEvent sınıfının içerik sunucusu tarafından sağlanan usernamePrompt, passwordPrompt ve
urlPrompt özellikleri, son kullanıcıyı hangi verilerin gerekli olduğu konusunda yönlendirmek için kullanılabilir.
Bu özellikleri, gerekli kullanıcı kimlik bilgilerini almak için bir kullanıcı arabirimi oluştururken kullanabilirsiniz.
Örneğin usernamePrompt değer dizesi, kullanıcı adının e-posta adresi biçiminde olması gerektiğini bildirebilir.
Not: AIR, kimlik denetimi bilgilerini toplamak için varsayılan bir kullanıcı arabirimi sağlamaz. Uygulama geliştirici,
kullanıcı arabirimini yazmalı ve DRMAuthenticateEvent olaylarını işlemelidir. Uygulama DRMAuthenticateEvent
nesneleri için bir olay dinleyicisi sağlamazsa, DRM şifreli nesne "waiting for credentials“ (kimlik bilgileri bekleniyor)
durumunda kalır ve içerik kullanılamaz.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 267
Dijital haklar yönetimini kullanma
4 Uygulama kullanıcı kimlik bilgilerini aldıktan sonra, kimlik bilgilerini setDRMAuthenticationCredentials()
yöntemiyle NetStream nesnesine iletir. Bu, NetStream nesnesine, kullanıcının kimliğini bir sonraki fırsatta
denetlemesi gerektiği işaretini verir. Ardından AIR kimlik bilgilerini kimlik denetimi için FMRMS'ye iletir.
Kullanıcının kimlik denetimi başarılıysa, uygulama bir sonraki adıma geçer.
Kimlik denetimi başarısız olduğunda, NetStream nesnesi yeni bir DRMAuthenticateEvent nesnesi gönderir ve
uygulama adım 3'e geri döner. Bu işlem süresiz olarak tekrarlanır. Uygulama, tekrarlanan kimlik denetleme
girişimlerini işlemek ve sınırlamak için bir mekanizma sağlamalıdır. Örneğin uygulama, kullanıcının, NetStream
bağlantısını kapatabilen girişimi iptal etmesine izin verebilir.
5 Kullanıcı kimlik denetimi tamamlandığında veya adsız şifreleme kullanıldığında, DRM alt sistemi makbuzu getirir.
Bu makbuz, kullanıcının içeriği görüntüleme yetkisi olup olmadığını kontrol etmek için kullanılır. Makbuzdaki
bilgiler hem kimlik denetimi yapılmış hem de adsız kullanıcılar için geçerli olabilir. Örneğin hem kimlik denetimi
yapılmış hem de adsız kullanıcıların, içeriğin süresi dolmadan önce belirli bir süre içeriğe erişimi olabilir veya içerik
sağlayıcısı, görüntüleme uygulamasının sürümünü desteklemediği için içeriğe erişimleri olmayabilir.
Hata oluşmadıysa ve kullanıcı içeriği görüntülemek için kimlik denetimini başarıyla tamamladıysa, NetStream nesnesi
bir DRMStatusEvent nesnesi gönderir ve AIR uygulaması oynatmaya başlar. DRMStatusEvent nesnesi ilgili makbuz
bilgilerini saklar, bu bilgiler kullanıcı politika ve izinlerini tanımlar. Örneğin içeriğin, çevrimdışıyken veya makbuzun
süresi dolduğunda ve içerik artık görüntülenemediğinde kullanılabilir olup olamayacağına dair bilgileri saklar.
Uygulama, kullanıcıya politikasının durumunu bildirmek için bu bilgileri kullanabilir. Örneğin uygulama,
kullanıcının içeriği görebileceği kaç günü kaldığını bir durum çubuğunda gösterebilir.
Kullanıcıya çevrimdışı erişim verilirse, makbuz önbelleğe alınır, şifreli içerik kullanıcının bilgisayarına yüklenir ve
çevrimdışı kira süresinde belirtilen süre boyunca kullanılabilir olur. Olaydaki detail özelliği
"DRM.voucherObtained" içerir. Uygulama, çevrimdışıyken de erişebilmesi için içeriğin yerel olarak nerede
saklanacağına karar verir. AIR 1.5'te, DRMManager sınıfını kullanarak makbuzları önceden yükleyebilirsiniz.
DRM'yle ilgili tüm hatalar, uygulamanın bir DRMErrorEvent olay nesnesi göndermesiyle sonuçlanır. AIR, NetStream
setDRMAuthenticationCredentials() yöntemi kullanılırken karşılaşılan kimlik doğrulama hatalarını
DRMAuthenticationEvent nesnesini yeniden gönderme yoluyla işler. Tüm diğer hata olayları uygulama tarafından
açık olarak işlenmelidir. Bunlar arasında, kullanıcının geçerli kimlik bilgilerini girdiği, ancak makbuzun şifreli içeriği
koruyarak içeriğe erişimi kısıtladığı durumlar da bulunmaktadır. Örneğin kimliği denetlenmiş bir kullanıcının, haklar
ödenmediği için içeriğe yine de erişimi olmayabilir. Bu durum ayrıca, aynı ortam yayıncısının kayıtlı üyesi olan iki
kullanıcı, yalnızca birinin ödemesini yaptığı içeriği paylaşma girişiminde bulunduğu zaman da yaşanır. Uygulama
kullanıcıyı içerik kısıtlamaları gibi hatalar hakkında uyarmalıdır, ayrıca içeriği görmek için nasıl kaydolunacağına ve
hakların ödemesinin nasıl yapılacağına ilişkin talimatlar gibi bir alternatif de sağlamalıdır.
Çevrimdışı oynatma için makbuzları önceden yükleme
DRM korumalı içeriği oynatmak için gerekli makbuzları önceden yükleyebilirsiniz. Önceden yüklenen makbuzlar
kullanıcıların etkin Internet bağlantısı olsa da olmasa da içeriği görüntüleyebilmelerini sağlar. (Ön yükleme işleminin
kendisi de bir Internet bağlantısı gerektirir.) Makbuzları önceden yüklemek için NetStream sınıfı
preloadEmbeddedMetadata() yöntemini ve AIR 1.5 DRMManager sınıfını kullanın.
Aşağıdaki adımlar, DRM korumalı bir ortam dosyasına için makbuzu önceden yüklemeye ilişkin iş akışını açıklar:
1 Ortam dosyasını indirin ve saklayın. (DRM meta verileri yalnızca yerel olarak saklanan dosyalardan önceden
yüklenebilir.)
2 NetStream istemci nesnesinin onDRMContentData() ve onPlayStatus() geri çağırma işlevleri için uygulamaları
sağlayarak NetConnection ve NetStream nesnelerini oluşturun.
3 Bir NetStreamPlayOptions nesnesi oluşturun ve stream özelliğini yerel ortam dosyasının URL'sine ayarlayın.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 268
Dijital haklar yönetimini kullanma
4 Ayrıştırılacak ortam dosyasını tanımlayan NetStreamPlayOptions nesnesini aktaran NetStream
preloadEmbeddedMetadata() yöntemini çağırın.
5 Ortam dosyası DRM meta verileri içeriyorsa, onDRMContentData() geri çağırma işlevi çağrılır. Meta veriler bu
işleve bir DRMContentData nesnesi olarak aktarılır.
6 DRMManager loadVoucher() yöntemini kullanarak makbuzu elde etmek için DRMContentData nesnesini
kullanın.
DRMContentData nesnesine ait authenticationMethod özelliğinin değeri userNameAndPassword olduğunda,
makbuzu yüklemeden önce ortam hakları sunucusundaki kullanıcının kimlik doğrulamasını yapmanız gerekir.
DRMContentData nesnesinin serverURL ve domain özellikleri, kullanıcının kimlik bilgileriyle birlikte
DRMManager authenticate() yöntemine aktarılabilir.
7 Dosya ayrıştırma tamamlandığında onPlayStatus() geri çağırma işlevi çağrılır. onDRMContentData() işlevi
çağrılmadıysa, dosya makbuzu almak için gerekli olan meta verileri içermez (ve DRM korumalı olmayabilir).
Aşağıdaki kod örneği, yerel bir ortam dosyası için DRM makbuzunun nasıl önceden yükleneceğini gösterir:
package
{
import flash.display.Sprite;
import flash.events.DRMAuthenticationCompleteEvent;
import flash.events.DRMAuthenticationErrorEvent;
import flash.events.DRMErrorEvent;
import flash.ev ents.DRMStatusEvent;
import flash.events.NetStatusEvent;
import flash.net.NetConnection;
import flash.net.NetStream;
import flash.net.NetStreamPlayOptions;
import flash.net.drm.AuthenticationMethod;
import flash.net.drm.DRMContentData;
import flash.net.drm.DRMManager;
import flash.net.drm.LoadVoucherSetting;
public class DRMPreloader extends Sprite
{
private var videoURL:String = "app-storage:/video.flv";
private var userName:String = "user";
private var password:String = "password";
private var preloadConnection:NetConnection;
private var preloadStream:NetStream;
private var drmManager:DRMManager = DRMManager.getDRMManager();
private var drmContentData:DRMContentData;
public function DRMPreloader():void {
drmManager.addEventListener( DRMAuthenticationCompleteEvent.AUTHENTICATION_COMPLETE,
onAuthenticationComplete );
drmManager.addEventListener(
DRMAuthenticationErrorEvent.AUTHENTICATION_ERROR,onAuthenticationError );
drmManager.addEventListener(DRMStatusEvent.DRM_STATUS, onDRMStatus);
drmManager.addEventListener(DRMErrorEvent.DRM_ERROR, onDRMError);
preloadConnection = new NetConnection();
preloadConnection.addEventListener(NetStatusEvent.NET_STATUS, onConnect);
preloadConnection.connect(null);
}
private function onConnect( event:NetStatusEvent ):void
{
preloadMetadata();
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 269
Dijital haklar yönetimini kullanma
}
private function preloadMetadata():void
{
preloadStream = new NetStream( preloadConnection );
preloadStream.client = this;
var options:NetStreamPlayOptions = new NetStreamPlayOptions();
options.streamName = videoURL;
preloadStream.preloadEmbeddedData( options );
}
public function onDRMContentData( drmMetadata:DRMContentData ):void
{
drmContentData = drmMetadata;
if ( drmMetadata.authenticationMethod == AuthenticationMethod.USERNAME_AND_PASSWORD )
{
authenticateUser();
}
else
{
getVoucher();
}
}
private function getVoucher():void
{
drmManager.loadVoucher( drmContentData, LoadVoucherSetting.ALLOW_SERVER );
}
private function authenticateUser():void
{
drmManager.authenticate( drmContentData.serverURL, drmContentData.domain, userName,
password );
}
private function onAuthenticationError( event:DRMAuthenticationErrorEvent ):void
{
trace( "Authentication error: " + event.errorID + ", " + event.subErrorID );
}
private function onAuthenticationComplete( event:DRMAuthenticationCompleteEvent ):void
{
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 270
Dijital haklar yönetimini kullanma
trace( "Authenticated to: " + event.serverURL + ", domain: " + event.domain );
getVoucher();
}
private function onDRMStatus( event:DRMStatusEvent ):void
{
trace( "DRM Status: " + event.detail);
trace("--Voucher allows offline playback = " + event.isAvailableOffline );
trace("--Voucher already cached
= " + event.isLocal );
trace("--Voucher required authentication = " + !event.isAnonymous );
}
private function onDRMError( event:DRMErrorEvent ):void
{
trace( "DRM error event: " + event.errorID + ", " + event.subErrorID + ", " + event.text );
}
public function onPlayStatus( info:Object ):void
{
preloadStream.close();
}
}
}
NetStream sınıfının DRM ilişkili üyeleri ve olayları
NetStream sınıfı, Flash Player veya bir AIR uygulamasıyla Flash Media Server veya yerel dosya sistemi arasında tek
yönlü bir akış sağlar. (NetStream sınıfı ayrıca aşamalı indirmeyi de destekler.) Bir NetStream nesnesi, NetConnection
nesnesinin içindeki kanaldır. AIR uygulamasında, NetStream sınıfı dört DRM ilişkili olay gönderir:
Olay
Açıklama
drmAuthenticate
DRMAuthenticateEvent sınıfında tanımlı olan bu olay, bir NetStream nesnesi, oynatılması için kullanıcı kimlik
bilgilerinin kimlik denetiminden geçmesi gereken dijital haklar yönetimi (DRM) şifreli içeriğini oynatma
girişiminde bulunduğunda gönderilir.
Bu olayın özellikleri, kullanıcının kimlik bilgilerini almada ve ayarlamada kullanılabilen header,
usernamePrompt, passwordPrompt ve urlPrompt özelliklerini içerir. Bu olay, NetStream nesnesi geçerli
kullanıcı kimlik bilgilerini alana kadar tekrarlanır.
drmError
Bu olay DRMErrorEvent sınıfında tanımlıdır ve dijital haklar yönetimi (DRM) şifreli dosyasını oynatmaya çalışan
bir NetStream nesnesi DRM'yle ilgili bir hatayla karşılaştığında gönderilir. Örneğin DRM error olayı nesnesi,
kullanıcı kimlik denetimi başarısız olduğunda gönderilir. Bunun nedeni kullanıcının içeriği görüntülemek için
gerekli olan hakları satın almamış olması veya içerik sağlayıcısının görüntüleme uygulamasını desteklememesi
olabilir.
drmStatus
DRMStatusEvent sınıfında tanımlıdır ve dijital haklar yönetimi (DRM) şifreli içeriği oynatılmaya başladığında
(kullanıcının içeriği oynatmak için kimliği doğrulanmıştır ve yetkisi vardır) gönderilir. DRMStatusEvent nesnesi,
içeriğin çevrimdışıyken veya makbuzun süresi dolduğunda ve içerik artık görüntülenemediğinde kullanılabilir
olup olamayacağına dair bilgiler gibi makbuzla ilgili bilgiler içerir.
durum
events.StatusEvent sınıfında tanımlıdır ve yalnızca uygulama dijital haklar yönetimiyle (DRM) şifrelenmiş
içeriği oynatma girişiminde bulunduğunda, NetStream.play() yöntemini çağırarak gönderilir. status kod
özelliği "DRM.encryptedFLV" şeklindedir.
NetStream sınıfı aşağıdaki DRM'ye özgü yöntemleri içerir:
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 271
Dijital haklar yönetimini kullanma
Yöntem
Açıklama
resetDRMVouchers()
Yerel olarak önbelleğe alınmış tüm dijital haklar yönetimi (DRM) makbuz bilgilerini siler.
Kullanıcının şifreli içeriğe erişebilmesi için uygulamanın makbuzları yeniden indirmesi gerekir.
Örneğin, aşağıdaki kod tüm makbuzları önbellekten kaldırır:
NetStream.resetDRMVouchers();
setDRMAuthenticationCredentials()
Kimlik denetimi için NetStream nesnesine kullanıcı adı, şifre ve kimlik denetiminden oluşan bir
kimlik denetimi bilgileri kümesi iletir. Geçerli kimlik denetimi türleri "drm" ve "proxy"
türleridir. "drm" kimlik denetimi türüyle, sağlanan kimlik bilgileri FMRMS için doğrulanır.
"proxy" kimlik denetimi türüyle, kimlik bilgileri proxy sunucusu için doğrulanır ve bilgilerin
proxy sunucusu tarafından gerekli kılınanlarla eşleşmesi gerekir. Örneğin bir kuruluş kullanıcının
Internete erişebilmesi için böyle bir adım gerektirirse, proxy seçeneği uygulamanın bir proxy
sunucusu için kimlik denetimi yapmasına izin verir. Adsız kimlik denetimi kullanılmadığı sürece,
proxy kimlik denetiminden sonra kullanıcı yine de makbuzu almak ve içeriği oynatmak için FMRMS
için kimlik doğrulaması yapmalıdır. FMRMS için kimlik doğrulaması yapmak üzere
setDRMAuthenticationcredentials() öğesini "drm" seçeneğiyle ikinci kez kullanabilirsiniz.
preloadEmbeddedMetadata()
Gömülü meta veriler için bir yerel ortam dosyasını ayrıştırır. DRM ilişkili meta veriler
bulunduğunda, AIR onDRMContentData() geri çağırma işlevini çağırır.
Ayrıca, bir NetStream nesnesi preloadEmbeddedMetaData() yöntemine yapılan çağrının sonucu olarak
onDRMContentData() ve onPlayStatus() geri çağırma işlevlerini çağırır. Bir medya dosyasında DRM meta
verileriyle karşılaşıldığında onDRMContentData() işlevi çağrılır. Dosya tamamen ayrıştırıldığında onPlayStatus()
işlevi çağrılır. NetStream örneğine atanan client nesnesinde onDRMContentData() ve onPlayStatus() işlevleri
tanımlanmalıdır. Makbuzları önceden yüklemek ve içeriği oynatmak için aynı NetStream nesnesini kullanıyorsanız,
oynatmaya başlamadan önce preloadEmbeddedMetaData() tarafından oluşturulan onPlayStatus() çağrısını
beklemelisiniz.
Aşağıdaki kodda kullanıcı adı (“administrator”), şifre (“password”) ve “drm” kimlik denetimi türü, kullanıcının
kimliğini denetlemek üzere ayarlanmıştır. setDRMAuthenticationCredentials() yöntemi, tedarik sağlayıcısı tarafından
bilinen ve kabul edilen (içeriğin görülmesi için izin alınmasını sağlayan aynı kullanıcı kimlik bilgileri) kimlik
bilgileriyle eşleşen kimlik bilgileri sağlamalıdır. Video oynatmaya ve video akışına başarılı bir bağlantı yapıldığını
doğrulamaya ilişkin kod burada yer almamaktadır.
var connection:NetConnection = new NetConnection();
connection.connect(null);
var videoStream:NetStream = new NetStream(connection);
videoStream.addEventListener(DRMAuthenticateEvent.DRM_AUTHENTICATE,
drmAuthenticateEventHandler)
private function drmAuthenticateEventHandler(event:DRMAuthenticateEvent):void
{
videoStream.setDRMAuthenticationCredentials("administrator", "password", "drm");
}
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 272
Dijital haklar yönetimini kullanma
DRMStatusEvent sınıfını kullanma
Dijital haklar yönetimi (DRM) kullanılarak korunan içerik başarılı bir şekilde oynatılmaya başladığında (makbuz
doğrulandığında ve kullanıcının içeriği oynatmak için kimliği doğrulandığında ve yetkisi olduğunda), NetStream
nesnesi bir DRMStatusEvent nesnesi gönderir. DRMStatusEvent erişim izni olan adsız kullanıcılar için de gönderilir.
Makbuz, kimlik denetiminden geçmesi gerekmeyen adsız kullanıcının içeriği oynatmak için izni olup olmadığının
doğrulanması amacıyla kontrol edilir. Adsız kullanıcıların çeşitli nedenlerden ötürü erişimi olmayabilir. Örneğin adsız
bir kullanıcı içeriğe süresi dolduğu için erişemeyebilir.
DRMStatusEvent nesnesi, içeriğin çevrimdışıyken veya makbuzun süresi dolduğunda ve içerik artık
görüntülenemediğinde kullanılabilir olup olamayacağına dair bilgiler gibi makbuzla ilgili bilgiler içerir. Uygulama bu
verileri kullanıcının politika durumunu ve izinlerini taşımak için kullanabilir.
DRMStatusEvent özellikleri
DRMStatusEvent sınıfı aşağıdaki özellikleri içerir:
Özellik
Açıklama
contentData
İçerikte gömülü olan DRM meta verilerini içeren bir DRMContentData nesnesi.
detail
status olayının bağlamını açıklayan dize. DRM 1.0 sürümünde tek geçerli değer DRM.voucherObtained
değeridir.
isAnonymous
DRM şifrelemeyle korunan içeriğin, bir kullanıcının kimlik denetimi bilgilerini sağlamasını gerektirmeden
kullanılabilir (true) veya kullanılamaz (false) olduğunu belirtir. false değeri, kullanıcının, içerik sağlayıcı
tarafından bilinen ve beklenen kullanıcı adı ve şifreyle eşleşen bir kullanıcı adı ve şifre sağlaması gerektiği
anlamına gelir.
isAvailableOffline
DRM şifrelemeyle korunan içeriğin çevrimdışıyken kullanılabilir (true) veya kullanılamaz (false) olduğunu
belirtir. Dijital olarak korunan içeriğin çevrimdışıyken kullanılabilir olması için, makbuzunun kullanıcının yerel
bilgisayarında önbelleğe alınmış olması gerekir.
isLocal
İçeriği oynatmak için gerekli olan makbuzun yerel olarak önbelleğe alınmış olup olmadığını gösterir.
offlineLeasePeriod
İçeriğin çevrimdışıyken görüntülenebileceği kalan gün sayısı.
policies
Özel DRM özellikleri içerebilen özel nesne.
voucher
DRMVoucher.
voucherEndDate
Makbuzun süresinin dolduğu ve içeriğin artık görüntülenemediği mutlak tarih.
DRMStatusEvent işleyicisi oluşturma
Aşağıdaki örnek, olayı başlatan NetStream nesnesi için DRM içerik durumu bilgilerini çıkaran bir olay işleyicisi
oluşturur. Bu olay işleyicisini DRM şifreli içeriği işaret eden bir NetStream nesnesine ekleyin.
function drmStatusEventHandler(event:DRMStatusEvent):void
{
trace(event);
}
function drmStatusEventHandler(event:DRMStatusEvent):void
{
trace(event);
}
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 273
Dijital haklar yönetimini kullanma
DRMAuthenticateEvent sınıfını kullanma
DRMAuthenticateEvent nesnesi, bir NetStream nesnesi oynatılması için kullanıcı kimlik bilgilerinin kimlik
denetiminden geçmesi gereken dijital haklar yönetimi (DRM) şifreli içeriğini oynatma girişiminde bulunduğunda
gönderilir.
DRMAuthenticateEvent işleyicisi gerekli kimlik bilgilerini (kullanıcı adı, şifre ve tür) toplamaktan ve değerleri
doğrulama için NetStream.setDRMAuthenticationCredentials() yöntemine iletmekten sorumludur. Her AIR
uygulaması kullanıcı kimlik belgelerini edinmek için bazı mekanizmalar sağlamalıdır. Örneğin uygulama kullanıcıya
kullanıcı adı ve şifre değerlerini, isteğe bağlı olarak da tür değerini girmesi için basit bir kullanıcı arabirimi sağlayabilir.
AIR uygulaması ayrıca tekrarlanan kimlik denetimi girişimlerinin işlenmesi ve sınırlanması için de bir mekanizma
sağlamalıdır.
DRMAuthenticateEvent özellikleri
DRMAuthenticateEvent sınıfı aşağıdaki özellikleri içerir:
Özellik
Açıklama
authenticationType
Verilen kimlik bilgilerinin FMRMS için mi (“drm”) yoksa bir proxy sunucusu için (“proxy”) kimlik denetimi
yapmaya yönelik olduğunu belirtir. Örneğin bir kuruluş kullanıcının Internete erişebilmesi için böyle bir adım
gerektirirse, "proxy" seçeneği uygulamanın bir proxy sunucusu için kimlik denetimi yapmasına izin verir. Adsız
kimlik denetimi kullanılmadığı sürece, proxy kimlik denetiminden sonra kullanıcı yine de makbuzu almak ve
içeriği oynatmak için FMRMS için kimlik doğrulaması yapmalıdır. FMRMS için kimlik doğrulaması yapmak
üzere setDRMAuthenticationcredentials() öğesini "drm" seçeneğiyle ikinci kez kullanabilirsiniz.
header
Sunucu tarafından sağlanan şifreli içerik dosya üstbilgisi. Şifreli içeriğin bağlamına ilişkin bilgi içerir.
netstream
Bu olayı başlatan NetStream nesnesi.
passwordPrompt
Sunucu tarafından sağlanan, şifre kimlik bilgisi istemi. Dize, istenilen şifre türü için talimat içerebilir.
urlPrompt
Sunucu tarafından sağlanan, URL dizesi istemi. Dize, kullanıcı adı ve şifrenin gönderildiği konumu sağlayabilir.
usernamePrompt
Sunucu tarafından sağlanan, kullanıcı adı kimlik bilgisi istemi. Dize, istenilen kullanıcı adı türü için talimat
içerebilir. Örneğin bir içerik sağlayıcısı, kullanıcı adı olarak e-posta adresi isteyebilir.
DRMAuthenticateEvent işleyicisi oluşturma
Aşağıdaki örnek, olayı başlatan NetStream nesnesine kodlanmış kimlik denetimi bilgileri ileten bir olay işleyicisi
oluşturur. (Video oynatmaya ve video akışına başarılı bir bağlantı yapıldığını doğrulamaya ilişkin kod burada yer
almamaktadır.)
var connection:NetConnection = new NetConnection();
connection.connect(null);
var videoStream:NetStream = new NetStream(connection);
videoStream.addEventListener(DRMAuthenticateEvent.DRM_AUTHENTICATE,
drmAuthenticateEventHandler)
private function drmAuthenticateEventHandler(event:DRMAuthenticateEvent):void
{
videoStream.setDRMAuthenticationCredentials("administrator", "password", "drm");
}
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 274
Dijital haklar yönetimini kullanma
Kullanıcı kimlik bilgilerini almak için bir arabirim oluşturma
DRM içeriğinin kullanıcı kimlik bilgilerini gerektirdiği durumda, AIR uygulamasının kullanıcının kimlik denetimi
bilgilerini genellikle bir kullanıcı arabirimi üzerinden alması gerekir.
DRMErrorEvent sınıfını kullanma
Bir NetStream nesnesi dijital haklar yönetimiyle (DRM) şifrelenmiş dosyayı oynatmaya çalışırken DRM'yle ilgili bir
hatayla karşılaştığında, AIR bir DRMErrorEvent nesnesi gönderir. Geçersiz kullanıcı kimlik bilgileri durumunda
DRMAuthenticateEvent nesnesi, kullanıcı geçerli kimlik bilgilerini girene kadar sürekli gönderme işlemi yaparak
hatayı işler veya AIR uygulaması daha fazla girişime izin vermez. Uygulama DRM'yle ilgili hataları saptamak,
tanımlamak ve işlemek için tüm diğer DRM error olaylarını dinlemelidir.
Bir kullanıcı geçerli kimlik bilgileri girerse, DRM makbuzunun şartlarına bağlı olarak yine de şifreli içeriği görmesine
izin verilmeyebilir. Örneğin, kullanıcı içeriği yetkisiz, yani şifreli içeriğin yayıncısı tarafından doğrulanmamış bir
uygulamada görüntüleme girişiminde bulunuyorsa. Bu durumda bir DRMErrorEvent nesnesi gönderilir. İçerik
bozuksa veya uygulamanın sürümü makbuz tarafından belirtilenle eşleşmiyorsa, error olayları da çalıştırılabilir.
Uygulama hataların işlenmesi için uygun mekanizmayı sağlamalıdır.
DRMErrorEvent özellikleri
Aşağıdaki tablo, DRMErrorEvent nesnesinin bildirdiği hataları listeler:
Büyük Hata Kodu
Küçük Hata Kodu
Hata Ayrıntıları
1001
kullanılmıyor
Kullanıcı kimlik denetimi başarısız oldu.
1002
kullanılmıyor
Flash Media Rights Management Server (FMRMS),
Secure Sockets Layer (SSL) protokolünü
desteklemiyor.
1003
kullanılmıyor
İçeriğin süresi dolmuş ve artık görüntülenemiyor.
1004
kullanılmıyor
Kullanıcı kimlik denetimi hatası. Örneğin kullanıcı
içeriği satın almamışsa ve görüntüleme hakkına
sahip değilse bu durum yaşanabilir.
1005
kullanılmıyor
1006
kullanılmıyor
İstemci güncellemesi gerekli, yani Flash Media
Rights Management Server (FMRMS), yeni bir
dijital haklar yönetimi (DRM) motoru istiyor.
1007
kullanılmıyor
Genel dahili hata.
1008
Ayrıntılı şifre çözme
hata kodu
Yanlış lisans anahtarı.
1009
kullanılmıyor
FLV içeriği bozuk.
1010
kullanılmıyor
1011
kullanılmıyor
Server URL
publisherID:applicationID
Açıklama
Sunucuya bağlanılamıyor.
Görüntüleme uygulamasının kimliği, içerik
yayıncısı tarafından desteklenen geçerli bir
kimlikle eşleşmiyor.
Uygulama sürümü, politikada belirtilenlerle
eşleşmiyor.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 275
Dijital haklar yönetimini kullanma
Büyük Hata Kodu
Küçük Hata Kodu
Hata Ayrıntıları
1012
kullanılmıyor
Şifreli içerikle ilişkilendirilen makbuzun
doğrulaması başarısız oldu, içerik bozuk olabilir.
1013
kullanılmıyor
Şifreli içerikle ilişkilendirilen makbuz
kaydedilemedi.
1014
kullanılmıyor
FLV üstbilgisinin bütünlüğü başarısız oldu, içerik
bozuk olabilir.
Büyük Hata Kodu
Küçük Hata Kimliği Hata Ayrıntıları
Açıklama
3300
Adobe Policy Server
hata kodu
Uygulama, içerikle ilişkilendirilen geçersiz bir
makbuz saptadı.
3301
kullanılmıyor
Kullanıcı kimlik denetimi başarısız oldu.
3302
kullanılmıyor
Secure Sockets Layer (SSL), Flash Media Rights
Management Server (FMRMS) tarafından
desteklenmiyor.
3303
kullanılmıyor
İçeriğin süresi dolmuş ve artık görüntülenemiyor.
3304
kullanılmıyor
Kullanıcı kimlik denetimi hatası. Bu durum,
örneğin kullanıcı içeriği görüntülemek için
gereken hakları satın almadıysa, kullanıcının
kimlik doğrulaması yapılmış olsa bile yaşanabilir.
3305
kullanılmıyor
3306
kullanılmıyor
İstemci güncellemesi gerekli, yani Flash Media
Rights Management Server (FMRMS), yeni bir
dijital haklar yönetimi istemci motoru istiyor.
3307
kullanılmıyor
Genel dahili dijital haklar yönetimi hatası.
3308
Ayrıntılı şifre çözme
hata kodu
Yanlış lisans anahtarı.
3309
kullanılmıyor
Flash video içeriği bozuk.
3310
kullanılmıyor
publisherID:applicationID
Görüntüleme uygulamasının kimliği, içerik
yayıncısı tarafından desteklenen geçerli bir
kimlikle eşleşmiyor. Başka türlü ifade etmek
gerekirse, görüntüleme uygulaması, içerik
sağlayıcısı tarafından desteklenmiyor.
3311
kullanılmıyor
min=x:max=y
Uygulama sürümü, makbuzda belirtilenlerle
eşleşmiyor.
3312
kullanılmıyor
Şifreli içerikle ilişkilendirilen makbuzun
doğrulaması başarısız oldu, içerik bozuk olabilir.
3313
kullanılmıyor
Şifreli içerikle ilişkilendirilen makbuz Microsafe'e
kaydedilemedi.
3314
kullanılmıyor
FLV üstbilgisinin bütünlüğü başarısız oldu, içerik
bozuk olabilir.
3315
kullanılmıyor
DRM korumalı içeriğin uzaktan oynatılmasına izin
verilmiyor.
3316
kullanılmıyor
Eksik AdobeCP modülü.
3317
kullanılmıyor
AdobeCP modülünün yüklenmesi başarısız oldu.
Server URL
Açıklama
Sunucuya bağlanılamıyor.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 276
Dijital haklar yönetimini kullanma
Büyük Hata Kodu
Küçük Hata Kimliği Hata Ayrıntıları
Açıklama
3318
kullanılmıyor
Uyumsuz AdobeCP Sürümü bulundu.
3319
kullanılmıyor
Eksik AdobeCP API giriş noktası.
3320
kullanılmıyor
AdobeCP modülünün kimlik doğrulaması
yapılmadı.
DRMErrorEvent işleyicisi oluşturma
Aşağıdaki örnek, olayı başlatan NetStream nesnesi için bir olay işleyicisi oluşturur. NetStream, DRM şifreli içeriği
oynatma girişiminde bulunurken bir hatayla karşılaşırsa çağrılır. Normalde bir uygulama hatayla karşılaştığında,
temizleme görevlerini gerçekleştirir, kullanıcıyı hata konusunda bilgilendirir ve sorunu çözmeye yönelik seçenekler
sunar.
private function drmErrorEventHandler(event:DRMErrorEvent):void
{
trace(event.toString());
}
DRMManager sınıfını kullanma
Bir AIR uygulamasında makbuzları ve ortam hakları sunucu oturumlarını yönetmek için DRMManager sınıfını
kullanın. DRMManager sınıfı AIR 1.5 veya daha yüksek sürümlerde mevcuttur.
Makbuz yönetimi
Kullanıcının çevrimiçi DRM korumalı bir ortam dosyasını her oynatışında, AIR içeriği görüntülemek için gerekli
lisans makbuzunu alır ve önbelleğe kaydeder. Uygulama dosyayı yerel olarak kaydederse ve makbuz çevrimdışı
oynatmaya izin veriyorsa, ortam hakları sunucusuna bağlantı mevcut olmadığında bile kullanıcı içeriği
görüntüleyebilir. DRMManager ve NetStream preloadEmbeddedMetadata() yöntemini kullanarak, uygulamanın
içeriği görüntülemek için gerekli olan lisansı almak amacıyla oynatmayı başlatmasına gerek kalmaması için makbuzu
önceden önbelleğe alabilirsiniz. Örneğin, uygulamanız ortam dosyasını indirebilir ve daha sonra kullanıcı halen
çevrimiçiyken makbuzu alabilir.
Makbuzu önceden yüklemek için DRMContentData nesnesini almak amacıyla NetStream
preloadEmbeddedMetadata() yöntemini kullanın. DRMContentData nesnesi, lisansı sağlayabilen ve kullanıcı
kimlik doğrulamasının gerekli olup olmadığını açıklayan ortam hakları sunucusunun URL'si ve etki alanını içerir. Bu
bilgiyle, makbuzu almak ve önbelleğe kaydetmek için DRMManager loadVoucher() yöntemini çağırabilirsiniz.
Makbuzları önceden yüklemeye ilişkin iş akışı daha ayrıntılı biçimde “Çevrimdışı oynatma için makbuzları önceden
yükleme” sayfa 267 bölümünde açıklanmıştır.
Oturum yönetimi
Ortam hakları sunucusunda kullanıcının kimlik doğrulamasını yapmak ve kalıcı oturumları yönetmek için
DRMManager da kullanabilirsiniz.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 277
Dijital haklar yönetimini kullanma
Ortam hakları sunucusuyla bir oturum oluşturmak için DRMManager authenticate() yöntemini kullanın. Kimlik
doğrulama başarıyla tamamlandığında, DRMManager bir DRMAuthenticationCompleteEvent nesnesi gönderir. Bu
nesne bir oturum belirteci içerir. Bu belirteci daha sonraki oturumları oluşturmak için kaydedebilir ve kullanıcının
hesap kimlik bilgilerini girmesine gerek kalmamasını sağlayabilirsiniz. Kimlik doğrulaması yapılmış yeni bir oturum
oluşturmak için belirteci setAuthenticationToken() yöntemine aktarın. (Belirteç süresinin dolması ve diğer nitelikler,
belirteci oluşturan sunucunun ayarları tarafından belirlenir. Belirteç veri yapısı, AIR uygulama kodu tarafından
yorumlanmayı amaçlamaz ve gelecekteki AIR güncellemelerinde değişebilir.)
Kimlik doğrulama belirteçleri diğer bilgisayarlara aktarılabilir. Belirteçleri korumak için AIR Şifreli Yerel Depo'ya
kaydedebilirsiniz. Daha fazla bilgi için bkz. “Şifreli verileri saklama” sayfa 206.
DRMStatus Olayları
loadVoucher() yöntemine yapılan çağrı başarıyla tamamlandıktan sonra, DRMManager bir DRMStatusEvent
nesnesi gönderir.
Makbuz alındığında, event nesnesinin detail özelliği "DRM.voucherObtained" değerini alır ve voucher özelliği
DRMVoucher nesnesini içerir.
Makbuz alınmadığında, detail özelliği "DRM.voucherObtained" değerinde kalır; ancak voucher özelliği null
değerindedir. Makbuz, örneğin, localOnly LoadVoucherSetting özelliğini kullanıyorsanız ve yerel olarak önbelleğe
alınmış makbuz mevcut değilse, alınmayabilir.
loadVoucher() çağrısı muhtemelen bir kimlik doğrulama veya iletişim hatası nedeniyle başarıyla
tamamlanmadığında, DRMManager bunun yerine bir DRMErrorEvent nesnesi gönderir.
DRMAuthenticationComplete olayları
authenticate() yöntemine yapılan çağrı aracılığıyla kullanıcının kimlik doğrulaması başarıyla tamamladığında,
DRMManager bir DRMAuthenticationCompleteEvent nesnesi gönderir.
AIR 1.5'te, DRMAuthenticationCompleteEvent nesnesi, uygulama oturumları boyunca kullanıcı kimlik doğrulaması
için kalıcı olacak yeniden kullanılabilir bir belirteç içerir. Oturumu yeniden oluşturmak için bu belirteci DRMManager
setAuthenticationToken() yöntemine aktarın. (Süre sonu gibi belirteç nitelikleri belirteci yaratan tarafından
ayarlanır. AIR, belirteç niteliklerini inceleme amaçlı API sağlamaz.)
DRMAuthenticationError olayları
Kullanıcının kimlik doğrulaması authenticate() veya setAuthenticationToken() yöntemleri aracılığıyla
başarıyla tamamlandığında, DRMManager bir DRMAuthenticationErrorEvent nesnesi gönderir.
DRMContentData sınıfını kullanma
DRMContentData nesnesi, DRM korumalı bir ortam dosyasının meta veri özelliklerini içerir. DRMContentData
özellikleri, içeriği görüntülemeye ilişkin lisans makbuzunu almak için gerekli bilgileri içerir.
278
Bölüm 26: Uygulama başlatma ve
uygulamadan çıkma seçenekleri
Bu bölüm, yüklenmiş bir Adobe® AIR™ uygulamasının başlatılmasına yönelik seçeneklerin ve etkenlerin yanı sıra, bir
uygulamanın kapatılmasına ve çalıştırılmasına yönelik seçenekleri ve etkenleri de tartışır.
Uygulama başlatma
AIR uygulaması, kullanıcı (veya işletim sistemi) aşağıdaki eylemlerde bulunduğunda çağrılır:
• Uygulamayı masaüstü kabuğundan başlatırsa.
• Uygulamayı komut satırı kabuğunda bir komut olarak kullanırsa.
• Uygulamanın varsayılan açılış uygulaması olduğu bir dosya türü açarsa.
• (Mac OS X) Sabitleme görev çubuğundaki uygulama simgesini tıklatırsa (uygulama o anda çalışır durumda olsun
veya olmasın).
• Uygulamayı yükleyiciden başlatmayı seçerse (yeni bir yükleme işleminin sonunda veya zaten yüklenmiş olan
uygulamanın AIR dosyasını çift tıklatarak).
• Yüklenen sürüm uygulama güncellemelerini kendisinin işlediğini bildirdiğinde bir AIR uygulaması güncellemesi
başlatırsa (uygulama tanımlayıcı dosyasına bir <customUpdateUI>true</customUpdateUI> bildirimi katarak).
• AIR uygulaması için tanımlayıcı bilgiler belirten com.adobe.air.AIR
launchApplication() yöntemini çağıran
bir Flash kimlik kartı veya uygulamasını barındıran bir web sayfasını ziyaret ederse. (Uygulama tanımlayıcı ayrıca
tarayıcı başlatması için bir <allowBrowserInvocation>true</allowBrowserInvocation> bildirimi
içermelidir.) Bkz. “Yüklenmiş bir AIR uygulamasını tarayıcıdan başlatma” sayfa 305.
Bir AIR uygulaması çağrıldığında, AIR, NativeApplication nesnesi yoluyla invoke türü bir InvokeEvent nesnesi
gönderir. Bir uygulama zamanının kendini başlatmasını ve olay dinleyicisini kaydetmesini sağlamak için, invoke
olayları atılmak yerine kuyruğa gönderilir. Bir dinleyici kaydedildiğinde sıradaki tüm olaylar iletilir.
Not: Bir uygulama tarayıcı başlatma özelliği kullanılarak çağrıldığında, uygulama zaten çalışır halde değilse
NativeApplication nesnesi yalnızca bir invoke olayı gönderir. Bkz. “Yüklenmiş bir AIR uygulamasını tarayıcıdan
başlatma” sayfa 305.
invoke olaylarını almak için, NativeApplication nesnesinin
(NativeApplication.nativeApplication)addEventListener() yöntemini çağırın. Bir olay dinleyicisi invoke
olayı için kaydolduğunda, kayıttan önce gerçekleşen tüm invoke olaylarını da alır. Sıradaki invoke olayları,
addEventListener() yöntemine yapılan çağrı geri döndükten sonra kısa aralıklarla, bir kerede bir olay olmak üzere
gönderilir. Bu işlem sırasında yeni bir invoke olayı gerçekleşirse, bu olay sıradaki bir veya daha fazla olaydan önce
gönderilebilir. Bu olay sıralaması sayesinde, başlatma kodunuz çalışmadan önce gerçekleşen tüm invoke olaylarını
işleyebilirsiniz. Bir olay dinleyicisini çalışmaya sonradan ekleseniz de (uygulama başlatıldıktan sonra), uygulamanın
başlamasından itibaren gerçekleşen tüm invoke olaylarını alacağını göz önünde bulundurun.
AIR uygulamasının yalnızca bir örneği başlatılır. Zaten çalışmakta olan bir uygulama tekrar çağrılırsa, AIR çalışan
örneğe yeni bir invoke olayı gönderir. Bir invoke olayına yanıt vermek ve uygun eylemi gerçekleştirmek (yeni bir
belge penceresi açmak gibi) AIR uygulamasının sorumluluğundadır.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 279
Uygulama başlatma ve uygulamadan çıkma seçenekleri
InvokeEvent nesnesi uygulamaya iletilen tüm argümanların yanı sıra, uygulamanın çağrıldığı dizini de içerir.
Uygulama bir dosya türü ilişkilendirmesi nedeniyle çağrıldıysa, dosya yolunun tamamı komut satırı argümanlarına
dahil edilir. Benzer şekilde uygulama bir uygulama güncellemesi nedeniyle çağrıldıysa, güncelleme AIR dosyası
yolunun tamamı sağlanır.
Bir işlemde birden çok dosya açıldığında, Mac OS X'te tek bir InvokeEvent nesnesi gönderilir. Her bir dosya
arguments dizisinde mevcuttur. Windows ve Linux'ta her dosya için ayrı bir InvokeEvent nesnesi gönderilir.
Uygulamanız invoke olaylarını, bir dinleyiciyi NativeApplication nesnesiyle kaydederek işleyebilir:
NativeApplication.nativeApplication.addEventListener(InvokeEvent.INVOKE, onInvokeEvent);
air.NativeApplication.nativeApplication.addEventListener(air.InvokeEvent.INVOKE,
onInvokeEvent);
Ve bir olay dinleyicisi tanımlama:
var arguments:Array;
var currentDir:File;
public function onInvokeEvent(invocation:InvokeEvent):void {
arguments = invocation.arguments;
currentDir = invocation.currentDirectory;
}
Komut satırı argümanlarını yakalama
AIR uygulamasının başlatılmasıyla ilişkilendirilen komut satırı argümanları, NativeApplication nesnesi tarafından
gönderilen invoke olayında iletilir. InvokeEvent.arguments özelliği, bir AIR uygulaması çağrıldığında işletim
sistemi tarafından verilen bir dizi argümanı içerir. Argümanlar göreceli dosya yolları içeriyorsa, yolları genellikle
currentDirectory özelliğini kullanarak çözebilirsiniz.
Bir AIR programına iletilen argümanlar, çift tırnak işareti içinde olmadığı sürece beyaz boşluk sınırlı dizeler olarak
kabul edilir:
Argümanlar
Dizi
tick tock
{tick,tock}
tick "tick tock"
{tick,tick tock}
"tick" “tock”
{tick,tock}
\"tick\" \"tock\"
{"tick","tock"}
InvokeEvent.currentDirectory özelliği, uygulamanın başlatıldığı dizini temsil eden bir File nesnesi içerir.
Bir uygulama, uygulama tarafından kaydedilen türde bir dosya açıldığı için çağrıldığında, dosyanın yerel yolu komut
satırı argümanlarına dize olarak dahil edilir. (Dosyada istenilen işlemin açılmasından veya gerçekleştirilmesinden
uygulamanız sorumludur.) Benzer şekilde bir uygulama kendisini güncellemek üzere programlandığında (standart
AIR güncelleme kullanıcı arabirimine güvenmek yerine), kullanıcı, eşleşen uygulama kimliğine sahip bir uygulama
içeren AIR dosyasını çift tıklattığında AIR dosyasının yerel yolu da dahil edilir.
Dosyaya currentDirectory File nesnesinin resolve() yöntemini kullanarak erişebilirsiniz.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 280
Uygulama başlatma ve uygulamadan çıkma seçenekleri
if((invokeEvent.currentDirectory != null)&&(invokeEvent.arguments.length > 0)){
dir = invokeEvent.currentDirectory;
fileToOpen = dir.resolvePath(invokeEvent.arguments[0]);
}
Ayrıca argümanın gerçekten bir dosya yolu olduğunu doğrulamanız gereklidir.
Örnek: Invocation olay günlüğü
Aşağıdaki örnek invoke olayı için dinleyicilerin nasıl kaydedileceğini ve olayın nasıl işleneceğini gösterir. Örnek,
alınan tüm invocation olaylarının günlüğünü tutar ve geçerli dizini ve komut satırı argümanlarını gösterir.
Not: Adobe® Flash® CS3 Professional veya Adobe® Flash® CS4 Professional kullanarak aşağıdaki örneği oluşturmak için
önce bir Flash Dosyası (Adobe AIR) oluşturun. ActionScript 3.0 Ayarlar panelinde (Dosya > Yayınlama Ayarları... >
Ayarlar düğmesi), Document sınıfı alanına InvokeEventLogExample adını girin. FLA dosyasını
InvokeEventLogExample.fla adıyla kaydedin. Ardından aynı klasörde bir ActionScript dosyası oluşturun. Aşağıdaki
kodu ActionScript dosyasına girin ve daha sonra dosyayı InvokeEventLogExample.as adıyla kaydedin.
package
{
import
import
import
import
flash.display.Sprite;
flash.events.InvokeEvent;
flash.desktop.NativeApplication;
flash.text.TextField;
public class InvokeEventLogExample extends Sprite
{
public var log:TextField;
public function InvokeEventLogExample()
{
log = new TextField();
log.x = 15;
log.y = 15;
log.width = 520;
log.height = 370;
log.background = true;
addChild(log);
NativeApplication.nativeApplication.addEventListener(InvokeEvent.INVOKE, onInvoke);
}
public function onInvoke(invokeEvent:InvokeEvent):void
{
var now:String = new Date().toTimeString();
logEvent("Invoke event received: " + now);
if (invokeEvent.currentDirectory != null)
{
logEvent("Current directory=" + invokeEvent.currentDirectory.nativePath);
}
else
{
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 281
Uygulama başlatma ve uygulamadan çıkma seçenekleri
logEvent("--no directory information available--");
}
if (invokeEvent.arguments.length > 0)
{
logEvent("Arguments: " + invokeEvent.arguments.toString());
}
else
{
logEvent("--no arguments--");
}
}
public function logEvent(entry:String):void
{
log.appendText(entry + "\n");
trace(entry);
}
}
}
Oturum açılırken başlatma
NativeApplication.nativeApplication.startAtLogin=true ayarı yapılarak, geçerli kullanıcı oturum açtığında
AIR uygulaması otomatik olarak başlatılacak duruma getirilebilir. Bir kez ayarlandıktan sonra, kullanıcı her oturum
açtığında uygulama otomatik olarak başlatılır. Ayar false olarak değiştirilene, kullanıcı ayarı işletim sisteminden elle
değiştirene veya uygulama kaldırılana kadar, uygulama başlangıçta açılmaya devam eder. Oturum açılırken başlatma,
bir çalışma zamanı ayarıdır.
Not: Uygulama, bilgisayar sistemi başlatıldığında başlamaz. Kullanıcı oturum açtığında başlar. Ayar yalnızca geçerli
kullanıcıya yöneliktir. Ayrıca startAtLogin özelliğinin true olarak başarıyla ayarlanması için uygulama
yüklenmelidir. Uygulama yüklenmemişken özellik ayarlanırsa (ADL ile başlatıldığında olduğu gibi) bir hata verilir.
Tarayıcı başlatma
Bir web sitesi, tarayıcı başlatma özelliğini kullanarak, tarayıcıdan başlatılacak şekilde ayarlı olan yüklenmiş AIR
uygulamasını başlatabilir. Tarayıcı başlatmaya yalnızca uygulama tanımlayıcı dosyası allowBrowserInvocation
ayarını true olarak yaptıysa izin verilir:
<allowBrowserInvocation>true</allowBrowserInvocation>
Uygulama tanımlayıcı dosyası hakkında daha fazla bilgi için bkz. “AIR uygulamasının özelliklerini ayarlama” sayfa 42.
Uygulama tarayıcı üzerinden çağrıldığında, uygulamanın NativeApplication nesnesi bir BrowserInvokeEvent nesnesi
gönderir.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 282
Uygulama başlatma ve uygulamadan çıkma seçenekleri
BrowserInvokeEvent olaylarını almak için, AIR uygulamasında NativeApplication nesnesinin
(NativeApplication.nativeApplication) addEventListener() yöntemini çağırın. Bir olay dinleyicisi
BrowserInvokeEvent olayı için kaydolduğunda, kayıttan önce gerçekleşen tüm BrowserInvokeEvent olaylarını da alır.
Bu olaylar addEventListener() yöntemine yapılan çağrı geri döndükten sonra gönderilir, ancak bu gönderme
işlemi, kayıttan sonra alınmış olma ihtimali bulunan diğer BrowserInvokeEvent olaylarından önce gerçekleşmeyebilir.
Bu sayede, başlatma kodunuzun çalışmasından önce gerçekleşen (uygulama başlangıçta tarayıcıdan çağrıldığında
olduğu gibi) BrowserInvokeEvent olaylarını işleyebilirsiniz. Bir olay dinleyicisini çalışmaya sonradan ekleseniz de
(uygulama başlatıldıktan sonra), uygulamanın başlamasından itibaren gerçekleşen tüm BrowserInvokeEvent
olaylarını alacağını göz önünde bulundurun.
BrowserInvokeEvent nesnesi aşağıdaki özelliklere sahiptir:
Özellik
Açıklama
arguments
Uygulamaya iletilecek bir argüman (dize) dizisi.
isHTTPS
Tarayıcıdaki içeriğin https URL şemasını kullanıp (true) kullanmaması (false).
isUserEvent
Tarayıcı başlatmanın bir user olayıyla sonuçlanıp sonuçlanmaması. AIR 1.0'da, bu ayar her zaman true
şeklindedir; AIR'de tarayıcı başlatma özelliği için bir user olayı gereklidir.
sandboxType
Tarayıcıdaki içeriğin sanal alan türü. Geçerli değerler, Security.sandboxType özelliğinde kullanılabilen
değerlerle aynı olarak tanımlanır ve aşağıdakilerden biri olabilir:
securityDomain
•
Security.APPLICATION — İçerik, uygulama güvenlik sanal alanındadır.
•
Security.LOCAL_TRUSTED — İçerik, dosya sistemiyle yerel güvenlik sanal alanındadır.
•
Security.LOCAL_WITH_FILE — İçerik, dosya sistemiyle yerel güvenlik sanal alanındadır.
•
Security.LOCAL_WITH_NETWORK — İçerik, ağ iletişimiyle yerel güvenlik sanal alanındadır.
•
Security.REMOTE — İçerik, uzak (ağ) etki alanındadır.
"www.adobe.com" veya "www.example.org" gibi tarayıcıdaki içeriğin güvenlik etki alanı. Bu özellik
yalnızca uzak güvenlik sanal alanındaki içerik için (ağ etki alanından gelen içerik) ayarlanır. Yerel veya
uygulama güvenlik sanal alanındaki içerik için ayarlanmaz.
Tarayıcı başlatma özelliğini kullanırsanız, güvenlik sonuçlarını dikkate aldığınızdan emin olun. Bir web sitesi AIR
uygulamasını başlattığında, verileri BrowserInvokeEvent nesnesinin arguments özelliğini kullanarak gönderebilir. Bu
verileri dosya veya kod yükleme API'leri gibi duyarlı bir işlemde kullanırken dikkatli olun. Tehlike düzeyi,
uygulamanın verilerle ne yaptığına bağlı olarak değişir. Yalnızca belirli bir web sitesinin uygulamayı çağırmasını
bekliyorsanız, uygulama BrowserInvokeEvent nesnesinin securityDomain özelliğini kontrol etmelidir. Ayrıca
uygulamayı çağıran web sitesinin HTTP'leri kullanmasını gerekli kılabilirsiniz, bunu da BrowserInvokeEvent
nesnesinin isHTTPS özelliğini kontrol ederek doğrulayabilirsiniz.
Uygulama, iletilen verileri doğrulamalıdır. Örneğin bir uygulamanın URL'leri belirli bir etki alanına iletmesi
bekleniyorsa, URL'lerin gerçekten de o etki alanına işaret ettiğini doğrulamalıdır. Böylece bir saldırganın, uygulamayı
yanıltarak duyarlı verileri kendisine göndermesini sağlaması engellenebilir.
Hiçbir uygulama, yerel kaynaklara işaret edebilecek BrowserInvokeEvent argümanlarını kullanmamalıdır. Örneğin
bir uygulama, tarayıcı tarafından iletilen bir yola dayalı olarak File nesneleri oluşturmamalıdır. Uzak yolların tarayıcı
tarafından iletilmesi bekleniyorsa, uygulama, yolların uzak bir protokol yerine file:// protokolünü kullanmasını
sağlamalıdır.
Bir uygulamanın tarayıcıdan çağrılmasına ilişkin ayrıntılar için bkz. “Yüklenmiş bir AIR uygulamasını tarayıcıdan
başlatma” sayfa 305.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 283
Uygulama başlatma ve uygulamadan çıkma seçenekleri
Uygulama sonlandırma
Bir uygulamayı sonlandırmanın en hızlı yolu NativeApplication.nativeApplication.exit() çağırmaktır ve bu
yöntem, uygulamanız saklanacak veri veya temizlenecek harici kaynak içermiyorsa iyi çalışır. exit() öğesini çağırmak
tüm pencereleri kapatır ve uygulamayı sonlandırır. Ancak uygulamanızın pencerelerinin veya diğer bileşenlerinin,
örneğin gerekli verileri kaydetmek üzere sonlandırma işlemini kesmesine izin vermek için, uygun uyarı olaylarını
exit() öğesini çağırmadan önce gönderin.
Bir uygulamayı başarıyla kapatırken düşünülecek bir başka nokta, kapatma işlemi nasıl başlarsa başlasın tek bir
çalışma yolu sağlamaktır. Kullanıcı (veya işletim sistemi) uygulama sonlandırmayı aşağıdaki yollarla tetikleyebilir:
•
NativeApplication.nativeApplication.autoExittrue olduğunda son uygulama penceresini kapatarak.
• Örneğin kullanıcı varsayılan menüden uygulamadan çık komutunu seçtiğinde işletim sisteminden uygulamadan
çıkış komutunu seçerek. Bu yalnızca Mac OS'de gerçekleşir; Windows ve Linux, sistem kromu aracılığıyla
uygulama çıkış komutu sağlamaz.
• Bilgisayarı kapatarak.
Bir çıkış komutu bu rotalardan biriyle işletim sisteminde araya girdiğinde, NativeApplication bir exiting olayı
gönderir. Hiçbir dinleyici exiting olayını iptal etmezse, tüm açık pencereler kapanır. Her pencere bir closing ve
ardından bir close olayı gönderir. Pencerelerden biri closing olayını iptal ederse, kapatma işlemi durur.
Pencerelerin kapanma sırası uygulamanız için bir sorunsa, NativeApplication öğesinden exiting olayını dinleyin ve
pencereleri kendiniz uygun bir sırayla kapatın. Örneğin araç paletlerine sahip bir belge pencereniz varsa durum böyle
olabilir. Sistemin paletleri kapatması uygunsuz, hatta daha da kötü olabilirdi, ancak kullanıcı bazı verileri kaydetmek
için çıkış komutunu iptal etmeye karar verdi. Windows'ta exiting olayını yalnızca son pencereyi kapattıktan sonra
alırsınız (NativeApplication nesnesinin autoExit özelliği true değerine ayarlıysa).
Tüm platformlarda tutarlı davranış sağlamak için, çıkış sırası ister işletim sisteminden, ister menü komutlarından veya
ister uygulama mantığından başlatılmış olsun, uygulamadan çıkmak için aşağıdaki uygulamaları izleyin:
1 Her zaman uygulama kodunda exit() öğesini çağırmadan önce NativeApplication nesnesi üzerinden bir exiting
olayı gönderin ve uygulamanızın başka bir bileşeninin olayı iptal etmediğinden emin olun.
public function applicationExit():void {
var exitingEvent:Event = new Event(Event.EXITING, false, true);
NativeApplication.nativeApplication.dispatchEvent(exitingEvent);
if (!exitingEvent.isDefaultPrevented()) {
NativeApplication.nativeApplication.exit();
}
}
2 NativeApplication.nativeApplication nesnesinden uygulama exiting olayını dinleyin ve işleyicideki tüm
pencereleri kapatın (önce bir closing olayı göndererek). Tüm pencereler kapatıldıktan sonra, uygulama verilerini
kaydetmek veya geçici dosyaları silmek gibi gerekli olan tüm temizlik görevlerini yerine getirin. Uygulamadan
çıkılmadan önce bittiğinden emin olmak için temizleme sırasında yalnızca senkronize yöntemler kullanın.
Pencerelerinizin kapanma sırası önemli değilse, NativeApplication.nativeApplication.openedWindows
dizisinde ilerleyebilir ve sırayla tüm pencereleri kapatabilirsiniz. Sıra önemliyse, pencerelerin doğru sırayla
kapanması için bir yöntem sağlayın.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 284
Uygulama başlatma ve uygulamadan çıkma seçenekleri
private function onExiting(exitingEvent:Event):void {
var winClosingEvent:Event;
for each (var win:NativeWindow in NativeApplication.nativeApplication.openedWindows) {
winClosingEvent = new Event(Event.CLOSING,false,true);
win.dispatchEvent(winClosingEvent);
if (!winClosingEvent.isDefaultPrevented()) {
win.close();
} else {
exitingEvent.preventDefault();
}
}
if (!exitingEvent.isDefaultPrevented()) {
//perform cleanup
}
}
3 Windows her zaman kendi closing olaylarını dinleyerek kendi temizleme işlemini gerçekleştirmelidir.
4 Daha önceden çağrılan işleyiciler sonraki işleyicilerin exiting olayını iptal edip etmeyeceğini bilemeyeceği için,
uygulamanızda yalnızca bir exiting dinleyicisi kullanın. (Çalışma sırasına güvenmek de doğru olmaz.)
Ayrıca bkz.
“AIR uygulamasının özelliklerini ayarlama” sayfa 42
“Özel uygulama güncelleme kullanıcı arabirimini sunma” sayfa 315
285
Bölüm 27: Uygulama ayarlarını okuma
Çalışma zamanında, uygulamaya ilişkin yayıncı kimliğinin yanı sıra, uygulama tanımlayıcı dosyasının özelliklerini de
elde edebilirsiniz. Bunlar, NativeApplication nesnesinin applicationDescriptor ve publisherID özelliklerinde
ayarlanmıştır.
Uygulama tanımlayıcı dosyasını okuma
NativeApplication nesnesinin applicationDescriptor özelliğini getirerek, şu anda çalışmakta olan uygulamanın
uygulama tanımlayıcı dosyasını aşağıdaki şekilde XML nesnesi olarak okuyabilirsiniz:
var appXml:XML = NativeApplication.nativeApplication.applicationDescriptor;
Böylece XML (E4X) nesnesi olarak uygulama tanımlayıcı verilerine aşağıdaki şekilde erişebilirsiniz:
var appXml:XML = NativeApplication.nativeApplication.applicationDescriptor;
var ns:Namespace = appXml.namespace();
var appId = appXml.ns::id[0];
var appVersion = appXml.ns::version[0];
var appName = appXml.ns::filename[0];
air.trace("appId:", appId);
air.trace("version:", appVersion);
air.trace("filename:", appName);
var xmlString = air.NativeApplication.nativeApplication.applicationDescriptor;
Daha fazla bilgi için bkz. “Uygulama tanımlayıcı dosyasının yapısı” sayfa 42.
Uygulama ve yayıncı kimliklerini getirme
Uygulama ve yayıncı kimlikleri birlikte bir AIR uygulamasını benzersiz olarak tanımlar. Uygulama tanımlayıcının
<id> öğesinde uygulama kimliğini belirtirsiniz. Yayıncı kimliği, AIR yükleme paketini imzalamak için kullanılan
sertifikadan türetilir.
Uygulama kimliği, aşağıdaki kodda gösterildiği şekilde, NativeApplication nesnesinin id özelliğinden okunabilir:
trace(NativeApplication.nativeApplication.applicationID);
Yayıncı kimliği, NativeApplication publisherID özelliğinden okunabilir:
trace(NativeApplication.nativeApplication.publisherID);
Not: AIR uygulaması ADL ile çalıştırıldığında, ADL komut satırındaki -pubID bayrağı kullanılarak geçici bir kimlik
atanmadığı sürece, bir yayıncı kimliğine sahip olmaz.
Yüklenen bir uygulamaya ilişkin yayıncı kimliği, uygulama yükleme dizini içindeki META-INF/AIR/publisherid
dosyasında da bulunabilir.
Daha fazla bilgi için bkz. “AIR yayıncı kimlikleri hakkında” sayfa 308.
286
Bölüm 28: Çalışma zamanı ve işletim
sistemi bilgileriyle çalışma
Bu bölüm, bir AIR uygulamasının işletim sistemi dosya ilişkilendirmelerini yönetmek, kullanıcı etkinliğini saptamak
ve Adobe® AIR™ çalışma zamanı hakkında bilgi almak için kullandığı yolları tartışır.
Dosya ilişkilendirmelerini yönetme
Uygulamanız ve bir dosya türü arasındaki ilişkilendirmeler uygulama tanımlayıcıda bildirilmelidir. Yükleme işlemi
sırasında, başka bir uygulama önceden varsayılan olarak olarak belirlenmediği sürece, AIR uygulama yükleyicisi AIR
uygulamasını bildirilen tüm dosya türleri için varsayılan açılış uygulaması olarak ilişkilendirir. AIR uygulaması
yükleme işlemi, var olan dosya türü ilişkilendirmesini geçersiz kılmaz. İlişkilendirmeyi başka bir uygulamadan
devralmak için çalışma zamanında NativeApplication.setAsDefaultApplication() yöntemini çağırın.
Uygulamanız başladığında beklenen dosya ilişkilendirmelerinin yerinde olduğunu doğrulamak yararlı bir
uygulamadır. Bunun nedeni, AIR uygulama yükleyicisinin var olan dosya ilişkilendirmelerini geçersiz kılmaması ve
kullanıcı sistemindeki dosya ilişkilendirmelerinin her zaman değişebilir olmasıdır. Başka bir uygulama güncel dosya
ilişkilendirmesine sahipse, var olan bir ilişkilendirmenin devralınmasından önce kullanıcının onayını almak yerinde
bir uygulamadır.
NativeApplication sınıfının aşağıdaki yöntemleri, bir uygulamanın dosya ilişkilendirmelerini yönetmesine olanak
verir. Yöntemlerden her biri, dosya türü uzantısını parametre olarak alır:
Yöntem
Açıklama
isSetAsDefaultApplication()
AIR uygulaması güncel olarak belirtilen dosya türüyle ilişkilendirilmişse true değerini döndürür.
setAsDefaultApplication()
AIR uygulaması ve dosya türü açık eylemi arasında ilişkilendirme oluşturur.
removeAsDefaultApplication()
AIR uygulaması ve dosya türü arasındaki ilişkilendirmeyi kaldırır.
getDefaultApplication()
Dosya türüyle güncel olarak ilişkilendirilmiş uygulama yolunu bildirir.
AIR, yalnızca ilk olarak uygulama tanımlayıcıda bildirilen dosya türlerine ilişkin ilişkilendirmeleri yönetebilir.
Kullanıcı bu dosya türü ve uygulamanız arasındaki ilişkilendirmeyi elle oluşturmuş olsa bile, bildirilmemiş bir dosya
türünün ilişkilendirmeleri hakkında bilgi alamazsınız. Uygulama tanımlayıcıda bildirilmemiş bir dosya türüne ilişkin
uzantı aracılığıyla herhangi bir dosya ilişkilendirme yönetimi yönteminin çağırılması, uygulamanın çalışma zamanı
istisnası vermesine neden olur.
Dosya türlerinin uygulama tanımlayıcıda bildirilmesi hakkında bilgi için bkz. “Dosya türü ilişkilendirmelerini
bildirme” sayfa 50.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 287
Çalışma zamanı ve işletim sistemi bilgileriyle çalışma
Çalıştırma zamanı sürümü ve yama düzeyini getirme
NativeApplication nesnesi, uygulamanın yürütülmekte olduğu çalışma zamanının sürümünü belirten
runtimeVersion özelliğini içerir ("1.0.5" gibi bir dize). NativeApplication nesnesi ayrıca, çalışma zamanının yama
düzeyini ifade eden runtimePatchLevel özelliğini de içerir (2960 gibi bir sayı). Aşağıdaki kod bu özellikleri kullanır:
trace(NativeApplication.nativeApplication.runtimeVersion);
trace(NativeApplication.nativeApplication.runtimePatchLevel);
AIR özelliklerini saptama
Adobe AIR uygulamasıyla paketlenen bir dosya için, Security.sandboxType özelliği Security.APPLICATION
sabitiyle tanımlanan değere ayarlanır. Aşağıdaki kodda gösterildiği şekilde, bir dosyanın Adobe AIR güvenlik sanal
alanında bulunuyor olup olmadığını temel alarak içerik (AIR'e özgü API'ler içerebilir veya içermeyebilir)
yükleyebilirsiniz.
if (Security.sandboxType == Security.APPLICATION)
{
// Load SWF that contains AIR APIs
}
else
{
// Load SWF that does not contain AIR APIs
}
AIR uygulamasıyla yüklenmeyen tüm kaynaklar, bir web tarayıcısında Adobe® Flash® Player tarafından atanacağı
güvenlik sanal alanlarının aynılarına atanır. Uzak kaynaklar, kaynak etki alanlarına göre sanal alanlara yerleştirilir ve
yerel kaynaklar ağ iletişimiyle yerel, dosya sistemiyle yerel veya yerel güvenilir sanal alanlara yerleştirilir.
İçeriğin çalışma zamanında yürütülüp yürütülmediğini (ve bir tarayıcıda çalışan Flash Player'da çalışıp çalışmadığını)
görmek için Capabilities.playerType statik özelliğinin "Desktop" olarak ayarlanıp ayarlanmadığını kontrol
edebilirsiniz.
Daha fazla bilgi için bkz. “AIR güvenliği” sayfa 23.
Kullanıcı varlığını izleme
NativeApplication nesnesi, bir kullanıcının bilgisayarı ne zaman etkin olarak kullandığını saptamanıza yardımcı olan
iki olay gönderir. NativeApplication.idleThreshold özelliğiyle belirlenen aralıkta fare veya klavye etkinliği
saptanmadıysa, NativeApplication bir userIdle olayı gönderir. Bir sonraki klavye veya fare girdisi gerçekleştiğinde,
NativeApplication nesnesi bir userPresent olayı gönderir. idleThreshold aralığı saniye cinsinden ölçülür ve 300
varsayılan değerine sahiptir (5 dakika). Ayrıca, son kullanıcı girdisinden itibaren geçen saniye sayısını da
NativeApplication.nativeApplication.lastUserInput özelliğinden elde edebilirsiniz.
Aşağıdaki kod satırları, boşta kalma eşiğini 2 dakika olarak ayarlar ve hem userIdle hem de userPresent olayını
dinler::
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 288
Çalışma zamanı ve işletim sistemi bilgileriyle çalışma
NativeApplication.nativeApplication.idleThreshold = 120;
NativeApplication.nativeApplication.addEventListener(Event.USER_IDLE, function(event:Event) {
trace("Idle");
});
NativeApplication.nativeApplication.addEventListener(Event.USER_PRESENT,
function(event:Event) {
trace("Present");
});
Not: Herhangi iki userPresent olayı arasında yalnızca bir userIdle olayı gönderilir.
289
Bölüm 29: Ağ bağlantısını izleme
Adobe® AIR™, AIR uygulamasının yüklenmiş olduğu bilgisayardaki ağ bağlantısına ilişkin değişiklikleri izlemeye
yönelik araçlar sunar. Bir uygulama ağdan alınan verileri kullandığında, bu bilgi işinize yarayacaktır. Ayrıca, uygulama
bir ağ servisinin kullanılabilirliğini kontrol edebilir.
Ağ bağlantısı değişikliklerini saptama
AIR uygulamanız, güvenli olmayan ve değişken ağ bağlantıları içeren ortamlarda çalışabilir. Adobe AIR, bir
uygulamanın çevrimiçi kaynaklara yönelik bağlantıları yönetmesine yardımcı olmak için, ağ bağlantısının her
kullanılabilir veya kullanılamaz oluşunda bir ağ değişikliği olayı gönderir. Uygulamanın NativeApplication nesnesi ağ
değişikliği olayını gönderir. Bu olaya tepki vermek için bir dinleyici ekleyin:
NativeApplication.nativeApplication.addEventListener(Event.NETWORK_CHANGE, onNetworkChange);
Ve bir olay işleyici işlevi tanımlayın:
function onNetworkChange(event:Event)
{
//Check resource availability
}
Event.NETWORK_CHANGE olayı, tüm ağ etkinliğinde gerçekleşen bir değişikliği değil, yalnızca bir ağ bağlantısının
değiştiğini gösterir. AIR, ağ değişikliğinin anlamını yorumlamaya çalışmaz. Ağa bağlı bir bilgisayar birçok gerçek ve
sanal bağlantıya sahip olabilir, bu nedenle bir bağlantının kaybedilmesi, kaynağın kaybedilmesi anlamına gelmeyebilir.
Diğer yandan, yeni bağlantılar da iyileştirilmiş kaynak kullanılabilirliğini garanti etmez. Bazen yeni bir bağlantı,
önceden kullanılabilir olan bir kaynağa erişimi bloke bile edebilir (örneğin VPN'e bağlanıldığında).
Genellikle, bir uygulamanın uzak bir kaynağa bağlanıp bağlanamayacağını belirlemenin tek yolu, denemektir. Bu
amaçla, air.net paketindeki servis izleme çerçeveleri, belirli bir ana bilgisayara ilişkin ağ bağlantısındaki değişiklikleri
olay tabanlı yanıtlama yöntemine sahip AIR uygulamaları sunar.
Not: Servis izleme çerçevesi, sunucunun bir isteği kabul edilebilir biçimde yanıtlayıp yanıtlamadığını saptar. Bu, tam
bağlantıyı garanti etmez. Ölçeklenebilir web servisleri, trafiği bir dizi web sunucusuna yönlendirmek için genellikle
önbelleğe alma ve yük dengeleme gereçlerini kullanır. Bu durumda, servis sağlayıcıları ağ bağlantısına ilişkin yalnızca
kısmi bir tanı sağlar.
Servis izleme temelleri
Servis izleme çerçevesi, AIR çerçevesinden ayrı olarak servicemonitor.swc dosyasında bulunur. Çerçeveyi kullanmak
için, servicemonitor.swc dosyası oluşturma işlemine dahil edilmelidir.
Önemli: Adobe® Flash® CS3 Professional'da bu sınıfları kullanmak için ServiceMonitorShim bileşenini Bileşenler
panelinden Kitaplık öğesine sürükleyin ve daha sonra aşağıdaki import ifadesini ActionScript 3.0 kodunuza ekleyin:
import air.net.*;
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 290
Ağ bağlantısını izleme
Bu sınıfları Adobe® Flash® CS4 Professional'da kullanmak için:
1 File > Yayınlama ayarları komutunu seçin.
2 ActionScript 3.0 için Ayarlar düğmesini tıklatın. Kitaplık Yolu'nu seçin.
3 SWC Tarama düğmesini tıklatın ve Adobe Flash CS4/AIK1.1/frameworks/libs/air/servicemoniter.swc hedefine
gidin.
4 Tamam düğmesini tıklatın.
5 Aşağıdaki içe aktarma ifadesini ActionScript 3.0 kodunuza ekleyin:
import air.net.*;
ServiceMonitor sınıfı, ağ servislerinin izlenmesi için çerçeveyi uygular ve servis izlemeleri için temel işlevler sağlar.
Varsayılan olarak, bir ServiceMonitor sınıfı örneği, ağ bağlantısına ilişkin olaylar gönderir. ServiceMonitor nesnesi,
örnek oluşturulduğunda ve Adobe AIR'in her ağ değişikliği saptayışında bu olayları gönderir. Ayrıca, genel ağ
bağlantısı olaylarına bakılmaksızın milisaniye cinsinden belirli bir aralıkta bağlantıyı kontrol etmek için
ServiceMonitor örneiğinin pollInterval özelliğini ayarlayabilirsiniz. ServiceMonitor nesnesi, start() yöntemi
çağrılana kadar ağ bağlantısını kontrol etmez.
ServiceMonitor sınıfının alt sınıfı olan URLMonitor sınıfı, belirli bir URLRequest için HTTP bağlantısındaki
değişiklikleri saptar.
ServiceMonitor sınıfının başka bir alt sınıfı olan SocketMonitor sınıfı ise, belirli bir bağlantı noktasındaki belirli bir
ana bilgisayara ilişkin bağlantıdaki değişiklikleri saptar.
HTTP bağlantısını saptama
URLMonitor sınıfı, bağlantı noktası 80'de (HTTP iletişimi için tipik bağlantı noktası) belirli bir adrese HTTP
isteklerinin yapılıp yapılamayacağını belirler. Aşağıdaki kod, Adobe web sitesindeki bağlantı değişikliklerini saptamak
için bir URLMonitor sınıfı örneğini kullanır:
import air.net.URLMonitor;
import flash.net.URLRequest;
import flash.events.StatusEvent;
var monitor:URLMonitor;
monitor = new URLMonitor(new URLRequest('http://www.adobe.com'));
monitor.addEventListener(StatusEvent.STATUS, announceStatus);
monitor.start();
function announceStatus(e:StatusEvent):void {
trace("Status change. Current status: " + monitor.available);
}
Soket bağlantısını saptama
AIR uygulamaları, itme modeli bağlanabilirliği için soket bağlantıları da kullanabilir. Güvenlik duvarları ve ağ
yönlendiricileri, güvenlik nedenleriyle genellikle yetkisiz bağlantı noktalarındaki ağ iletişimini kısıtlar. Bu nedenle
geliştiriciler, kullanıcıların soket bağlantıları kuramayabileceğini göz önünde bulundurmalıdır.
URLMonitor örneğiyle benzer olarak, aşağıdaki kod IRC için yaygın bir bağlantı noktası olan 6667'deki soket
bağlantısına ilişkin bağlantı değişikliklerini saptamak üzere bir SocketMonitor sınıfı örneğini kullanır.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 291
Ağ bağlantısını izleme
import air.net.ServiceMonitor;
import flash.events.StatusEvent;
socketMonitor = new SocketMonitor('www.adobe.com',6667);
socketMonitor.addEventListener(StatusEvent.STATUS, socketStatusChange);
socketMonitor.start();
function announceStatus(e:StatusEvent):void {
trace("Status change. Current status: " + socketMonitor.available);
}
292
Bölüm 30: URL istekleri ve ağ iletişimi
URL istekleri belirtmeye ilişkin yeni Adobe AIR işlevi, tarayıcıda çalışan SWF içeriği tarafından kullanılamaz. Bu işlev,
yalnızca uygulama güvenlik sanal alanındaki içerik tarafından kullanılabilir. Bu bölüm çalışma zamanındaki
URLRequest özelliklerini açıklar ve ağ iletişimi API değişiklikleri AIR içeriğini tartışır.
Adobe® ActionScript® 3.0 ağ iletişimi ve iletişim özellikleri hakkında daha fazla bilgi için bkz. Adobe ActionScript 3.0
Programlama.
URLRequest sınıfını kullanma
URLRequest sınıfı, yalnızca URL dizesinden fazlasını tanımlamanıza olanak verir. AIR, URLRequest sınıfına yalnızca
uygulama güvenlik sanal alanında çalışan AIR içeriği tarafından kullanılabilen bazı yeni özellikler ekler. Çalışma
zamanındaki içerik, yeni URL şemalarını (file ve http gibi standart şemalara ek olarak) kullanarak URL'leri
tanımlayabilir.
URLRequest özellikleri
URLRequest sınıfı, yalnızca AIR uygulama güvenlik sanal alanındaki içerik tarafından kullanılabilen aşağıdaki
özellikleri içerir:
Özellik
Açıklama
followRedirects
Yeniden yönlendirmelerin takip edilip (true, varsayılan değer) edilmeyeceğini (false) belirtir. Bu, yalnızca
çalışma zamanında desteklenir.
manageCookies
HTTP protokol yığınının bu istek için tanımlama bilgilerini yönetmesi gerekip (true, varsayılan değer)
gerekmediğini (false) belirtir. Bu, yalnızca çalışma zamanında desteklenir.
authenticate
Kimlik doğrulama isteklerinin bu istek için işlenmesi gerekip (true) gerekmediğini belirtir. Bu, yalnızca çalışma
zamanında desteklenir. Varsayılan, istekler için kimlik doğrulaması yapmaktır—sunucu kimlik bilgilerinin
gösterilmesini gerektiriyorsa bu, kimlik doğrulama iletişim kutusunun görüntülenmesine neden olabilir.
Kullanıcı adı ve parola da ayarlayabilirsiniz—bkz. “URLRequest varsayılanlarını ayarlama” sayfa 293.
cacheResponse
Bu isteğe ilişkin başarılı yanıt verilerinin önbelleğe alınması gerekip gerekmediğini belirtir. Bu, yalnızca çalışma
zamanında desteklenir. Varsayılan, yanıtı önbelleğe almaktır (true).
useCache
Bu URLRequest verileri almadan önce, yerel önbelleğe başvurulması gerekip gerekmediğini belirler. Bu,
yalnızca çalışma zamanında desteklenir. Varsayılan (true), kullanılabiliyorsa yerel önbelleğe alınmış sürümü
kullanmaktır.
userAgent
HTTP isteğinde kullanılacak kullanıcı aracısı dizesini belirtir.
URLRequest nesnesinin aşağıdaki özellikleri herhangi bir sanal alandaki içerik tarafından ayarlanabilir (yalnızca AIR
uygulama güvenlik sanal alanı değil):
Özellik
Açıklama
contentType
URL isteğiyle gönderilen her verinin MIME içerik türü.
data
URL isteği ile aktarılacak olan verileri içeren bir nesne.
digest
Adobe® Flash® Player önbelleğini izlemek için önbelleğe alınmış bir dosyaya ilişkin güvenli bir "özet".
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 293
URL istekleri ve ağ iletişimi
Özellik
Açıklama
method
Bir GET veya POST işlemi gibi HTTP istek yöntemini denetler. (AIR uygulama etki alanında çalışan içerik, "GET"
veya "POST" dışındaki dizeleri method özelliği olarak belirleyebilir. Tüm HTTP fiilleri olanaklıdır ve "GET"
varsayılan yöntemdir. Bkz. “AIR güvenliği” sayfa 23 .)
requestHeaders
HTTP istemine eklenecek HTTP istem başlıkları.
url
İstenecek URL'yi belirtir.
Not: HTMLLoader sınıfı, HTMLLoader nesnesi tarafından yüklenen içeriğe ait ayarlara ilişkin özellikler içerir.
Ayrıntılar için bkz. “HTMLLoader sınıfı hakkında” sayfa 223 .
URLRequest varsayılanlarını ayarlama
URLRequestDefaults sınıfıi URLRequest nesneleri için varsayılan ayarlarını tanımlamanızı sağlar. Örneğin, aşağıdaki
kod manageCookies ve useCache özellikleri için varsayılan değerleri ayarlar:
URLRequestDefaults.manageCookies = false;
URLRequestDefaults.useCache = false;
air.URLRequestDefaults.manageCookies = false;
air.URLRequestDefaults.useCache = false;
URLRequestDefaults sınıfı, belirli bir ana bilgisayar için kullanmak üzere varsayılan bir kullanıcı adı ve parola
belirlemenizi sağlayan setLoginCredentialsForHost() yöntemini içerir. Yöntemin hostname parametresinde
tanımlanan ana bilgisayar, "www.example.com" gibi bir etki alanı veya "www.example.com:80" gibi bir etki alanı ve
bir bağlantı noktası numarası olabilir. "example.com", "www.example.com" ve "sales.example.com" öğelerinden
her birinin benzersiz ana bilgisayarlar olarak dikkate alındığını unutmayın.
Bu kimlik bilgileri, yalnızca sunucu onları istediğinde kullanılır. Kullanıcının kimlik doğrulaması önceden yapıldıysa
(örneğin, kimlik doğrulama iletişim kutusu kullanılarak), kimlik doğrulaması yapılan kullanıcıyı
setLoginCredentialsForHost() yöntemini çağırarak değiştiremezsiniz.
Örneğin, aşağıdaki kod www.example.com adresinde kullanılmak üzere varsayılan bir kullanıcı adı ve bir parola
ayarlar:
URLRequestDefaults.setLoginCredentialsForHost("www.example.com", "Ada", "love1816$X");
air.URLRequestDefaults.setLoginCredentialsForHost("www.example.com", "Ada", "love1816$X");
URLRequestDefaults ayarlarının her özelliği, özelliği ayarlayan içeriğin yalnızca uygulama etki alanına uygulanır.
Ancak, setLoginCredentialsForHost() yöntemi AIR uygulamasında bulunan tüm etki alanlarındaki içeriğe
uygulanır. Uygulama bu yolla bir ana bilgisayarda oturum açabilir ve uygulamadaki tüm içeriğin belirtilen kimlik
bilgileriyle oturum açmasını sağlar.
Daha fazla bilgi için ActionScript 3.0 Dil ve Bileşenler Başvurusu (http://www.adobe.com/go/learn_air_aslr_tr)
adresindeki URLRequestDefaults sınıfına bakın.
URL'lerde AIR URL şemalarını kullanma
Aşağıdaki gibi standart URL şemaları, AIR'deki herhangi bir güvenlik sanal alanındaki URL'leri tanımlarken
kullanılabilir:
http: ve https:
Bunları web tarayıcısında kullandığınız gibi kullanın.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 294
URL istekleri ve ağ iletişimi
file:
Bunu, dosya sisteminin köküne ilişkin bir yol belirtmek için kullanın. Örneğin:
file:///c:/AIR Test/test.txt
Uygulama güvenlik sanal alanında çalışan içeriğe ilişkin URL'yi tanımlarken aşağıdaki şemaları da kullanabilirsiniz:
app:
Bunu, yüklenen uygulamanın kök dizinine ilişkin bir yol belirtmek için kullanın (yüklenen uygulamaya ilişkin
uygulama tanımlayıcı dosyasını içeren dizin). Örneğin, aşağıdaki yol yüklenen uygulama dizininin kaynaklar alt
dizinine işaret eder:
app:/resources
Uygulama kaynak dizini, ADL uygulamasında çalışırken uygulama tanımlayıcı dosyasını içeren dizine ayarlanır.
app-storage:
Bunu, uygulama depo dizinine ilişkin bir yol belirtmek için kullanın. AIR, her kullanıcı için yüklenen her uygulamaya
ilişkin verileri depolamak üzere kullanışlı bir yer olan benzersiz bir uygulama depolama dizini tanımlar. Örneğin,
aşağıdaki yol uygulama depo dizininde yer alan ayarlar alz dizinindeki prefs.xml dosyasına işaret eder:
app-storage:/settings/prefs.xml
Uygulama depo dizini, kullanıcı adını, uygulama kimliğini ve yayıncı kimliğini temel alır:
• Mac OS'de—:
/Users/kullanıcı adı/Library/Preferences/applicationID.publisherID/Local Store/
Örneğin:
/Users/babbage/Library/Preferences/com.example.TestApp.02D88EEED35F84C264A183921344EEA353
A629FD.1/Local Store
• Windows'ta—Belgeler ve Ayarlar dizininde:
kullanıcı adı/Application Data/applicationID.publisherID/Local Store/
Örneğin:
C:\Documents and Settings\babbage\Application
Data\com.example.TestApp.02D88EEED35F84C264A183921344EEA353A629FD.1\Local Store
• Linux'ta:
/home/kullanıcı adı/.appdata/applicationID.publisherID/Local Store/
Örneğin:
/home/babbage/.appdata/com.example.TestApp.02D88EEED35F84C264A183921344EEA353A629FD.1\Loc
al Store
File.applicationStorageDirectory kullanılarak oluşturulan bir File nesnesine ilişkin URL (ve url özelliği) appstorage URL şemasını aşağıdaki şekilde kullanır:
var dir:File = File.applicationStorageDirectory;
dir = dir.resolvePath("preferences");
trace(dir.url); // app-storage:/preferences
var dir = air.File.applicationStorageDirectory;
dir = dir.resolvePath("prefs.xml");
air.trace(dir.url); // app-storage:/preferences
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 295
URL istekleri ve ağ iletişimi
mailto:
navigateToURL() işlevine aktarılan URLRequest nesnelerindeki mailto şemasını kullanabilirsiniz. Bkz. “Varsayılan
sistem web tarayıcısında bir URL açma” sayfa 295.
AIR'de URL şemaları kullanma
FileStream veya Sound nesnesi gibi çeşitli nesnelere ilişkin URL isteği tanımlamak için bu URL şemalarınından birini
kullanan bir URLRequest nesnesini kullanabilirsiniz. Bu şemaları AIR'de çalışan HTML içeriğinde de
kullanabilirsiniz; örneğin, bir img etiketinin src niteliğinde.
Ancak, AIR'e özgü bu URL şemalarını (app: ve app-storage:) yalnızca uygulama güvenlik sanal alanındaki içerikte
kullanabilirsiniz. Daha fazla bilgi için bkz. “AIR güvenliği” sayfa 23.
İzin verilmeyen URL şemaları
Bazı API'ler, içeriği bir web tarayıcısında başlatmanıza olanak verir. Güvenlik nedenleriyle, AIR'de bu API'leri
kullanırken bazı URL şemalarının kullanılmasına izin verilmez. İzin verilmeyen şemaların listesi, API'yi kullanan
kodun güvenlik sanal alanına bağlıdır. Ayrıntılar için bkz. “Varsayılan sistem web tarayıcısında bir URL açma”
sayfa 295 .
URLStream sınıfındaki değişiklikler
URLStream sınıfı indirilen URL'lerden indirilen verilere düşük düzeyli erişim sağlar. Çalışma zamanında, URLStream
sınıfı yeni bir olay içerir: httpResponseStatus. httpStatus olayının aksine, httpResponseStatus olayı tüm yanıt
verilerinden önce alınır. httpResponseStatus olayı (HTTPStatusEvent sınıfında tanımlanan), yanıtın döndüğü
kaynak URL olan responseURL özelliğini ve yanıtın döndürdüğü yanıt başlıklarını temsil eden URLRequestHeader
nesnesinin bir dizisi olan responseHeaders özelliğini içerir.
Varsayılan sistem web tarayıcısında bir URL açma
Varsayılan sistem web tarayıcısında bir UYL açmak için navigateToURL() işlevini kullanabilirsiniz. Bu işlevin
request parametresi olarak ilettiğiniz URLRequest nesnesi için yalnızca url özelliği kullanılır.
var url = "http://www.adobe.com";
var urlReq = new air.URLRequest(url);
air.navigateToURL(urlReq);
Not: Çalışma zamanı, navigateToURL() işlevini kullanırken, POST yöntemini kullanan URLRequest nesnesinin
(method özelliği URLRequestMethod.POST olarak ayarlanmış olan) GET yöntemini kullandığını kabul eder.
navigateToURL() işlemini kullanırken, URL şemalarına navigateToURL() işlevini çağıran kodun güvenlik sanal
alanı temelinde izin verilir.
Bazı API'ler, içeriği bir web tarayıcısında başlatmanıza olanak verir. Güvenlik nedenleriyle, AIR'de bu API'leri
kullanırken bazı URL şemalarının kullanılmasına izin verilmez. İzin verilmeyen şemaların listesi, API'yi kullanan
kodun güvenlik sanal alanına bağlıdır. (Güvenlik sanal alanlarına ilişkin ayrıntılar için bkz. “AIR güvenliği” sayfa 23.)
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 296
URL istekleri ve ağ iletişimi
Uygulama sanal alanı
Aşağıdaki şemalara izin verilir. Bunları web tarayıcısında kullandığınız gibi kullanın.
•
http:
•
https:
•
file:
•
mailto: — AIR, bu istekleri kayıtlı sistem posta uygulamasına yönlendirir.
•
app:
•
app-storage:
Diğer URL şemalarına izin verilmez.
Uzak sanal alan
Aşağıdaki şemalara izin verilir. Bunları web tarayıcısında kullandığınız gibi kullanın.
•
http:
•
https:
•
mailto: — AIR, bu istekleri kayıtlı sistem posta uygulamasına yönlendirir.
Diğer URL şemalarına izin verilmez.
Dosyayla yerel sanal alan
Aşağıdaki şemalara izin verilir. Bunları web tarayıcısında kullandığınız gibi kullanın.
•
file:
•
mailto: — AIR, bu istekleri kayıtlı sistem posta uygulamasına yönlendirir.
Diğer URL şemalarına izin verilmez.
Ağ iletişimiyle yerel sanal alan
Aşağıdaki şemalara izin verilir. Bunları web tarayıcısında kullandığınız gibi kullanın.
•
http:
• https:
•
mailto: — AIR, bu istekleri kayıtlı sistem posta uygulamasına yönlendirir.
Diğer URL şemalarına izin verilmez.
Yerel güvenilir sanal alan
Aşağıdaki şemalara izin verilir. Bunları web tarayıcısında kullandığınız gibi kullanın.
•
file:
•
http:
• https:
•
mailto: — AIR, bu istekleri kayıtlı sistem posta uygulamasına yönlendirir.
Diğer URL şemalarına izin verilmez.
297
Bölüm 31: Uygulamalar arası iletişim
LocalConnection sınıfı, Adobe® AIR™ uygulamalarının yanı sıra AIR uygulamaları ve tarayıcıda çalışan SWF içeriği
arasındaki iletişimi sağlar.
LocalConnection sınıfının connect() yöntemi, uygulamaları tanımlamak için connectionName parametresini
kullanır. AIR uygulamasının güvenlik sanal alanında çalışan içerikte (AIR uygulamasıyla yüklenen içerik), AIR
arkasından sonunda bir nokta (.) bulınan uygulama imliği gelen app# dizesini kullanır. arkasından tarayıcıda çalışan
SWF içeriği tarafından kullanılan etki alanının yerine kullanılan AIR uygulamasına (uygulama tanımlayıcı dosyasında
tanımlanan) ilişkin yayıncı kimliği gelen karakter. Örneğin com.example.air.MyApp, connectionName uygulama
kimliğine ve B146A943FBD637B68C334022D304CEA226D129B4 yayıncı kimliğine sahip olan bir uygulama için
connectionName,
"app#com.example.air.MyApp.B146A943FBD637B68C334022D304CEA226D129B4:connectionName" olarak
çözülür. (Daha fazla bilgi için bkz. Temel uygulama bilgisini tanımlama ve “Uygulama ve yayıncı kimliklerini getirme”
sayfa 285.)
Başka bir AIR uygulamasının yerel bağlantı üzerinden uygulamanızla iletişim kurmasına izin verdiğinizde, yerel
bağlantı etki alanı adında iletilen LocalConnection nesnesinin allowDomain() yöntemini çağırmalısınız. AIR
uygulaması için, bu etki alanı adı, bağlantı dizesinde olduğu gibi uygulama ve yayıncı kimliklerinden oluşturulur.
Örneğin, gönderen AIR uygulaması com.example.air.FriendlyApp uygulama kimliği ve
214649436BD677B62C33D02233043EA236D13934 yayıncı kimliğine sahipse, bu uygulamanın bağlanmasına izin
vermek için kullanacağınız etki alanı dizesi:
app#com.example.air.FriendlyApp.214649436BD677B62C33D02233043EA236D13934.
Not: Uygulamanızı ADL ile (Flash CS3, Flex Builder veya Dreamweaver gibi bir geliştirme aracıyla) çalıştırdığınızda,
yayıncı kimliği null değerindedir ve etki alanı dizesinden çıkarılır. Uygulamanızı yükleyip çalıştırdığınızda, yayıncı
kimliği etki alanı dizesine dahil edilmelidir. ADL komut satırı argümanlarını kullanarak geçici bir yayıncı kimliği
atayabiliriz. Bağlantı dizesinin ve etki alanı adının düzgün biçimde formatlandığını test etmek için geçici bir yayıncı
kimliği kullanın.
298
Bölüm 32: AIR uygulamalarını Dağıtma,
Yükleme ve Çalıştırma
AIR uygulamaları tek bir AIR yükleme dosyası olarak dağıtılır, bu dosya uygulama kodunu ve tüm varlıkları içerir. Bu
dosyayı, indirme, e-posta gibi genel yöntemlerden biriyle veya CD-ROM gibi bir fiziksel ortamla dağıtabilirsiniz.
Kullanıcılar AIR dosyasını çift tıklatarak uygulamayı yükleyebilir. Kullanıcıların AIR uygulamanızı (ve gerekiyorsa
Adobe® AIR™ uygulamasını) yüklemelerini sağlayan kesintisiz yükleme özelliğini, web sayfasındaki tek bir linki
tıklatarak kullanabilirsiniz.
Bir AIR yükleme dosyası dağıtılmadan önce paketlenmeli ve kod imzalayıcı sertifikası ve özel bir anahtarla
imzalanmalıdır. Yükleme dosyasını dijital olarak imzalamak, uygulamanızın imzalandıktan sonra değiştirilmediğine
dair bir güvence sağlar. Ayrıca, dijital sertifika güvenilir bir sertifika yetkilisi tarafından yayınlandıysa, kullanıcılarınız
kimliğinizi yayıncı veya imzalayan olarak teyit edebilir. Uygulama AIR Geliştirici Aracı'yla (ADT) paketlendiğinde
AIR dosyası imzalanır.
Bir uygulamayı Flash için AIR güncelleme kullanarak AIR dosyasına paketleme konusunda bilgi için, bkz. “AIR
uygulaması ve yükleme dosyaları oluşturma” sayfa 15.
Bir uygulamayı Adobe® AIR™ SDK kullanarak AIR dosyasına paketleme konusunda bilgi için, bkz. “AIR yükleme
dosyasını AIR Geliştirici Aracı (ADT) kullanarak paketleme” sayfa 341.
AIR uygulamasını masaüstünden yükleme ve çalıştırma
Yalnızca AIR dosyasını alıcıya gönderin. Örneğin AIR dosyasını e-posta eki olarak veya bir web sayfasında link olarak
gönderebilirsiniz.
Kullanıcı AIR dosyasını indirdikten sonra, dosyayı yüklemek için şu talimatları izler:
1 AIR dosyasını çift tıklatın.
Adobe AIR bilgisayarda önceden yüklü olmalıdır.
2 Yükleme penceresinde, varsayılan ayarları seçili halde bırakın ve ardından Devam düğmesini tıklatın.
Windows'ta AIR otomatik olarak şunları yapar:
• Uygulamayı Program Dosyaları dizinine yükler
• Uygulama için bir masaüstü kısayolu oluşturur
• Başlat Menüsü kısayolu oluşturur.
• Program Ekle / Kaldır Denetim Masası'na uygulama için bir giriş ekler
Mac OS'de, uygulama varsayılan olarak Uygulamalar dizinine eklenir.
Uygulama zaten yüklenmişse yükleyici, kullanıcıya, uygulamanın var olan sürümünü açma veya indirilen AIR
dosyasındaki sürüme güncelleme seçenekleri arasında seçim yapma olanağı tanır. Yükleyici AIR dosyasındaki
uygulama kimliğini ve yayıncı kimliğini kullanarak uygulamayı tanımlar.
3 Yükleme işlemi tamamlandığında, Son düğmesini tıklatın.
Mac OS'de bir uygulamanın güncellenen sürümünü yüklemek için, kullanıcının uygulama dizinine yüklemek üzere
yeterli sistem ayrıcalığına sahip olması gerekir. Kullanıcı, Windows ve Linux'ta yönetici ayrıcalıklarına ihtiyaç duyar.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 299
AIR uygulamalarını Dağıtma, Yükleme ve Çalıştırma
Ayrıca uygulama yeni bir sürümü, ActionScript veya JavaScript kullanarak da yükleyebilir. Daha fazla bilgi için, bkz.
“AIR uygulamalarını güncelleme” sayfa 313.
AIR uygulaması yüklendikten sonra kullanıcı uygulamayı çalıştırmak için, diğer masaüstü uygulamalarında da olduğu
gibi yalnızca uygulama simgesini çift tıklatır.
• Windows'ta uygulamasının simgesini çift tıklatın (masaüstüne veya bir klasöre yüklüdür) veya Başlat menüsünden
uygulamayı seçin.
• Linux'ta, uygulama simgesini (masaüstüne veya bir klasöre yüklenen) çift tıklatın veya uygulamalar menüsünden
uygulamayı seçin.
• Mac OS'de uygulamayı yüklendiği klasörde çift tıklatın. Varsayılan yükleme dizini /Applications dizinidir.
AIR kesintisiz yükleme özelliği sayesinde kullanıcı AIR uygulamasını web sayfasındaki bir linki tıklatarak yükleyebilir.
AIR tarayıcı başlatma özelliği sayesinde kullanıcı yüklenmiş olan AIR uygulamasını web sayfasındaki bir linki
tıklatarak çalıştırabilir. Bu özellikler aşağıdaki bölümde anlatılmaktadır.
AIR uygulamalarını web sayfasından yükleme ve
çalıştırma
Kesintisiz yükleme özelliği, SWF dosyasını, kullanıcının bir AIR uygulamasını tarayıcıdan yüklemesini sağlayan bir
web sayfasına gömmenize olanak tanır. Çalışma zamanı yüklenmemişse, kesintisiz yükleme özelliği çalışma zamanını
yükler. Kesintisiz yükleme özelliği sayesinde kullanıcılar, AIR dosyasını bilgisayarlarına kaydetmeden AIR
uygulamasını yükleyebilirler. AIR SDK'de bir badge.swf dosyası mevcuttur, bu dosya sayesinde kesintisiz yükleme
özelliğini kolaylıkla kullanabilirsiniz. Ayrıntılar için bkz. “AIR uygulamasını yüklemek için badge.swf dosyasını
kullanma” sayfa 300.
Kesintisiz yükleme özelliğinin nasıl kullanılacağına ilişkin bir örnek için bkz. Web aracılığıyla bir AIR Uygulamasını
dağıtma (http://www.adobe.com/go/learn_air_qs_seamless_install_tr) hızlı başlatma örnek makalesi.
Kesintisiz yükleme badge.swf dosyasını özelleştirme hakkında
SDK'yle beraber sağlanan badge.swf dosyasını kullanmaya ek olarak, bir tarayıcı sayfasında kullanmak için kendi SWF
dosyanızı oluşturabilirsiniz. Özel SWF dosyanız çalışma zamanıyla şu şekillerde etkileşimde bulunabilir:
• Bir AIR uygulaması yükleyebilir. Bkz. “Tarayıcıdan AIR uygulaması yükleme” sayfa 305.
• Belirli bir AIR uygulamasının yüklenip yüklenmediğine bakmak için kontrol edebilir. Bkz. “AIR uygulamasının
yüklenip yüklenmediğini bir web sayfasından kontrol etme” sayfa 304.
• Çalışma zamanının yüklenip yüklenmediğine bakmak için kontrol edebilir. Bkz. “Çalışma zamanının yüklenip
yüklenmediğini kontrol etme” sayfa 303.
• Yüklenmiş bir AIR uygulamasını kullanıcının sisteminde başlatabilir. Bkz. “Yüklenmiş bir AIR uygulamasını
tarayıcıdan başlatma” sayfa 305.
Bu özelliklerin tümü, adobe.com adresinde bulunan bir SWF dosyasındaki API'ler çağrılarak sağlanır: air.swf. Bu
bölümde badge.swf dosyasının nasıl kullanılacağı ve özelleştirileceği ve air.swf API'lerini kendi SWF dosyanızdan nasıl
çağıracağınız anlatılmaktadır.
Buna ek olarak tarayıcıda çalışan bir SWF dosyası, LocalConnection sınıfını kullanarak, çalışan bir AIR uygulamasıyla
iletişim kurabilir. Daha fazla bilgi için bkz. “Uygulamalar arası iletişim” sayfa 297.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 300
AIR uygulamalarını Dağıtma, Yükleme ve Çalıştırma
Önemli: Bu bölümde açıklanan özellikler (ve air.swf dosyasındaki API'ler) son kullanıcının Windows veya Mac OS'deki
web tarayıcısında Adobe® Flash® Player 9 güncellemesi 3'ün yüklemiş olmasını gerektirir. Kesintisiz yükleme özelliği
Linux'ta Flash Player 10'u (10,0,12,36 veya daha yeni bir sürüm) gerektirir. Flash Player'ın yüklü sürümünü kontrol
etmek için kod yazabilir ve Flash Player'ın gerekli sürümü yüklü değilse, kullanıcıya alternatif bir arabirim
sağlayabilirsiniz. Örneğin Flash Player'ın daha eski bir sürümü yüklüyse, AIR dosyasının yükleme sürümüne bir link
verebilirsiniz (bir uygulama yüklemek için badge.swf dosyasını veya air.swf API'sini kullanmak yerine).
AIR uygulamasını yüklemek için badge.swf dosyasını kullanma
AIR SDK'de bir badge.swf dosyası mevcuttur, bu dosya sayesinde kesintisiz yükleme özelliğini kolaylıkla
kullanabilirsiniz. badge.swf dosyası, çalışma zamanını ve AIR uygulamasını web sayfasındaki bir linkten yükleyebilir.
badge.swf dosyası ve kaynak kodu, web sitenizde yayınlamanız için size sağlanır.
Bu bölümdeki talimatlar, Adobe tarafından sağlanan badge.swf dosyasının parametrelerini ayarlama konusunda bilgi
sağlar. Ayrıca badge.swf dosyası için, özelleştirebileceğiniz kaynak kodunu da sağlıyoruz.
badge.swf dosyasını bir web sayfasına gömme
1 AIR SDK'nin samples/badge dizininde sağlanan aşağıdaki dosyaları bulun ve web sunucunuza ekleyin.
• badge.swf
• default_badge.html
• AC_RunActiveContent.js
2 default_badge.html sayfasını metin düzenleyicisinde açın.
3 default_badge.html sayfasında, AC_FL_RunContent() JavaScript işlevinde, aşağıdaki öğeler için FlashVars
parametre tanımlarını ayarlayın:
Parametre
Açıklama
appname
Çalışma zamanı yüklü olmadığında SWF dosyası tarafından görüntülenen uygulama adı.
appurl
(Zorunlu). Yüklenecek AIR dosyasının URL'si. Göreceli değil, mutlak bir URL kullanmalısınız.
airversion
(Zorunlu). Çalışma zamanının 1.0 sürümü için bunu 1.0'a ayarlayın.
imageurl
Kimlik kartında görüntülenecek görüntünün (isteğe bağlı) URL'si.
buttoncolor
Yükleme düğmesinin rengi. (FFCC00 gibi, onaltılık bir değer olarak belirtilir.)
messagecolor
Çalışma zamanı yüklü olmadığında düğmenin altında görüntülenen metin mesajının rengi. (FFCC00 gibi,
onaltılık bir değer olarak belirtilir.)
4 badge.swf dosyasının minimum boyutu 217 piksel genişlik, 180 piksel yüksekliktir. AC_FL_RunContent() işlevinin
width ve height parametrelerinin değerlerini ihtiyaçlarınızı karşılayacak şekilde ayarlayın.
5 İhtiyaçlarınızı karşılayacak şekilde default_badge.html dosyasını yeniden adlandırın ve kodunu ayarlayın (veya
başka bir HTML sayfasına dahil edin).
Ayrıca badge.swf dosyasını düzenleyebilir ve yeniden derleyebilirsiniz. Ayrıntılar için bkz. “badge.swf dosyasını
değiştirme” sayfa 301.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 301
AIR uygulamalarını Dağıtma, Yükleme ve Çalıştırma
AIR uygulamasını bir web sayfasındaki kesintisiz yükleme linkinden yükleme
Kesintisiz yükleme linkini bir sayfaya ekledikten sonra kullanıcı, SWF dosyasındaki linki tıklatarak AIR uygulamasını
yükleyebilir.
1 Flash Player'ın (Windows veya Mac OS X'te sürüm 9 güncelleme 3 veya daha yenisinin veya Linux'ta sürüm 10'un)
yüklenmiş olduğu bir web tarayıcısında HTML sayfasına gidin.
2 Web sayfasında, badge.swf dosyasındaki linki tıklatın.
• Çalışma zamanını yüklediyseniz, bir sonraki adıma geçin.
• Çalışma zamanını yüklemediyseniz, yüklemek isteyip istemediğinizi soran bir iletişim kutusu görüntülenir.
Çalışma zamanını yükleyin (bkz. “Adobe AIR yüklemesi” sayfa 1) ve bir sonraki adımla devam edin.
3 Yükleme penceresinde, varsayılan ayarları seçili halde bırakın ve ardından Devam düğmesini tıklatın.
Windows kullanan bir bilgisayarda AIR otomatik olarak şunları gerçekleştirir:
• Uygulamayı c:\Program Files\ konumuna yükler
• Uygulama için bir masaüstü kısayolu oluşturur
• Başlat Menüsü kısayolu oluşturur
• Program Ekle / Kaldır Denetim Masası'na uygulama için bir giriş ekler
Mac OS'de yükleyici uygulamayı Uygulamalar dizinine ekler (örneğin Mac OS'de /Applications dizininde).
Linux ile çalışan bir bilgisayarda AIR otomatik olarak şunu yapar:
• Uygulamayı /opt hedefine yükler.
• Uygulama için bir masaüstü kısayolu oluşturur
• Başlat Menüsü kısayolu oluşturur
• Sistem paket yöneticisindeki uygulama için bir giriş ekler
4 İstediğiniz seçenekleri belirleyin, ardından Yükle düğmesini tıklatın.
5 Yükleme işlemi tamamlandığında, Son düğmesini tıklatın.
badge.swf dosyasını değiştirme
AIR SDK, badge.swf dosyası için kaynak dosyalar sağlar. Bu dosyalar SDK'nin samples/badge klasöründe bulunur:
Kaynak dosyalar
Açıklama
badge.fla
badge.swf dosyasını derlemek için kullanılan kaynak Flash dosyası. badge.fla dosyası bir SWF 9 dosyasına
(Flash Player'da yüklenebilir) derlenir.
AIRBadge.as
basdge.fla dosyasında kullanılan temel sınıfı tanımlayan bir ActionScript 3.0 sınıfı.
badge.fla dosyasının görsel arabirimini yeniden tasarlamak için Flash CS3 veya Flash CS4 kullanabilirsiniz.
AIRBadge sınıfında tanımlanan AIRBadge() yapıcı işlevi, http://airdownload.adobe.com/air/browserapi/air.swf
adresinde barındırılan air.swf dosyasını yükler. air.swf dosyası, kesintisiz yükleme özelliğini kullanma için kod içerir.
air.swf dosyası başarıyla yüklendiğinde, onInit() yöntemi (AIRBadge sınıfında) çağrılır:
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 302
AIR uygulamalarını Dağıtma, Yükleme ve Çalıştırma
private function onInit(e:Event):void {
_air = e.target.content;
switch (_air.getStatus()) {
case "installed" :
root.statusMessage.text = "";
break;
case "available" :
if (_appName && _appName.length > 0) {
root.statusMessage.htmlText = "<p align='center'><font color='#"
+ _messageColor + "'>In order to run " + _appName +
", this installer will also set up Adobe® AIR™.</font></p>";
} else {
root.statusMessage.htmlText = "<p align='center'><font color='#"
+ _messageColor + "'>In order to run this application, "
+ "this installer will also set up Adobe® AIR™.</font></p>";
}
break;
case "unavailable" :
root.statusMessage.htmlText = "<p align='center'><font color='#"
+ _messageColor
+ "'>Adobe® AIR™ is not available for your system.</font></p>";
root.buttonBg_mc.enabled = false;
break;
}
}
Kod, global _air değişkenini yüklenen air.swf dosyasının ana sınıfına ayarlar. Bu sınıf, badge.swf dosyasının kesintisiz
yükleme işlevini çağırmak için eriştiği aşağıdaki genel yöntemleri içerir:
Yöntem
Açıklama
getStatus()
Çalışma zamanının bilgisayara yüklenip yüklenmediğini (veya yüklenip yüklenemeyebileceğini) belirler.
Ayrıntılar için bkz. “Çalışma zamanının yüklenip yüklenmediğini kontrol etme” sayfa 303.
installApplication() Kullanıcının bilgisayarında belirtilen uygulamayı yükler. Ayrıntılar için bkz. “Tarayıcıdan AIR uygulaması
yükleme” sayfa 305.
•
url—URL'yi tanımlayan bir dize. Göreceli değil, mutlak bir URL yolu kullanmalısınız.
•
runtimeVersion—Uygulama tarafından yüklenmesi gerekli kılınan çalışma zamanının sürümünü
("1.0.M6" gibi) gösteren bir dize.
•
arguments— Yüklemenin ardından başlatılırsa uygulamaya iletilecek olan argümanlar. Uygulama
tanımlayıcı dosyasında allowBrowserInvocation öğesi true olarak ayarlanmışsa, yüklemenin
ardından uygulama başlatılır. (Uygulama tanımlayıcı dosyası hakkında daha fazla bilgi için bkz. “AIR
uygulamasının özelliklerini ayarlama” sayfa 42.) Uygulama, tarayıcıdan kesintisiz yüklemenin bir sonucu
olarak başlatılırsa (kullanıcının yüklemeden sonra başlatmayı seçmesiyle), yalnızca argümanlar iletilirse
uygulamanın NativeApplication nesnesi bir BrowserInvokeEvent nesnesi gönderir. Uygulamaya ilettiğiniz
verilerin güvenlik sonuçlarını göz önünde bulundurun. Ayrıntılar için bkz. “Yüklenmiş bir AIR uygulamasını
tarayıcıdan başlatma” sayfa 305.
url ve runtimeVersion için ayarlar, konteyner HTML sayfasındaki FlashVars ayarları kullanılarak SWF dosyasına
iletilir.
Uygulama, yüklemeden sonra otomatik olarak başlarsa, yüklenen uygulamanın başlatmadan sonra badge.swf
dosyasına başvurması için LocalConnection iletişimini kullanabilirsiniz. Ayrıntılar için bkz. “Uygulamalar arası
iletişim” sayfa 297.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 303
AIR uygulamalarını Dağıtma, Yükleme ve Çalıştırma
Ayrıca, bir uygulamanın yüklenip yüklenmediğini kontrol etmek için air.swf dosyasının getApplicationVersion()
yöntemini de çağırabilirsiniz. Bu yöntemi uygulama yükleme işleminden önce veya yükleme başladıktan sonra
çağırabilirsiniz. Ayrıntılar için bkz. “AIR uygulamasının yüklenip yüklenmediğini bir web sayfasından kontrol etme”
sayfa 304.
air.swf dosyasını yükleme
Bir tarayıcıdaki web sayfasından çalışma zamanı ve AIR uygulamalarıyla etkileşimde bulunmak için air.swf
dosyasındaki API'leri kullanan kendi SWF dosyanızı oluşturabilirsiniz. air.swf dosyası
http://airdownload.adobe.com/air/browserapi/air.swf adresinde bulunmaktadır. air.swf API'lerine SWF dosyanızdan
başvurmak için, air.swf dosyasını SWF dosyanızla aynı uygulama etki alanına yükleyin. Aşağıdaki kod, yükleme SWF
dosyasının uygulama etki alanına air.swf dosyasını yüklemeye dair bir örnek gösterir:
var airSWF:Object; // This is the reference to the main class of air.swf
var airSWFLoader:Loader = new Loader(); // Used to load the SWF
var loaderContext:LoaderContext = new LoaderContext();
// Used to set the application domain
loaderContext.applicationDomain = ApplicationDomain.currentDomain;
airSWFLoader.contentLoaderInfo.addEventListener(Event.INIT, onInit);
airSWFLoader.load(new URLRequest("http://airdownload.adobe.com/air/browserapi/air.swf"),
loaderContext);
function onInit(e:Event):void
{
airSWF = e.target.content;
}
air.swf dosyası yüklendikten sonra (Loader nesnesinin contentLoaderInfo nesnesi init olayını gönderdiğinde),
air.swf API'lerinden herhangi birini çağırabilirsiniz. Bu API'ler şu bölümlerde anlatılmaktadır:
• “Çalışma zamanının yüklenip yüklenmediğini kontrol etme” sayfa 303
• “AIR uygulamasının yüklenip yüklenmediğini bir web sayfasından kontrol etme” sayfa 304
• “Tarayıcıdan AIR uygulaması yükleme” sayfa 305
• “Yüklenmiş bir AIR uygulamasını tarayıcıdan başlatma” sayfa 305
Not: AIR SDK'yle sağlanan badge.swf dosyası, air.swf dosyasını otomatik olarak yükler. Bkz. “AIR uygulamasını
yüklemek için badge.swf dosyasını kullanma” sayfa 300. Bu bölümdeki talimatlar, air.swf dosyasını yükleyen kendi SWF
dosyanızı oluşturmaya yöneliktir.
Çalışma zamanının yüklenip yüklenmediğini kontrol etme
SWF dosyası, http://airdownload.adobe.com/air/browserapi/air.swf adresinden yüklenen air.swf dosyasındaki
getStatus() yöntemini çağırarak, çalışma zamanının yüklenip yüklenmediğini kontrol edebilir. Ayrıntılar için bkz.
“air.swf dosyasını yükleme” sayfa 303.
air.swf dosyası yüklendikten sonra, SWF dosyası, aşağıda olduğu gibi air.swf dosyasının getStatus() yöntemini
çağırabilir:
var status:String = airSWF.getStatus();
getStatus() yöntemi, bilgisayardaki çalışma zamanının durumuna bağlı olarak aşağıdaki dize değerlerinden birini
döndürür:
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 304
AIR uygulamalarını Dağıtma, Yükleme ve Çalıştırma
Dize değeri
Açıklama
"available"
Bu bilgisayara çalışma zamanı yüklenebilir, ancak şu anda yüklü değil.
"unavailable"
Bu bilgisayara çalışma zamanı yüklenemez.
"installed"
Bu bilgisayarda çalışma zamanı yüklü.
Gerekli Flash Player sürümü (Windows ve Mac OS'de sürüm 9 güncelleme 3 veya Linux'ta sürüm 10) tarayıcıya
yüklenmediğinde getStatus() yöntemi bir hata atar.
AIR uygulamasının yüklenip yüklenmediğini bir web sayfasından kontrol
etme
SWF dosyası, http://airdownload.adobe.com/air/browserapi/air.swf adresinden yüklenen air.swf dosyasındaki
getApplicationVersion() yöntemini çağırarak AIR uygulamasının (eşleşen bir uygulama kimliği ve yayıncı
kimliğiyle) yüklenip yüklenmediğini kontrol edebilir. Ayrıntılar için bkz. “air.swf dosyasını yükleme” sayfa 303.
air.swf dosyası yüklendikten sonra, SWF dosyası, aşağıda olduğu gibi air.swf dosyasının getApplicationVersion()
yöntemini çağırır:
var appID:String = "com.example.air.myTestApplication";
var pubID:String = "02D88EEED35F84C264A183921344EEA353A629FD.1";
airSWF.getApplicationVersion(appID, pubID, versionDetectCallback);
function versionDetectCallback(version:String):void
{
if (version == null)
{
trace("Not installed.");
// Take appropriate actions. For instance, present the user with
// an option to install the application.
}
else
{
trace("Version", version, "installed.");
// Take appropriate actions. For instance, enable the
// user interface to launch the application.
}
}
getApplicationVersiom() yöntemi aşağıdaki parametreleri içerir:
Parametreler
Açıklama
appID
Uygulama için uygulama kimliği. Ayrıntılar için bkz. “Uygulama kimliğini tanımlama” sayfa 45.
pubID
Uygulama için yayıncı kimliği. Ayrıntılar için bkz. “AIR yayıncı kimlikleri hakkında” sayfa 308.
callback
İşleyici işlevi olarak hizmet görecek bir geri çağırma işlevi. getApplicationVersion() yöntemi senkronize
çalışmaz ve yüklü sürümü (veya yüklü sürüm olmadığını) saptadıktan sonra, bu geri çağırma yöntemi çağrılır.
Geri çağırma yöntemi tanımı bir parametre, yüklenmiş uygulamanın sürüm dizesine ayarlı bir dize içermelidir.
Uygulama yüklenmemişse, önceki kod örneğinde gösterildiği gibi işleve bir null değeri iletilir.
Gerekli Flash Player sürümü (Windows ve Mac OS'de sürüm 9 güncelleme 3 veya daha yenisi veya Linux'ta sürüm 10)
tarayıcıda yüklü değilse getApplicationVersion() yöntemi hata verir.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 305
AIR uygulamalarını Dağıtma, Yükleme ve Çalıştırma
Tarayıcıdan AIR uygulaması yükleme
SWF dosyası, http://airdownload.adobe.com/air/browserapi/air.swf adresinden yüklenen air.swf
dosyasındaki installApplication() yöntemini çağırarak bir AIR uygulaması yükleyebilir. Ayrıntılar için bkz.
“air.swf dosyasını yükleme” sayfa 303.
air.swf dosyası yüklendikten sonra, SWF dosyası, aşağıdaki kodda olduğu gibi air.swf dosyasının
installApplication() yöntemini çağırabilir:
var url:String = "http://www.example.com/myApplication.air";
var runtimeVersion:String = "1.0";
var arguments:Array = ["launchFromBrowser"]; // Optional
airSWF.installApplication(url, runtimeVersion, arguments);
installApplication() yöntemi, kullanıcının bilgisayarında belirtilen uygulamayı yükler. Bu yöntem aşağıdaki
parametrelere sahiptir:
Parametre
Açıklama
url
Yüklenecek AIR dosyasının URL'sini tanımlayan dize. Göreceli değil, mutlak bir URL yolu kullanmalısınız.
runtimeVersion
Uygulama tarafından yüklenmesi gerekli kılınan çalışma zamanının sürümünü ("1.0" gibi) gösteren bir dize.
arguments
Yüklemenin ardından başlatılırsa uygulamaya iletilecek olan argüman dizisi. Argümanlarda yalnızca
alfanümerik karakterler tanınır. Diğer değerleri aktarmanız gerektiğinde bir kodlama şeması kullanmayı
deneyin.
Uygulama tanımlayıcı dosyasında allowBrowserInvocation öğesi true olarak ayarlanmışsa, yüklemenin
ardından uygulama başlatılır. (Uygulama tanımlayıcı dosyası hakkında daha fazla bilgi için bkz. “AIR
uygulamasının özelliklerini ayarlama” sayfa 42.) Uygulama, tarayıcıdan kesintisiz yüklemenin bir sonucu olarak
başlatılırsa (kullanıcının yüklemeden sonra başlatmayı seçmesiyle), yalnızca argümanlar iletilmişse
uygulamanın NativeApplication nesnesi bir BrowserInvokeEvent nesnesi gönderir. Ayrıntılar için bkz.
“Yüklenmiş bir AIR uygulamasını tarayıcıdan başlatma” sayfa 305.
installApplication() yöntemi yalnızca, fare tıklatması gibi bir kullanıcı olayına yönelik olay işleyicisinde
çağrıldığında çalışabilir.
Gerekli Flash Player sürümü (Windows ve Mac OS'de sürüm 9 güncelleme 3 veya daha yenisi veya Linux'ta sürüm 10)
tarayıcıda yüklü değilse installApplication() yöntemi hata verir.
Mac OS'de bir uygulamanın güncellenen sürümünü yüklemek için, kullanıcının uygulama dizinine yüklemek üzere
yeterli sistem ayrıcalığına (ve uygulama çalışma zamanını güncelliyorsa yönetici ayrıcalıklarına) sahip olması gerekir.
Windows'ta kullanıcı yönetici ayrıcalıklarına sahip olmalıdır.
Ayrıca, bir uygulamanın önceden yüklenip yüklenmediğini kontrol etmek için air.swf dosyasının
getApplicationVersion() yöntemini de çağırabilirsiniz. Bu yöntemi uygulama yükleme işlemi başlamadan önce
veya yükleme başladıktan sonra çağırabilirsiniz. Ayrıntılar için bkz. “AIR uygulamasının yüklenip yüklenmediğini bir
web sayfasından kontrol etme” sayfa 304. Uygulama çalıştıktan sonra, LocalConnection sınıfını kullanarak
tarayıcıdaki SWF içeriğiyle iletişim kurabilir. Ayrıntılar için bkz. “Uygulamalar arası iletişim” sayfa 297.
Yüklenmiş bir AIR uygulamasını tarayıcıdan başlatma
Tarayıcı başlatma özelliğini kullanmak için (tarayıcıdan başlatılmasına izin vererek), hedef uygulamanın uygulama
tanımlayıcı dosyası aşağıdaki ayarı içermelidir:
<allowBrowserInvocation>true</allowBrowserInvocation>
Uygulama tanımlayıcı dosyası hakkında daha fazla bilgi için bkz. “AIR uygulamasının özelliklerini ayarlama” sayfa 42.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 306
AIR uygulamalarını Dağıtma, Yükleme ve Çalıştırma
Tarayıcıdaki bir SWF dosyası, http://airdownload.adobe.com/air/browserapi/air.swf adresinden yüklenen air.swf
dosyasındaki launchApplication() yöntemini çağırarak bir AIR uygulamasını başlatabilir. Ayrıntılar için bkz.
“air.swf dosyasını yükleme” sayfa 303.
air.swf dosyası yüklendikten sonra, SWF dosyası, aşağıdaki kodda olduğu gibi air.swf dosyasının
launchApplication() yöntemini çağırabilir:
var appID:String = "com.example.air.myTestApplication";
var pubID:String = "02D88EEED35F84C264A183921344EEA353A629FD.1";
var arguments:Array = ["launchFromBrowser"]; // Optional
airSWF.launchApplication(appID, pubID, arguments);
launchApplication() yöntemi air.swf dosyasının (kullanıcı arabirimi SWF dosyasının uygulama etki alanında
yüklüdür) üst düzeyinde tanımlanır. Bu yöntemi çağırmak AIR'in belirtilen uygulamayı başlatmasına neden olur
(yüklüyse ve tarayıcı başlatması olanağı varsa, uygulama tanımlayıcı dosyasındaki allowBrowserInvocation ayarını
kullanarak). Bu yöntem aşağıdaki parametrelere sahiptir:
Parametre
Açıklama
appID
Başlatılacak uygulamanın uygulama kimliği. Ayrıntılar için bkz. “Uygulama kimliğini tanımlama” sayfa 45.
pubID
Başlatılacak uygulamanın yayıncı kimliği. Ayrıntılar için bkz. “AIR yayıncı kimlikleri hakkında” sayfa 308.
arguments
Uygulamaya iletilecek bir argüman dizisi. Uygulamanın NativeApplication nesnesi, bu diziye ayarlanmış bir
özellikler kümesine sahip olan BrowserInvokeEvent olayını gönderir. Argümanlarda yalnızca alfanümerik
karakterler tanınır. Diğer değerleri aktarmanız gerektiğinde bir kodlama şeması kullanmayı deneyin.
launchApplication() yöntemi yalnızca, fare tıklatması gibi bir user olayı için olay işleyicisinde çağrıldığında
çalışabilir.
Gerekli Flash Player sürümü (Windows ve Mac OS'de sürüm 9 güncelleme 3 veya daha yenisi veya Linux'ta sürüm 10)
tarayıcıda yüklü değilse launchApplication() yöntemi hata verir.
Uygulama tanımlayıcı dosyasında allowBrowserInvocation öğesi false olarak ayarlıysa, launchApplication()
yöntemini çağırmanın hiçbir etkisi yoktur.
Kullanıcı arabirimini uygulamayı başlatmak için sunmadan önce, air.swf dosyasında getApplicationVersion()
yöntemini çağırmak isteyebilirsiniz. Ayrıntılar için bkz. “AIR uygulamasının yüklenip yüklenmediğini bir web
sayfasından kontrol etme” sayfa 304.
Uygulama tarayıcı başlatma özelliği üzerinden çağrıldığında, uygulamanın NativeApplication nesnesi bir
BrowserInvokeEvent nesnesi gönderir. Ayrıntılar için bkz. “Tarayıcı başlatma” sayfa 281.
Tarayıcı başlatma özelliğini kullanıyorsanız, “Tarayıcı başlatma” sayfa 281 konusunda belirtilen güvenlik sonuçlarını
göz önünde bulundurduğunuzdan emin olun.
Uygulama çalıştıktan sonra, LocalConnection sınıfını kullanarak tarayıcıdaki SWF içeriğiyle iletişim kurabilir.
Ayrıntılar için bkz. “Uygulamalar arası iletişim” sayfa 297.
Kuruluş konuşlandırma
BT yöneticileri Adobe AIR çalışma zamanı ve AIR uygulamalarını, standart masaüstü konuşlandırma araçlarını
kullanarak sessiz bir şekilde yükleyebilir. BT yöneticileri şunları yapabilir:
• Microsoft SMS, IBM Tivoli gibi araçları veya önyükleyici kullanan sessiz yükleme işlemlerine olanak sağlayan
herhangi bir konuşlandırma aracını kullanarak Adobe AIR çalışma zamanını sessizce yükleyebilir
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 307
AIR uygulamalarını Dağıtma, Yükleme ve Çalıştırma
• Çalışma zamanını konuşlandırmak için kullanılan araçların aynılarını kullanarak AIR uygulamasını sessizce
yükleyebilir
Daha fazla bilgi için, bkz. Adobe AIR Yönetici Kılavuzu (http://www.adobe.com/go/learn_air_admin_guide_tr).
AIR dosyasını dijital olarak imzalama
AIR yükleme dosyalarınızı tanınan bir sertifika yetkilisi (CA) tarafından yayımlanan bir sertifikayla dijital olarak
imzalamak, kullanıcılarınıza, yükledikleri uygulamanın yanlışlıkla veya kötü amaçla değiştirilmediğine dair bir
güvence verir ve sizi imzalayan (yayıncı) olarak tanımlar. AIR uygulaması güvenilen veya yükleme bilgisayarında
güvenilen bir sertifikaya zincirle bağlanan bir sertifikayla imzalandığında, AIR, yükleme sırasında yayıncı adını
görüntüler. Aksi takdirde yayıncı adı “Bilinmeyen” olarak görüntülenir.
Önemli: Kötü amaçlı bir varlık, imzalama anahtar deposu dosyanızı bir şekilde ele geçirirse veya özel anahtarınızı
bulursa, AIR dosyasında sizin kimliğinizi kullanarak sahtecilik yapabilir.
Kod imzalayıcı sertifikalar hakkında bilgi
Kod imzalayıcı sertifikaların kullanımına ilişkin güvenlik teminatları, sınırlamalar ve yasal zorunluluklar Sertifika
Uygulama Bildirimleri'nde (CPS) ve sertifikayı yayımlayan yetkili tarafından yayınlanan abone sözleşmelerinde
anlatılır. Şu anda AIR kod imzalayıcı sertifikalarını yayınlayan sertifika yetkililerine ilişkin anlaşmalar hakkında daha
fazla bilgi için bkz.:
ChosenSecurity (http://www.chosensecurity.com/products/tc_publisher_id_adobe_air.htm)
http://www.chosensecurity.com/resource_center/repository.htm
(http://www.chosensecurity.com/resource_center/repository.htm)
GlobalSign (http://www.globalsign.com/developer/code-signing-certificate/index.htm)
GlobalSign CPS (http://www.globalsign.com/repository/index.htm)
Thawte CPS (http://www.thawte.com/cps/index.html)
Thawte Kod İmzalama Geliştirici Sözleşmesi (Thawte Code Signing Developer's Agreement)
(http://www.thawte.com/ssl-digital-certificates/free-guides-whitepapers/pdf/develcertsign.pdf)
VeriSign CPS (http://www.verisign.com/repository/CPS/)
VeriSign Subscriber's Agreement (https://www.verisign.com/repository/subscriber/SUBAGR.html)
AIR kod imzalama hakkında
AIR dosyası imzalandığında, yükleme dosyasına bir dijital imza dahil edilir. İmza, AIR dosyasının imzalandıktan
sonra değiştirilmediğini doğrulamak için kullanılan bir paket özetini ve yayıncı kimliğini doğrulamak için kullanılan
imzalayıcı sertifikayla ilgili bilgileri içerir.
AIR, bir sertifikaya güvenilip güvenilmeyeceğini belirlemek için işletim sisteminin sertifika deposuyla desteklenen
ortak anahtar altyapısını (PKI) kullanır. Yayıncı bilgilerinin doğrulanması için, AIR uygulamasının yüklendiği
bilgisayar AIR uygulamasını imzalamak için kullanılan sertifikaya doğrudan güvenmeli veya sertifikayı güvenilen bir
sertifika yetkilisine bağlayan bir sertifika zincirine güvenmelidir.
AIR dosyası güvenilen kök sertifikalarından birine zincirle bağlı olmayan bir sertifikayla (normalde bu tüm kendinden
imzalı sertifikaları da içerir) imzalanırsa, yayıncı bilgileri doğrulanamaz. AIR, AIR paketinin imzalandıktan sonra
değiştirilmediğini belirleyebilse de, dosyayı gerçekten kimin oluşturduğunu ve imzaladığını bilmenin bir yolu yoktur.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 308
AIR uygulamalarını Dağıtma, Yükleme ve Çalıştırma
Not: Kullanıcı kendinden imzalı bir sertifikaya güvenmeyi seçebilir, bundan sonra sertifikayla imzalanmış olan tüm AIR
uygulamaları sertifikada yayıncı adı olarak ortak ad alanı değerini görüntüler. AIR, kullanıcının bir sertifikayı güvenilir
olarak belirlemesi için herhangi bir yöntem sağlamaz. Sertifika (özel anahtar içermeyen) kullanıcıya ayrı olarak
sağlanmalı ve kullanıcı sertifikayı sistem sertifika deposundaki uygun konuma aktarmak için işletim sistemi tarafından
sağlanan mekanizmalardan birini veya uygun bir aracı kullanmalıdır.
AIR yayıncı kimlikleri hakkında
AIR dosyası oluşturmanın bir parçası olarak, AIR Geliştirici Aracı (ADT) bir yayıncı kimliği oluşturur. Bu, AIR
dosyasını oluşturmada kullanılan sertifika için benzersiz olan bir kimliktir. Aynı sertifikayı birden fazla AIR
uygulaması için yeniden kullanırsanız, uygulamalar aynı yayıncı kimliğine sahip olur. Yayıncı kimliği
LocalConnection iletişiminde AIR uygulamasını tanımlamak için kullanılır (bkz. “Uygulamalar arası iletişim”
sayfa 297). Yüklenmiş bir uygulamanın yayıncı kimliğini, NativeApplication.nativeApplication.publisherID
özelliğini okuyarak tanımlayabilirsiniz.
Aşağıdaki alanlar yayıncı kimliğini hesaplamak için kullanılır: Name, CommonName, Surname, GivenName, Initials,
GenerationQualifier, DNQualifier, CountryName, localityName, StateOrProvinceName, OrganizationName,
OrganizationalUnitName, Title, Email, SerialNumber, DomainComponent, Pseudonym, BusinessCategory,
StreetAddress, PostalCode, PostalAddress, DateOfBirth, PlaceOfBirth, Gender, CountryOfCitizenship,
CountryOfResidence ve NameAtBirth. Bir sertifika yetkilisi tarafından yayımlanan sertifikayı yenilerseniz veya
kendinden imzalı bir sertifikayı yeniden oluşturursanız, yayıncı kimliğinin aynı kalması için bu alanların da aynı
olması gerekir. Buna ek olarak, CA tarafından yayımlanan bir sertifikanın kök sertifikasıyla kendinden imzalı bir
sertifikanın ortak anahtarı da aynı olmalıdır.
Sertifika formatları hakkında
AIR imzalama araçları, Java Şifreleme Mimarisi (JCA) ile erişilebilen tüm anahtar depolarını kabul eder. Bunlar
arasında PKCS12 formatlı dosyalar (genellikle .pfx veya .p12 dosya uzantısı kullanan), Java .keystore dosyaları,
PKCS11 donanım anahtar depoları ve sistem anahtar depoları gibi dosya tabanlı anahtar depoları bulunmaktadır.
ADT'nin erişebildiği anahtar deposu formatları, ADT'yi çalıştırmak için kullanılan Java çalışma zamanının sürümüne
ve yapılandırmasına bağlıdır. PKCS11 donanım belirteçleri gibi bazı anahtar deposu türlerine erişmek, ek yazılım
sürücülerinin ve JCA eklentilerinin yüklenmesini ve yapılandırılmasını gerektirebilir.
AIR dosyalarını imzalamak için en yaygın bulunan kod imzalayıcı sertifikaları kullanabilir veya özellikle AIR
uygulamalarını imzalamak için yayınlanan yeni bir sertifika edinebilirsiniz. Örneğin aşağıdaki VeriSign, Thawte,
GlobalSign veya ChosenSecurity sertifika türlerinden herhangi biri kullanılabilir:
• ChosenSecurity
• Adobe AIR için TC Yayıncı Kimliği
• GlobalSign
• ObjectSign Kod İmzalayıcı Sertifikası
• Thawte:
• AIR Geliştirici Sertifikası
• Apple Geliştirici Sertifikası
• JavaSoft Geliştirici Sertifikası
• Microsoft Authenticode Sertifikası
• VeriSign:
• Adobe AIR Dijital Kimliği
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 309
AIR uygulamalarını Dağıtma, Yükleme ve Çalıştırma
• Microsoft Authenticode Digital ID
• Sun Java Signing Digital ID
Not: Sertifika kod imzalama için oluşturulmuş olmalıdır. AIR dosyalarını imzalamak için SSL veya başka türde bir
sertifika kullanamazsınız.
Zaman damgaları
Bir AIR dosyasını imzaladığınızda paketleme aracı, zaman damgası yetkilisinin sunucusunu, bağımsız doğrulanabilir
bir imzalama tarihi ve saati almak için sorgular. Alınan zaman damgası AIR dosyasına gömülüdür. İmzalayıcı sertifika
imzalama sırasında geçerli olduğu sürece, sertifikanın süresi dolduktan sonra bile AIR dosyası yüklenebilir. Diğer
yandan, zaman damgası alınamazsa, sertifikanın süresi dolduğunda veya sertifika iptal edildiğinde AIR dosyası artık
yüklenemez hale gelir.
AIR paketleme araçları varsayılan olarak bir zaman damgası alır. Ancak zaman damgası hizmeti kullanılamadığında
uygulamaların paketlenmesini sağlamak için, zaman damgalamayı devre dışı bırakabilirsiniz. Adobe, genel olarak
dağıtılan tüm AIR dosyalarının bir zaman damgası içermesini önerir.
AIR paketleme araçları tarafından kullanılan varsayılan zaman damgası yetkilisi Geotrust'tır.
Sertifika alma
Bir sertifika almak için normalde sertifika yetkilisinin web sitesini ziyaret edersiniz ve şirketin tedarik işlemini
tamamlarsınız. AIR araçlarının ihtiyacı olan anahtar deposu dosyasını oluşturmak için kullanılan araçlar, satın alınan
sertifikanın türüne, sertifikanın alıcı bilgisayarda nasıl saklandığına ve bazı durumlarda sertifikayı almak için
kullanılan tarayıcının türüne bağlıdır. Örneğin, Thawte'den bir Adobe Geliştirici sertifikasını almak ve dışa aktarmak
için Mozilla Firefox kullanmalısınız. Bu şekilde sertifika doğrudan Firefox kullanıcı arabiriminden .p12 veya .pfx
dosyası olarak dışa aktarılabilir.
AIR kurulum dosyalarını paketlemek için, Air Geliştirici Aracı'nı (ADT) kullanarak kendinden imzalı bir sertifika
oluşturabilirsiniz. Bazı üçüncü taraf araçlar da kullanılabilir.
Kendinden imzalı bir sertifikanın nasıl oluşturulacağı ve AIR dosyasını imzalama konusunda talimatlar için, bkz. “AIR
yükleme dosyasını AIR Geliştirici Aracı (ADT) kullanarak paketleme” sayfa 341. Ayrıca AIR dosyalarını Flex Builder,
Dreamweaver ve Flash için AIR güncelleme kullanarak da dışa aktarabilir ve imzalayabilirsiniz.
Aşağıdaki örnek, Thawte Sertifika Yetkilisi'nden AIR Geliştirici Sertifikası'nın nasıl alınacağını ve sertifikanın ADT'yle
kullanıma nasıl hazırlanacağını anlatır.
Örnek: Thawte'den AIR Geliştirici Sertifikası alma
Not: Bu örnek kod imzalayıcı sertifikasını alma ve kullanıma hazırlama yollarından yalnızca birini göstermektedir. Her
sertifika yetkilisinin kendi politika ve yordamları vardır.
Thawte web sitesi, AIR Geliştirici Sertifikası'nı satın almak için Mozilla Firefox tarayıcı kullanmanızı gerekli kılar.
Sertifikanın özel anahtarı, tarayıcının anahtar deposunda saklanmaktadır. Firefox anahtar deposunun ana şifreyle
korunduğundan ve bilgisayarın da fiziksel koşullar bakımından güvencede olduğundan emin olun. (Tedarik işlemi
tamamlandıktan sonra, sertifika anahtarını ve özel anahtarı tarayıcı anahtar deposundan dışa aktarabilir ve
kaldırabilirsiniz.)
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 310
AIR uygulamalarını Dağıtma, Yükleme ve Çalıştırma
Sertifika kayıt işleminin bir parçası olarak, bir özel/ortak anahtar çifti oluşturulur. Özel anahtar otomatik olarak
Firefox anahtar deposunda saklanır. Sertifikayı Thawte’nin web sitesinden istemek ve almak için aynı bilgisayarı ve
tarayıcıyı kullanmalısınız.
1 Thawte web sitesini ziyaret edin ve Kod İmzalayıcı Sertifikalar için Ürün sayfası (Product page for Code Signing
Certificates) bölümüne gidin.
2 Kod İmzalayıcı Sertifikalar listesinden, Adobe AIR Geliştirici Sertifikası'nı seçin.
3 Üç adımlı kayıt işlemini tamamlayın. Kuruluş ve irtibat bilgileri vermeniz gerekir. Daha sonra Thawte kimlik
doğrulama işlemini gerçekleştirir ve ek bilgiler isteyebilir. Doğrulama tamamlandıktan sonra Thawte size
sertifikayı almanız için gereken talimatların bulunduğu bir e-posta yollar.
Not: Gerekli belgelerin türü hakkında ek bilgi şu linklerde bulunabilir: https://www.thawte.com/ssl-digitalcertificates/free-guides-whitepapers/pdf/enroll_codesign_eng.pdf.
4 Thawte sitesinden yayımlanan sertifikayı alın. Sertifika otomatik olarak Firefox anahtar deposuna kaydedilir.
5 Özel anahtarı ve sertifikayı içeren bir anahtar deposu dosyasını Firefox anahtar deposundan aşağıdaki adımları
izleyerek dışa aktarın:
Not: Özel anahtarı/sertifikayı Firefox'tan dışarı aktarırken, ADT, Flex, Flash ve Dreamweaver'ın kullanabileceği
.p12 (pfx) formatında dışa aktarılır.
a Firefox Sertifika Yöneticisi iletişim kutusunu açın:
b Windows'ta: Araçlar -> Seçenekler -> Gelişmiş -> Şifreleme -> Sertifikaları Görüntüle öğelerini açın
c Mac OS'de: Firefox -> Tercihler -> Gelişmiş -> Şifreleme -> Sertifikaları Görüntüle öğelerini açın
d Linux'ta: Düzenle -> Tercihler -> Gelişmiş -> Şifreleme -> Sertifikaları Görüntüle öğelerini açın
e Sertifika listesinden Adobe AIR Kod İmzalayıcı Sertifikası'nı seçin ve Yedekle düğmesini tıklatın.
f
Anahtar deposu dosyasının dışa aktarılacağı bir dosya adı ve konum girin ve Kaydet'i tıklatın.
g Firefox ana şifresini kullanıyorsanız dosyayı dışa aktarırken, yazılım güvenlik aygıtı için şifrenizi girmeniz
istenir. (Bu şifre yalnızca Firefox tarafından kullanılır.)
h Sertifika Yedekleme Şifresi Seç iletişim kutusunda, anahtar deposu dosyası için bir şifre oluşturun.
Önemli: Bu şifre anahtar deposu dosyasını korur ve dosya, AIR uygulamalarını imzalamada kullanılırken
gereklidir. Güvenli bir şifre seçilmelidir.
i
Tamam'ı tıklatın. Başarılı bir yedekleme şifresi mesajı almanız gerekir. Özel anahtarı ve sertifikayı içeren anahtar
deposu dosyası .p12 dosya uzantısıyla (PKCS12 formatında) kaydedilir.
6 Dışa aktarılan anahtar deposu dosyasını ADT, Flex Builder, Flash veya Dreamweaver ile kullanın. Dosya için
oluşturulan şifre, bir AIR uygulaması imzalanacağı zaman gereklidir.
Önemli: Özel anahtar ve sertifika, Firefox anahtar deposunda saklanmaya devam eder. Bu sayede sertifika dosyasının
ek bir kopyasını dışa aktarabilirsiniz, ancak sertifikanızın ve özel anahtarınızın güvenliğinin sağlanması için korunması
gereken bir başka erişim noktası da sağlanmış olur.
Sertifikaları değiştirme
Bazı durumlarda, AIR uygulamanızı imzalamak için kullandığınız sertifikayı değiştirmeniz gerekebilir. Bu durumlar
şunlardır:
• Kendinden imzalı bir sertifikadan bir sertifika yetkilisi tarafından yayımlanan bir sertifikaya yükseltme yapılırken
• Süresi dolmak üzere olan kendinden imzalı bir sertifika, başka bir sertifikayla değiştirilirken
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 311
AIR uygulamalarını Dağıtma, Yükleme ve Çalıştırma
• Bir ticari sertifika diğeriyle değiştirilirken, örneğin şirketinizin kimliği değiştiğinde
İmzalayıcı sertifika AIR uygulamasının kimliğini belirleyen öğelerden biri olduğu için, uygulamanız için bir
güncellemeyi farklı bir sertifikayla imzalayamazsınız. AIR'in bir AIR dosyasını güncelleme olarak tanıması için, hem
orijinal hem de güncellenen AIR dosyasını aynı sertifikayla imzalamanız gerekir. Aksi takdirde AIR, var olan
yüklemeyi güncellemek yerine yeni AIR dosyasını ayrı bir uygulama olarak yükler.
AIR 1.1 sürümünden itibaren, bir uygulamanın imzalayıcı sertifikası bir geçiş imzası kullanılarak
değiştirilebilmektedir. Geçiş imzası, güncelleme AIR dosyasına uygulanan ikinci imzadır. Geçiş imzası, imzalayanın
uygulamanın orijinal yayıncısı olduğunu belirten orijinal sertifikayı kullanır.
Önemli: Orijinal sertifikanın süresi dolmadan veya orijinal sertifika iptal edilmeden sertifika değiştirilmelidir.
Sertifikanızın süresi dolmadan önce geçiş imzasıyla imzalanan bir güncelleme oluşturmazsanız, kullanıcılar herhangi bir
güncelleme yüklemeden önce uygulamanızın var olan sürümünü kaldırmak zorunda kalır. Ticari olarak yayımlanan
sertifikalar genellikle sürenin dolmasını önlemek için yenilenebilir. Kendinden imzalı sertifikalar yenilenemez.
Sertifikaları değiştirmek için:
1 Uygulamanız için bir güncelleme oluşturun
2 Güncelleme AIR dosyasını yeni sertifikayla paketleyin ve imzalayın
3 AIR dosyasını orijinal sertifikayla (ADT -migrate komutunu kullanarak) yeniden imzalayın
Geçiş imzası uygulama yordamı “Uygulama sertifikasını değiştirmek için AIR dosyasını imzalama” sayfa 350
bölümünde anlatılmaktadır.
Güncellenen AIR dosyası yüklendiğinde, uygulamanın kimliği değişir. Bu kimlik değişikliğinin etkileri şunlardır:
• Uygulamanın yayıncı kimliği yeni sertifikayla eşleşmek için değişir.
• Yeni uygulama sürümü, var olan şifreli yerel depodaki verilere erişemez.
• Uygulama depolama dizininin konumu değişir. Eski konumdaki veriler yeni dizine kopyalanmaz. (Ancak yeni
uygulama, eski yayıncı kimliğine bağlı olarak orijinal dizini bulabilir.)
• Uygulama artık eski yayıncı kimliğini kullanarak yerel bağlantıları açamaz.
• Bir kullanıcı geçiş öncesi AIR dosyasını yeniden yüklerse, AIR bu dosyayı orijinal yayıncı kimliğini kullanarak ayrı
bir uygulama olarak yükler.
Uygulamanın orijinal ve yeni sürümleri arasındaki verilerin geçişini yapmak uygulamanızın sorumluluğundadır.
Şifreli yerel depodaki (ELS) verilerin geçişini yapmak için, verileri sertifikada değişiklik yapılmadan dışa aktarmanız
gerekir. Uygulamanızın yeni sürümünün eski sürümün ELS'sini okuması imkansızdır. (Genellikle verileri yeniden
oluşturmak, verilerin geçişini yapmaktan daha kolaydır.)
Geçiş imzasını olabildiğince fazla sayıdaki sonraki güncellemeye uygulamaya devam etmelisiniz. Aksi takdirde,
orijinalden yükseltme yapmamış olan kullanıcıların bir ara geçiş sürümü yüklemeleri veya sizin son güncellemenizi
yükleyebilmek için kendi geçerli sürümlerini kaldırmaları gerekir. Sonunda orijinal sertifikanın süresi dolar ve siz de
artık geçiş imzası uygulayamazsınız. (Ancak, zaman damgalamayı devre dışı bırakmadığınız sürece, önceden bir geçiş
imzasıyla imzalanan AIR dosyaları geçerliliğini korur. Geçiş imzasının zaman damgası sayesinde AIR, sertifikanın
süresi dolduktan sonra bile imzayı kabul eder.)
Geçiş imzasına sahip bir AIR dosyası diğer yönlerden normal bir AIR dosyasıdır. Uygulama bir sisteme orijinal
sürümü olmadan yüklenirse, AIR yeni sürümü normal bir şekilde yükler.
Not: Ticari olarak yayımlanmış bir sertifikayı yenilediğinizde, genellikle sertifikaya geçiş yapmanız gerekmez. Yenilenen
sertifika, ayırt edilen ad değiştirilene kadar orijinaliyle aynı yayıncı kimliğini korur. Ayırt edilen adın belirlenmesine
yönelik kullanılan sertifika niteliklerinin tam listesi için, bkz. “AIR yayıncı kimlikleri hakkında” sayfa 308.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 312
AIR uygulamalarını Dağıtma, Yükleme ve Çalıştırma
Terminoloji
Bu bölümde, uygulamanızı genel dağıtım için nasıl imzalamanız gerektiğine yönelik kararlar alırken anlamanız
gereken bazı anahtar sözcükleri kapsayan bir terimler sözlüğü bulunmaktadır.
Terim
Açıklama
Sertifika Yetkilisi (CA)
Güvenilen bir üçüncü taraf olarak hizmet veren ve sonunda bir ortak anahtar sahibinin kimliğini
onaylayan ortak anahtar altyapı ağındaki bir varlık. Normalde bir CA, sertifika sahibinin kimliğini
doğruladığını bildirmek için kendi özel anahtarıyla imzalanan dijital sertifikalar yayımlar.
Sertifika Uygulama Bildirimi (CPS)
Sertifika yetkilisinin sertifika yayımlama ve doğrulamaya ilişkin uygulamalarını ve politikalarını
ortaya koyar. CPS, CA ile aboneleri ve bağlı olduğu taraflar arasındaki anlaşmanın bir parçasıdır.
Ayrıca kimlik doğrulama politikalarını ve sağladıkları sertifikaların sunduğu güvence düzeyleri de
anlatır.
Sertifika İptal Listesi (CRL)
İptal edilen ve artık bağlı olunmaması gereken yayımlanmış sertifikaların bir listesi. AIR, bir AIR
uygulaması imzalandığında ve mevcut zaman damgası yoksa yine uygulama yüklendiğinde CRL'yi
kontrol eder.
Sertifika zinciri
Bir sertifika zinciri, zincirdeki her sertifikanın bir sonraki sertifika tarafından imzalandığı bir sertifika
sırası.
Dijital Sertifika
Sahibin kimliği, sahibin ortak anahtarı ve sertifikanın kendi kimliği hakkında bilgi içeren dijital bir
belge. Bir sertifika yetkilisi tarafından yayımlanan sertifika da, yayımlayan CA'ya ait bir sertifika
tarafından imzalanır.
Dijital İmza
Yalnızca ortak-özel anahtar çiftinin yarısı olan ortak anahtarla şifresi çözülebilen şifreli bir mesaj
veya özet. Bir PKI'de dijital imza, sonunda sertifika yetkilisine kadar izlenebilen bir veya daha fazla
dijital sertifika içerir. Kişinin yayımlayan sertifika yetkilisine, imzalayanın kimliğine güvendiğini
varsayarak, dijital imza bir mesajın (veya bilgisayar dosyasının) imzalandığından beri
değiştirilmediğini doğrulamak için kullanılabilir (kullanılan şifreleme algoritmasının sağladığı
güvence sınırları dahilinde).
Anahtar Deposu
Dijital sertifikaları ve bazı durumlarda ilgili özel anahtarları içeren veri tabanı.
Java Şifreleme Mimarisi (JCA)
Anahtar depolarını yönetmek ve bunlara erişmek için kullanılan genişletilebilir bir mimari. Daha
fazla bilgi için bkz. Java Şifreleme Mimarisi Başvuru Kılavuzu (Java Cryptography Architecture
Reference Guide).
PKCS #11
RSA Laboratuvarları'nın Şifreleme Belirteci Arabirim Standardı. Donanım belirteci tabanlı anahtar
deposu.
PKCS #12
RSA Laboratuvarları'nın Kişisel Bilgi Alışverişi Sözdizimi Standardı. Genellikle bir özel anahtarı ve
ilişkilendirilmiş dijital sertifikasını içeren dosya tabanlı anahtar deposu.
Özel Anahtar
İki parçalı ortak-özel anahtar asimetrik şifreleme sisteminin özel olan yarısı. Özel anahtar gizli
tutulmalıdır ve hiçbir zaman bir ağ üzerinden iletilmemelidir. Dijital olarak imzalanan mesajlar,
imzalayan tarafından özel anahtarla şifrelenir.
Ortak Anahtar
İki parçalı ortak-özel anahtar asimetrik şifreleme sisteminin ortak olan yarısı. Ortak anahtar
kullanıma açıktır ve özel anahtarla şifrelenen mesajların şifresini çözmek için kullanılır.
Ortak Anahtar Altyapısı (PKI)
Sertifika yetkililerinin ortak anahtar sahiplerinin kimliğini doğruladığı güven sistemi. Ağın
istemcileri, dijital bir mesajı (veya dosyayı) imzalayanın kimliğini doğrulamak için güvenilen bir CA
tarafından yayımlanan dijital sertifikalara güvenir.
Zaman damgası
Bir olayın gerçekleştiği tarihi ve saati içeren dijital olarak imzalanmış veri. ADT, zaman damgasını
AIR paketindeki RFC 3161 uyumlu zaman sunucusundan dahil edebilir. AIR mevcut olduğunda
zaman damgasını, sertifikanın imzalama sırasındaki geçerliliğini belirlemek için kullanır. Bu sayede
imzalayıcı sertifikasının süresi dolduktan sonra da AIR uygulaması yüklenebilir.
Zaman damgası yetkilisi
Zaman damgalarını yayımlayan yetkili. Bir zaman damgasının AIR tarafından tanınması için,
damganın RFC 3161 ile uyumlu olması ve zaman damgası imzasının yükleme bilgisayarındaki
güvenilen kök sertifikaya zincirle bağlı olması gerekir.
313
Bölüm 33: AIR uygulamalarını güncelleme
Kullanıcılar bilgisayarlarında veya tarayıcıdan (kesintisiz yükleme özelliğini kullanarak) bir AIR dosyasını çift
tıklatarak AIR uygulamasını yükleyebilir veya güncelleyebilir. The Adobe® AIR™ yükleyici uygulaması, kullanıcıyı
önceden var olan bir uygulamayı güncellemekte olduğuna ilişkin uyararak yüklemeyi yönetir. (Bkz. “AIR
uygulamalarını Dağıtma, Yükleme ve Çalıştırma” sayfa 298.)
Ancak, Updater sınıfını kullanarak kendini yeni sürüme güncelleyen yüklenmiş bir uygulamanız da olabilir.
(Yüklenmiş bir uygulama, yeni bir sürümün indirilmek ve yüklenmek üzere kullanılabilir olduğunu saptayabilir.)
Updater sınıfı, kullanıcının bilgisayarında yer alan bir AIR dosyasını göstermek ve bu sürüme güncellemenizi sağlayan
bir update() yöntemini içerir.
Güncelleme AIR dosyasının hem uygulama kimliği hem de yayıncı kimliği, güncellenecek uygulamanınkilerle
eşleşmelidir. Yayıncı kimliği imzalanan sertifikadan türetilir, yani hem güncelleme hem de güncellenecek uygulama,
aynı sertifikayla imzalanmış olmalıdır.
AIR 1.1 ve daha yeni sürümlerde, yeni bir kod imzalayıcı sertifika kullanmak için uygulamayı taşıyabilirsiniz. Yeni bir
imza kullanması için bir uygulamayı taşıma, hem yeni hem de orijinal sertifikayı içeren güncelleme AIR dosyasını
imzalamayı içerir. Sertifika taşıma, tek yönlü bir işlemdir. Taşımadan sonra, yalnızca yeni sertifikayla (veya her iki
dosyayla) imzalanan AIR dosyaları var olan bir yüklemeye güncellemeler olarak dikkate alınır.
Uygulama güncellemelerinin yönetilmesi karmaşık olabilir. AIR 1.5, Adobe® AIR™ uygulamaları için yeni güncelleme
çerçevesini içerir. Bu çerçeve, AIR uygulamalarında iyi güncelleme özellikleri sunmada geliştiricilere yardımcı olacak
API'ler sağlar.
Kendinden imzalı sertifikayı ticari kod imzalayan sertifika olarak değiştirmek veya bir kendinden imzalı veya ticari
sertifikadan diğerine geçmek için sertifika taşımayı kullanabilirsiniz. Sertifikayı taşımazsanız, var olan kullanıcılar yeni
sürümü yüklemeden önce geçerli uygulama sürümlerini kaldırmak zorunda kalır. Daha fazla bilgi için bkz.
“Sertifikaları değiştirme” sayfa 310.
Uygulamaları güncelleme hakkında
Updater sınıfı (flash.desktop paketindeki), geçerli uygulamanızı farklı bir sürümle güncellemek için kullanabileceğiniz
update() yöntemini içerir. Örneğin, kullanıcının masaüstünde bir AIR dosyası sürümü ("Sample_App_v2.air")
bulunuyorsa, aşağıdaki kod uygulamayı günceller:
var updater:Updater = new Updater();
var airFile:File = File.desktopDirectory.resolvePath("Sample_App_v2.air");
var version:String = "2.01";
updater.update(airFile, version);
Bir uygulama Updater sınıfını kullanmadan önce kullanıcı veya uygulama AIR dosyasının güncellenmiş sürümünü
bilgisayara indirmelidir. Daha fazla bilgi için bkz. “Kullanıcının bilgisayarına bir AIR dosyası indirme” sayfa 315.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 314
AIR uygulamalarını güncelleme
Updater.update() yöntem çağrısının sonuçları
Çalışma zamanındaki bir uygulama update() yöntemini çağırdığında, çalışma zamanı uygulamayı kapatır ve daha
sonra AIR dosyasından yeni sürümü yüklemeye çalışır. Çalışma zamanı, AIR dosyasında belirtilen uygulama kimliği
ve yayıncı kimliğinin update() yöntemini çağıran uygulamaya ilişkin uygulama kimliği ve yayıncı kimliğiyle eşleşip
eşleşmediğini kontrol eder. (Uygulama kimliği ve yayıncı kimliği hakkında bilgi için bkz. “AIR uygulamasının
özelliklerini ayarlama” sayfa 42.) Çalışma zamanı ayrıca, sürüm dizesinin update() yöntemine iletilen version
dizesiyle eşleşip eşleşmediğini kontrol eder. Yükleme başarıyla tamamlanırsa, çalışma zamanı uygulamanın yeni
sürümünü açar. Aksi halde (yükleme tamamlanamazsa), uygulamanın var olan (yükleme öncesi) sürümünü yeniden
açar.
Mac OS'de uygulamanın güncellenmiş bir sürümünü yüklemek için, kullanıcının uygulama dizinine yükemek için
yeterli sistem ayrıcalıklarına sahip olması gerekir. Windows ve Linux'ta, kullanıcı yönetici ayrıcalıklarına sahip
olmalıdır.
Uygulamanın güncellenmiş sürümü çalışma zamanının güncellenmiş sürümünü gerektiriyorsa, yeni çalışma zamanı
sürümü yüklenir. Kullanıcı, çalışma zamanını güncellemek için bilgisayara ilişkin yönetici ayrıcalıklarına sahip
olmalıdır.
ADL kullanarak uygulama test edilirken update() yönteminin çağrılması bir çalışma zamanı istisnasına neden olur.
Sürüm dizesi hakkında
update() yönteminin version parametresi olarak belirtilen dize, yüklenecek AIR dosyasına ilişkin uygulama
tanımlayıcı dosyasında bulunan ana application öğesinin version niteliğindeki dizeyle eşleşmelidir. Sürüm
parametresinin belirtilmesi, güvenlik nedenleri için gereklidir. Uygulamanın AIR dosyasında sürüm numarasını
doğrulaması istenerek, geçerli uygulamada giderilmiş olan bir güvenlik açığını içerebilecek daha eski bir sürümün
yanlışlıkla yüklenmesi engellenir. Uygulama, indirgeme saldırılarını engellemek için yüklenmiş uygulamadaki sürüm
dizesiyle AIR dosyasındaki sürüm dizesinin eşleşip eşleşmediğini de kontrol etmelidir.
Sürüm dizesi herhangi bir formatta olabilir. Örneğin, "2.01" veya "sürüm 2" olabilir. Bu dizenin formatına karar
vermek, siz uygulama geliştiricisine bırakılmıştır. Çalışma zamanı sürüm dizesini doğrulamaz; uygulama kodu, dizeyi
uygulamanın güncellenmesinden önce doğrulamalıdır.
Adobe AIR uygulaması web üzerinden bir AIR dosyası indirirse, web servisinin Adobe AIR uygulamasını indirilen
sürüme ilişkin bilgilendirebileceği bir mekanizmaya sahip olmak, iyi bir uygulamadır. Bu şekilde, uygulama dizeyi
update() yönteminin version parametresi olarak kullanabilir. AIR dosyası sürümünün bilinmediği diğer
yöntemlerle elde edildiyse, AIR uygulaması sürüm bilgisini belirlemek için AIR dosyasını inceleyebilir. (AIR dosyası,
sıkıştırılmış bir ZIP arşividir ve uygulama tanımlayıcı dosyası arşivdeki ikinci kayıttır.)
Uygulama tanımlayıcı dosyası hakkında ayrıntılar için bkz. “AIR uygulamasının özelliklerini ayarlama” sayfa 42.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 315
AIR uygulamalarını güncelleme
Özel uygulama güncelleme kullanıcı arabirimini sunma
AIR, varsayılan bir güncelleme arabirimi içerir:
Bu arabirim, her zaman kullanıcı bir uygulama sürümünü bilgisayara ilk yüklediğinde kullanılır. Ancak, sonraki
örneklerde kullanmak için kendi arabiriminizi tanımlayabilirsiniz. Uygulamanız özel bir güncelleme arabirimi
tanımlıyorsa, güncel olarak yüklü uygulamaya ilişkin uygulama tanımlayıcı dosyasında bir customUpdateUI öğesi
belirleyin:
<customUpdateUI>true</customUpdateUI>
Uygulama yüklendiğinde ve kullanıcı yüklenen uygulamayla eşleşen, uygulama kimliğine ve yayıncı kimliğine sahip
bir AIR dosyasını açtığında, çalışma zamanı varsayılan AIR uygulama yükleyicisi yerine uygulamayı açar. Daha fazla
bilgi için bkz. “Uygulama güncellemeleri için özel kullanıcı arabirimi sağlama” sayfa 49.
Uygulama, çalıştırıldığında (NativeApplication.nativeApplication nesnesi bir load olayı gönderdiğinde),
uygulamanın güncellenip güncellenmeyeceğine karar verebilir (Updater sınıfını kullanarak). Güncellemeye karar
verirse, kullanıcıya kendi yükleme arabirimini (çalışan standart arabirimden farklı olan) sunabilir.
Kullanıcının bilgisayarına bir AIR dosyası indirme
Updater sınıfını kullanmak için, kullanıcı veya uygulama önce kullanıcının bilgisayarına bir AIR dosyasını yerel olarak
kaydetmelidir.
Not: AIR 1.5, geliştiricilere AIR uygulamalarında iyi güncelleme özellikleri sağlamada yardımcı olan bir güncelleme
çerçevesi içerir. Bu çerçeveyi kullanmak, doğrudan Update sınıfının update() yöntemini kullanmaktan çok daha kolay
olabilir. Ayrıntılar için bkz. “Güncelleme çerçevesini kullanma” sayfa 316.
Aşağıdaki kod bir URL'den AIR dosyasını okur(http://example.com/air/updates/Sample_App_v2.air) ve AIR
dosyasını uygulama depo dizinine kaydeder:
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 316
AIR uygulamalarını güncelleme
var urlString:String = "http://example.com/air/updates/Sample_App_v2.air";
var urlReq:URLRequest = new URLRequest(urlString);
var urlStream:URLStream = new URLStream();
var fileData:ByteArray = new ByteArray();
urlStream.addEventListener(Event.COMPLETE, loaded);
urlStream.load(urlReq);
function loaded(event:Event):void {
urlStream.readBytes(fileData, 0, urlStream.bytesAvailable);
writeAirFile();
}
function writeAirFile():void {
var file:File = File.applicationStorageDirectory.resolvePath("My App v2.air");
var fileStream:FileStream = new FileStream();
fileStream.open(file, FileMode.WRITE);
fileStream.writeBytes(fileData, 0, fileData.length);
fileStream.close();
trace("The AIR file is written.");
}
Daha fazla bilgi için bkz. “Dosyaları okuma ve dosyalara yazma için iş akışı” sayfa 117.
Uygulamanın ilk kez çalışıp çalışmadığını görmek için
kontrol edin
Uygulamayı güncelledikten sonra kullanıcıya bir “başlangıç” veya “hoşgeldiniz” mesajı sunmak isteyebilirsiniz.
Başlatmadan sonra, uygulama mesajın görüntülenip görüntülenmeyeceğini belirlemek için ilk kez çalışıp
çalışmadığını kontrol eder.
Not: AIR 1.5, geliştiricilere AIR uygulamalarında iyi güncelleme özellikleri sağlamada yardımcı olan bir güncelleme
çerçevesi içerir. Bu çerçeve, bir uygulama sürümünün ilk kez çalışıp çalışmadığını kontrol etmek için kolay yöntemler
sağlar. Ayrıntılar için bkz. “Güncelleme çerçevesini kullanma” sayfa 316.
Bunu yapmanın bir yolu, uygulamanın başlatılmasından sonra uygulama depo dizinine bir dosya kaydetmektir.
Uygulama her başladığında, bu dosyanın mevcudiyetini kontrol etmelidir. Dosya mevcut değilse, uygulama geçerli
kullanıcı için ilk kez çalışmaktadır. Dosya mevcutsa, uygulama önceden en az bir kez çalışmıştır. Dosya mevcutsa ve
geçerli sürüm numarasından daha eski bir sürüm numarası içeriyorsa, kullanıcının yeni sürümü ilk kez çalıştığını
bilirsiniz.
Uygulamanız verileri yerel olarak (örneğin, uygulama depo dizinine) kaydediyorsa, ilk çalıştırmadan sonra önceden
kaydedilmiş veri (önceki sürümlerden) olup olmadığını kontrol etmek isteyebilirsiniz.
Güncelleme çerçevesini kullanma
Uygulama güncellemelerinin yönetilmesi karmaşık olabilir. AdobeAIR uygulamalarına ilişkin güncelleme çerçevesi,
geliştiricileri AIR uygulamalarında iyi güncelleme özellikleri sağlamak üzere destekleyen API'ler sunar. AIR
güncelleme çerçevesindeki işlevler, geliştiricilere şu şekilde yardımcı olur:
• Bir aralık temelinde veya kullanıcının isteği üzerine dönemsel olarak güncellemeleri kontrol etme
• Web kaynağından AIR dosyalarını (güncellemeleri) indirme
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 317
AIR uygulamalarını güncelleme
• Yeni yüklenen sürümün ilk çalıştırılmasında kullanıcıyı uyarma
• Kullanıcının güncellemeleri kontrol etmek istediğini teyit etme
• Yeni güncelleme sürümü hakkındaki bilgileri kullanıcıya gösterme
• İndirme ilerlemesi ve hata bilgisini kullanıcıya gösterme
AIR güncelleme çerçevesi, uygulamanızın kullanabileceği bir örnek kullanıcı arabirimi sağlar. Kullanıcıya temel
bilgileri ve uygulama güncellemelerine ilişkin seçenekleri sunar. Uygulamanız, güncelleme çerçevesiyle birlikte
kullanmak üzere kendi özel kullanıcı arabirimini de tanımlayabilir.
AIR güncelleme çerçevesi, AIR uygulamasının güncelleme sürümü hakkındaki bilgiyi basit XML yapılandırma
dosyalarında saklamanıza olanak verir. Çoğu uygulama için, bu yapılandırma dosyalarını ayarlamak ve bazı temel
kodları dahil etmek son kullanıcıya iyi güncelleme işlevleri sağlar.
Adobe AIR, AIR uygulamalarının güncelleme çerçevesini kullanmadan bile yeni sürümlere yükseltilebileceği bir
Updater sınıfı içerir. Bu sınıf, bir uygulamanın kullanıcının bilgisayarındaki AIR dosyasında yer alan bir sürüme
yükseltilmesine olanak verir. Ancak, yükseltme yönetimi yalnızca yerel olarak saklanan bir AIR dosyasına dayanan
uygulama güncellemesini yapmaktan daha fazlasını içerebilir.
AIR güncelleme çerçevesindeki dosyalar
AIR güncelleme çerçevesi aşağıdaki dizinleri içerir:
• doc—AIR güncelleme çerçevesine ilişkin (şu anda okumakta olduğunuz) belgeler.
• frameworks—Bu dizin Flex geliştirmesine ilişkin SWC dosyalarını ve HTML geliştirmesine ilişkin SWF dosyalarını
içerir. Daha fazla bilgi için şu bölümlere bakınız:
• “Flex geliştirme ortamınızı ayarlama” sayfa 317
• “Çerçeve dosyalarını HTML tabanlı bir AIR uygulamasına dahil etme” sayfa 318
• samples—Bu dizin, uygulama güncelleme çerçevesinin nasıl kullanılacağını gösteren Flex ve HTML tabanlı
örnekler içerir. Herhangi bir AIR uygulamasında yapacağınız şekilde, bu dosyaları derleyin ve test edin.
• templates—Bu dizin, örnek güncelleme tanımlayıcı dosyalarını (basit ve yerelleştirilmiş) ve yapılandırma
dosyalarını içerir. (Bu dosyalar hakkında daha fazla bilgi için bkz. Flex geliştirme ortamınızı ayarlama ve “Temel
örnek: ApplicationUpdaterUI sürümünü kullanma” sayfa 318.)
Flex geliştirme ortamınızı ayarlama
Güncelleme çerçevesinin frameworks/flex dizini şu dosyaları içerir:
• ApplicationUpdater.swc—Herhangi bir kullanıcı arabirimi olmadan güncelleme kitaplığının temel işlevlerini
tanımlar
• ApplicationUpdater_UI.swc—Uygulamanızın güncelleme seçeneklerini görüntülemek için kullanabileceği bir
kullanıcı arabirimi dahil, temel güncelleme kitaplığı işlevlerini tanımlar
SWC dosyaları, Flex geliştirmesinde kullanabileceğiniz sınıfları tanımlar.
Flex SDK ile derleme sırasında güncelleme çerçevesini kullanmak için ApplicationUpdater.swc veya
ApplicationUpdater_UI.swc dosyasını amxmlc derleyicisine yapılan çağrıya dahil edin. Derleyici, aşağıdaki örnekte
Flex SDK dizininin lib alt dizininde yer alan ApplicationUpdater.swc dosyasını yükler:
amxmlc -library-path+=lib/ApplicationUpdater.swc
-- myApp.mxml
Derleyici, aşağıdaki örnekte Flex SDK dizininin lib alt dizininde yer alan ApplicationUpdater_UI.swc dosyasını yükler:
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 318
AIR uygulamalarını güncelleme
amxmlc -library-path+=lib/ApplicationUpdater_UI.swc
-- myApp.mxml
Flex yapıcısı aracılığıyla geliştirme yaparken, SWC dosyasını Özellikler iletişim kutusundaki Flex Build Path
ayarlarının Library Path sekmesine ekleyin.
SWC dosyalarını amxmlc derleyicisinde (Flex SDK kullanarak) veya Flex Builder'da başvuracağınız dizine
kopyaladığınızdan emin olun.
Çerçeve dosyalarını HTML tabanlı bir AIR uygulamasına dahil etme
Güncelleme çerçevesinin frameworks/html dizini şu SWF dosyalarını içerir:
• ApplicationUpdater.swf—Herhangi bir kullanıcı arabirimi olmadan güncelleme kitaplığının temel işlevlerini
tanımlar
• ApplicationUpdater_UI.swf—Uygulamanızın güncelleme seçeneklerini görüntülemek için kullanabileceği bir
kullanıcı arabirimi dahil, temel güncelleme kitaplığı işlevlerini tanımlar
AIR uygulamalarındaki JavaScript kodu, SWF dosyalarında tanımlanan sınıfları kullanabilir.
Güncelleme çerçevesini kullanmak için ApplicationUpdater.swf veya ApplicationUpdater_UI.swf dosyasını uygulama
dizininize (veya bir alt dizine) dahil edin. Daha sonra, çerçeveyi kullanacak HTML dosyasına (JavaScript kodunda),
dosyayı yükleyen bir script etiketini dahil edin.
<script src="applicationUpdater.swf" type="application/x-shockwave-flash"/>
Veya ApplicationUpdater_UI.swf dosyasını yüklemek için script etiketini kullanın:
<script src="ApplicationUpdater_UI.swf" type="application/x-shockwave-flash"/>
Bu iki dosyada tanımlanan API, bu belgenin devamında açıklanmıştır.
Temel örnek: ApplicationUpdaterUI sürümünü kullanma
Güncelleme çerçevesinin ApplicationUpdaterUI sürümü, uygulamanızda kolayca kullanabileceğiniz basit bir arabirim
sunar. Aşağıdaki, temel bir örnektir.
Önce, güncelleme çerçevesini çağıran bir AIR uygulaması oluşturun:
1 Uygulamanız HTML tabanlı bir AIR uygulamasıysa, ApplicationUpdaterUI.js dosyasını yükleyin:
<script src="ApplicationUpdater_UI.swf" type="application/x-shockwave-flash"/>
2 AIR uygulama program mantığınızda, bir ApplicationUpdaterUI nesnesini başlatın.
ActionScript'te şu kodu kullanın:
var appUpdater:ApplicationUpdaterUI = new ApplicationUpdaterUI();
JavaScript'te şu kodu kullanın:
var appUpdater = new runtime.air.update.ApplicationUpdaterUI();
Bu kodu uygulama yüklendiğinde yürütülen bir başlatma işlevine eklemek isteyebilirsiniz.
3 updateConfig.xml adlı bir metin dosyası oluşturun ve bu dosyaya aşağıdakini ekleyin:
<?xml version="1.0" encoding="utf-8"?>
<configuration xmlns="http://ns.adobe.com/air/framework/update/configuration/1.0">
<url>http://example.com/updates/update.xml</url>
<delay>1</delay>
</configuration>
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 319
AIR uygulamalarını güncelleme
updateConfig.xml dosyasının URL öğesini web sunucunuzdaki güncelleme tanımlayıcı dosyasının son konumuyla
eşleşecek biçimde düzenleyin. (Sonraki yordama bakın.)
delay, uygulamanın kontroller ve güncellemeler arasında beklediği gün sayısıdır.
4 updateConfig.xml dosyasını AIR uygulamanızın proje dizinine ekleyin.
5 Updater nesnesinin updateConfig.xml dosyasına başvurmasını sağlayın ve nesnenin initialize() yöntemini
çağırın.
ActionScript'te şu kodu kullanın:
appUpdater.configurationFile = new File("app:/updateConfig.xml");
appUpdater.initialize();
JavaScript'te şu kodu kullanın:
appUpdater.configurationFile = new air.File("app:/updateConfig.xml");
appUpdater.initialize();
6 İlk uygulamadan farklı bir sürüme sahip olan AIR uygulamasının ikinci sürümünü oluşturun. (Sürüm, uygulama
tanımlayıcı dosyasında, version öğesinde belirtilmiştir.)
Daha sonra, AIR uygulamasının güncelleme sürümünü web sunucunuza ekleyin:
1 AIR dosyasının güncelleme sürümünü web sunucunuza yerleştirin.
2 updateDescriptor.xml adlı bir metin dosyası oluşturun ve bu dosyaya aşağıdakini ekleyin:
<?xml version="1.0" encoding="utf-8"?>
<update xmlns="http://ns.adobe.com/air/framework/update/description/1.0">
<version>1.1</version>
<url>http://example.com/updates/sample_1.1.air</url>
<description>This is the latest version of the Sample application.</description>
</update>
updateDescriptor.xml dosyasının version, URL ve description öğelerini güncelleme AIR dosyanızla eşleşecek
biçimde düzenleyin.
3 updateDescriptor.xml dosyasını güncelleme AIR dosyasını içeren aynı web sunucusu dizinine ekleyin.
Bu temel bir örnektir, ancak çoğu uygulama için yeterli olan güncelleme işlevlerini sağlar. Bu belgenin devamı,
güncelleme çerçevesini ihtiyaçlarınıza en uygun şekilde nasıl kullanabileceğinizi açıklar.
Güncelleme çerçevesi kullanımının başka bir örneği için, Adobe AIR geliştirici merkezinde yer alan aşağıdaki örnek
uygulamaya bakın: Flash tabanlı bir Uygulamada Güncelleme Çerçevesi
(http://www.adobe.com/go/learn_air_qs_update_framework_flash_tr).
Güncelleme tanımlayıcı dosyasını tanımlama ve AIR dosyasını web
sunucunuza ekleme
AIR güncelleme çerçevesini kullandığınızda, web sunucunuzda saklanan bir güncelleme tanımlayıcı dosyasında
bulunan güncelleme hakkında temel bilgileri tanımlarsınız. Güncelleme tanımlayıcı dosyası, basit bir XML dosyasıdır.
Uygulamada yer alan güncelleme çerçevesi, yeni bir sürümün yüklenip yüklenmediğini görmek için bu dosyayı
kontrol eder.
Güncelleme tanımlayıcı dosyası aşağıdaki verileri içerir:
•
version—AIR uygulamasının yeni sürümü. Yeni AIR uygulama tanımlayıcı dosyasında sürüm olarak kullanılan
dizenin aynısı olmalıdır. Güncelleme tanımlayıcı dosyasının sürümü, güncelleme AIR dosyasının sürümüyle
eşleşmiyorsa, güncelleme çerçevesi istisna verir.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 320
AIR uygulamalarını güncelleme
•
url—Güncelleme AIR dosyasının konumu. Bu, AIR uygulamasının güncelleme sürümünü içeren dosyadır.
•
description—Yeni sürüme ilişkin ayrıntılar. Bu bilgi, güncelleme işlemi sırasında kullanıcıya gösterilebilir.
version ve url öğeleri zorunludur. description öğesi isteğe bağlıdır.
Örnek bir güncelleme tanımlayıcı dosyası:
<?xml version="1.0" encoding="utf-8"?>
<update xmlns="http://ns.adobe.com/air/framework/update/description/1.0">
<version>1.1a1</version>
<url>http://example.com/updates/sample_1.1a1.air</url>
<description>This is the latest version of the Sample application.</description>
</update>
Birden çok dil kullanarak description etiketini tanımlamak istiyorsanız, bir lang niteliği tanımlayan birden çok
text öğesi kullanın:
<?xml version="1.0" encoding="utf-8"?>
<update xmlns="http://ns.adobe.com/air/framework/update/description/1.0">
<version>1.1a1</version>
<url>http://example.com/updates/sample_1.1a1.air</url>
<description>
<text xml:lang="en">English description</text>
<text xml:lang="fr">French description</text>
<text xml:lang="ro">Romanian description</text>
</description>
</update>
Güncelleme tanımlayıcı dosyasını web sunucunuzda güncelleme AIR dosyasıyla birlikte konumlandırın.
Güncelleme tanımlayıcısına dahil olan templates dizini örnek güncelleme tanımlayıcı dosyaları içerir. Bunlar tek dilli
ve çok dilli sürümler içerir.
Updater nesnesini başlatma
AIR güncelleme çerçevesini kodunuza yükledikten sonra (bkz. “Flex geliştirme ortamınızı ayarlama” sayfa 317 ve
“Çerçeve dosyalarını HTML tabanlı bir AIR uygulamasına dahil etme” sayfa 318), aşağıdaki örnekte olduğu gibi bir
updater nesnesini başlatmanız gerekir:
var appUpdater:ApplicationUpdater = new ApplicationUpdater();
Önceki kod ApplicationUpdater sınıfını kullanır (kullanıcı arabirimi sağlamayan). ApplicationUpdaterUI sınıfını
kullanmak istiyorsanız (kullanıcı arabirimi sağlayan), aşağıdakini kullanın:
var appUpdater:ApplicationUpdaterUI = new ApplicationUpdaterUI();
Bu belgenin devamında yer alan kod, appUpdater adlı bir updater nesnesini başlattığınızı varsayar.
Güncelleme ayarlarını yapılandırma
Hem ApplicationUpdater hem de ApplicationUpdaterUI uygulamayla birlikte verilen bir yapılandırma dosyası
yoluyla veya uygulamadaki ActionScript ya da JavaScript aracılığıyla yapılandırılabilir.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 321
AIR uygulamalarını güncelleme
Güncelleme ayarlarını XML yapılandırma dosyasında tanımlama
Güncelleme yapılandırma dosyası, bir XML dosyasıdır. Aşağıdaki öğeleri içerebilir:
•
updateURL— Bir Dize. Güncelleme tanımlayıcısının uzak sunucudaki konumunu temsil eder. Herhangi bir geçerli
URLRequest konumu olanaklıdır. Konfigürasyon dosyası veya komut dosyası aracılığıyla updateURL özelliğini
tanımlamalısınız (bkz. “Güncelleme tanımlayıcı dosyasını tanımlama ve AIR dosyasını web sunucunuza ekleme”
sayfa 319). Güncelleyiciyi kullanmadan önce bu özelliği tanımlamanız gerekir (“Güncelleme çerçevesini başlatma”
sayfa 323) bölümünde tanımlandığı biçimde updater nesnesinin initialize() yöntemini çağırmadan önce).
•
delay—Bir Sayı. Güncellemeleri kontrol etmek için gün cinsinden (0.25 gibi değerler geçerlidir) verilen zaman
aralığını temsil eder. 0 değeri (varsayılan değer), güncelleyicinin otomatik bir dönemsel kontrol
gerçekleştirmediğini belirtir.
ApplicationUpdaterUI için yapılandırma dosyası, updateURL ve delay öğelerinin yanı sıra aşağıdaki öğeyi içerebilir:
•
defaultUI: Bir dialog öğeleri listesi. Her dialog öğesi, kullanıcı arabiriminde iletişim kutusuna karşılık gelen bir
name niteliği içerir. Herdialog öğesi, iletişim kutusunun görünür olup olmadığını tanımlayan bir visible
niteliğine sahiptir. Varsayılan olarak true değerindedir. name niteliği için olası değerler şöyledir:
•
"checkForUpdate"—Güncellemeyi Kontrol Et, Güncelleme Yok ve Hatayı Güncelle iletişim kutularına
karşılık gelir
•
•
"downloadUpdate"—Güncellemeyi İndir iletişim kutusuna karşılık gelir
•
"downloadProgress"—İndirme İlerlemesi ve İndirme Hatası iletişim kutularına karşılık gelir
•
"installUpdate"—Güncellemeyi Yükle iletişim kutusuna karşılık gelir
•
"fileUpdate"—Dosya Güncelleme, Dosya Güncellemesi Yok ve Dosya Hatası iletişim kutularına karşılık gelir
"unexpectedError"—Beklenmeyen Hata iletişim kutusuna karşılık gelir
false olarak ayarlandığında, karşılık gelen iletişim kutusu güncelleme yordamının bölümü olarak görünmez.
Burada, ApplicationUpdater çerçevesine ilişkin yapılandırma dosyasının bir örneği bulunur:
<?xml version="1.0" encoding="utf-8"?>
<configuration xmlns="http://ns.adobe.com/air/framework/update/configuration/1.0">
<url>http://example.com/updates/update.xml</url>
<delay>1</delay>
</configuration>
Burada, defaultUI öğesi için tanım içeren ApplicationUpdaterUI çerçevesine ilişkin yapılandırma dosyasının bir
örneği bulunur.
<?xml version="1.0" encoding="utf-8"?>
<configuration xmlns="http://ns.adobe.com/air/framework/update/configuration/1.0">
<url>http://example.com/updates/update.xml</url>
<delay>1</delay>
<defaultUI>
<dialog name="checkForUpdate" visible="false" />
<dialog name="downloadUpdate" visible="false" />
<dialog name="downloadProgress" visible="false" />
</defaultUI>
</configuration>
configurationFile özelliğini bu dosyanın bulunduğu konuma çevirin: aşağıdaki gibi
• ActionScript:
appUpdater.configurationFile = new File("app:/cfg/updateConfig.xml");
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 322
AIR uygulamalarını güncelleme
• JavaScript:
appUpdater.configurationFile = new air.File("app:/cfg/updateConfig.xml");
Güncelleme çerçevesinin templates dizini, örnek bir yapılandırma dosyası olan config-template.xml dosyasını içerir.
Güncelleme ayarları ActionScript veya JavaScript kodunu tanımlama
Bu yapılandırma parametreleri, uygulamadaki kodu aşağıdaki şekilde kullanarak da ayarlanabilir:
appUpdater.updateURL = " http://example.com/updates/update.xml";
appUpdater.delay = 1;
Updater nesnesi updateURL ve delay özelliklerine sahiptir. Bu özellikler, yapılandırma dosyasındaki updateURL ve
delay öğeleriyle aynı özellikleri tanımlar: güncelleme tanımlayıcı dosyasının URL'si ve güncellemeleri kontrol etmek
için aralık. Kodda bir yapılandırma dosyası ve ayarlarını tanımladığınızda, kod kullanılarak ayarlanan tüm özellikler
yapılandırma dosyasında karşılık gelen ayarların yanında önceliğe sahip olur.
Güncelleyiciyi kullanmadan önce (updater nesnesinin initialize() yöntemini “Güncelleme çerçevesini başlatma”
sayfa 323 bölümündeki şekilde çağırmadan önce) yapılandırma dosyası veya komut dosyası yoluyla updateURL
özelliğini tanımlamalısınız (bkz. “Güncelleme tanımlayıcı dosyasını tanımlama ve AIR dosyasını web sunucunuza
ekleme” sayfa 319).
ApplicationUpdaterUI çerçevesi, updater nesnesinin bu ek özelliklerini tanımlar.
•
isCheckForUpdateVisible—Güncellemeyi Kontrol Et, Güncelleme Yok ve Hatayı Güncelle iletişim kutularına
karşılık gelir
•
isDownloadUpdateVisible—Güncellemeyi İndir iletişim kutusuna karşılık gelir
•
isDownloadProgressVisible—İndirme İlerlemesi ve İndirme Hatası iletişim kutularına karşılık gelir
•
isInstallUpdateVisible—Güncellemeyi Yükle iletişim kutusuna karşılık gelir
•
isFileUpdateVisible—Dosya Güncelleme, Dosya GüncellemesiYok ve Dosya Hatası iletişim kutularına karşılık gelir
•
isUnexpectedErrorVisible—Beklenmeyen Hata iletişim kutusuna karşılık gelir
Her özellik, ApplicationUpdaterUI kullanıcı arabiriminde bir veya daha çok iletişim kutusuna karşılık gelir. Her
özellik varsayılan olarak true değerine sahip olan bir Boolean değeridir. false olarak ayarlandığında, karşılık gelen
iletişim kutuları güncelleme yordamının parçası olarak görüntülenmez.
Bu iletişim kutusu özellikleri, güncelleme yapılandırma dosyasındaki ayarları geçersiz kılar.
Güncelleme işlemi
AIR güncelleme çerçevesi, güncelleme işlemlerini aşağıdaki adımlarla tamamlar:
1 Güncelleyicinin başlatılması, tanımlanan gecikme aralığı içinde güncelleme kontrolünün gerçekleştirilip
gerçekleştirilmediğini kontrol eder (bkz. “Güncelleme ayarlarını yapılandırma” sayfa 320). Güncelleme
kontrolünün zamanı geldiğinde, güncelleme işlemi devam eder.
2 Güncelleyici, güncelleme tanımlayıcı dosyasını indirir ve yorumlar.
3 Güncelleyici, güncelleme AIR dosyasını indirir.
4 Güncelleyici, uygulamanın güncel sürümünü yükler.
Updater nesnesi, bu adımların her biri tamamlandığında olaylar gönderir. ApplicationUpdater sürümünde, işlemdeki
bir adımın başarıyla tamamlandığını gösteren olayları iptal edebilirsiniz. Bu olaylardan birini iptal ettiğinizde, işlemin
sonraki adımı iptal edilir. Güncelleyici, ApplicationUpdaterUI sürümünde kullanıcının işlemin her adımında iptal
etmesine veya devam etmesine olanak sağlayan bir iletişim kutusu sunar.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 323
AIR uygulamalarını güncelleme
Olayı iptal ederseniz, işleme devam etmek için updater nesnesinin yöntemlerini çağırabilirsiniz.
Güncelleyicinin ApplicationUpdater sürümü güncelleme işlemi boyunca ilerledikçe, güncel durumunu
currentState özelliğinde kaydeder. Bu özellik, aşağıdaki olası değerlere sahip bir dizeye ayarlanır:
•
"UNINITIALIZED"—Güncelleyici başlatılmadı.
•
"INITIALIZING"—Güncelleyici başlatılıyor.
•
"READY"—Güncelleyici başlatıldı
•
"BEFORE_CHECKING"—Güncelleyici, güncelleme tanımlayıcı dosyası için henüz kontrol edilmedi.
•
"CHECKING"—Güncelleyici, güncelleme tanımlayıcı dosyası için kontrol ediliyor.
•
"AVAILABLE"—Güncelleme tanımlayıcı dosyası mevcut.
•
"DOWNLOADING"—Güncelleyici, AIR dosyasını indiriyor.
•
"DOWNLOADED"—Güncelleyici, AIR dosyasını indirdi.
•
"INSTALLING"—Güncelleyici, AIR dosyasını yüklüyor.
•
"PENDING_INSTALLING"—Güncelleyici başlatıldı ve bekleyen güncellemeler mevcut.
Updater nesnesinin bazı yöntemleri yalnızca güncelleyici belirli bir durumda olduğunda yürütülür.
Güncelleme çerçevesini başlatma
Yapılandırma özelliklerini ayarladıktan sonra (bkz. “Temel örnek: ApplicationUpdaterUI sürümünü kullanma”
sayfa 318), güncellemeyi başlatmak için initialize() yöntemini çağırın:
appUpdater.initialize();
Bu yöntem şunu yapar:
• Senkronize olarak bekleyen güncellemeleri sessizce yüklerken, güncelleme çerçevesini başlatır. Bu yöntem,
çağrıldığında uygulamayı yeniden başlatabileceğinden, uygulamanın başlatılması sırasında çağrılmalıdır.
• Ertelenen bir güncelleme olup olmadığını kontrol eder ve bunu yükler;
• Güncelleme işlemi sırasında hata oluştuğunda, uygulama depo alanından güncelleme dosyasını ve sürüm bilgisini
temizler.
• Gecikmenin süresi dolduğunda güncelleme işlemini başlatır. Aksi halde, zamanlayıcıyı yeniden başlatır.
Bu yöntemin çağrılması, updater nesnesinin aşağıdaki olayları göndermesiyle sonuçlanabilir:
•
UpdateEvent.INITIALIZED—Başlatma tamamlandığında gönderilir.
•
ErrorEvent.ERROR—Başlatma sırasında hata olduğunda gönderilir.
UpdateEvent.INITIALIZED olayı gönderildiğinde, güncelleme işlemi tamamlanmıştır.
initialize() yöntemini çağırdığınızda, güncelleyici güncelleme işlemini başlatır ve zamanlayıcı gecikme ayarını
temel alarak tüm adımları tamamlar. Ancak, her zaman updater nesnesinin checkNow() yöntemini çağırarak
güncelleme işlemini başlatabilirsiniz.
appUpdater.checkNow();
Güncelleme işlemi zaten çalışıyorsa, bu yöntem etkisizdir. Aksi halde, güncelleme işlemini başlatır.
Updater nesnesi, checkNow() yönteminin çağrılmasının sonucu olarak aşağıdaki olayı gönderebilir:
• Güncelleme tanımlayıcı dosyasını indirmeye çalışmadan hemen önce UpdateEvent.CHECK_FOR_UPDATE olayı.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 324
AIR uygulamalarını güncelleme
checkForUpdate olayını iptal ederseniz, updater nesnesinin checkForUpdate() yöntemini çağırabilirsiniz. (Bkz.
sonraki bölüm.) Olayı iptal etmezseniz, güncelleme işlemi güncelleme tanımlayıcı dosyasını kontrol etmeye devam eder.
ApplicationUpdaterUI sürümünde güncelleme işlemini yönetme
Kullanıcı, ApplicationUpdaterUI sürümünde, kullanıcı arabiriminin iletişim kutularındaki İptal düğmeleri yoluyla
işlemi iptal edebilir. Ayrıca, ApplicationUpdaterUI nesnesinin cancelUpdate() yöntemini çağırarak da güncelleme
işlemini programlama yoluyla iptal edebilirsiniz.
Güncelleyicinin hangi iletişim kutusu teyitlerini görüntülediğini belirlemek için ApplicationUpdaterUI nesnesinin
özelliklerini ayarlayabilir veya güncelleme yapılandırma dosyasındaki öğeleri tanımlayabilirsiniz. Ayrıntılar için bkz.
“Güncelleme ayarlarını yapılandırma” sayfa 320.
ApplicationUpdater sürümünde güncelleme işlemini yönetme
Güncelleme işleminin adımlarını iptal etmek için ApplicationUpdater nesnesi tarafından gönderilen olay nesnelerinin
preventDefault() yöntemini çağırabilirsiniz (bkz. “Güncelleme işlemi” sayfa 322). Varsayılan davranışın iptal
edilmesi, uygulamanıza kullanıcının devam etmek isteyip istemediğini soran bir mesaj görüntüleme şansı verir.
Aşağıdaki adımlar, güncelleme işleminin bir adımı iptal edildiğinde işleme nasıl devam edileceğini açıklar.
Güncelleme tanımlayıcı dosyasını indirme ve yorumlama
ApplicationUpdater nesnesi, checkForUpdate olayını güncelleme işlemi başlamadan, güncelleyici güncelleme
tanımlayıcı dosyasını indirmeye çalışmadan hemen önce gönderir. checkForUpdate olayının varsayılan davranışını
iptal ederseniz, güncelleyici güncelleme tanımlayıcı dosyasını indirmez. Güncelleme işlemine devam etmek için
checkForUpdate() yöntemini çağırabilirsiniz:
appUpdater.checkForUpdate();
checkForUpdate() yönteminin çağrılması güncelleyicinin güncelleme tanımlayıcı dosyasını senkronize olmayan
biçimde indirmesine ve yorumlamasına neden olur. Güncelleyici, checkForUpdate() yönteminin çağrılmasının
sonucu olarak aşağıdaki olayları gönderebilir:
•
StatusUpdateEvent.UPDATE_STATUS—Güncelleyici güncelleme tanımlayıcı dosyasını başarıyla indirdi ve
yorumladı. Bu olay şu özelliklere sahiptir:
•
available—Bir Boolean değeri. Güncel uygulamanın sürümünden farklı bir sürüm mevcut olduğunda true
olarak; aksi halde (sürüm aynıysa) false olarak ayarlıdır.
•
version—Bir Dize. Güncelleme dosyasının uygulama tanımlayıcı dosyasından sürüm
•
details—Bir Dizi. Tanımlamanın yerelleştirilmiş sürümleri mevcutsa, bu dizi ilk öğe olarak boş bir dize ("")
ve ikinci öğe olarak tanımı içerir.
Tanımın birden çok sürümü mevcutsa (güncelleme tanımlayıcı dosyasında), bu dizi birden çok alt dizi içerir.
Her dizi iki öğeye sahiptir: ilk öğe dil kodu (örn. "en") ve ikinci öğe bu dile karşılık gelen tanımdır (bir Dize).
Bkz. “Güncelleme tanımlayıcı dosyasını tanımlama ve AIR dosyasını web sunucunuza ekleme” sayfa 319.
•
StatusUpdateErrorEvent.UPDATE_ERROR—Hata oluştu ve güncelleyici güncelleme tanımlayıcı dosyasını
indiremedi veya yorumlayamadı.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 325
AIR uygulamalarını güncelleme
Güncelleme AIR dosyasını indirme
Güncelleyici güncelleme tanımlayıcı dosyasını başarıyla indirip yorumladıktan sonra, ApplicationUpdater nesnesi
updateStatus olayını gönderir. Varsayılan davranış, mevcutsa güncelleme dosyasını indirmeye başlamaktır.
Varsayılan davranışı iptal ederseniz, güncelleme işlemine devam etmek için downloadUpdate() yöntemini
çağırabilirsiniz:
appUpdater.downloadUpdate();
Bu yöntemin çağrılması, güncelleyicinin AIR dosyasının güncel sürümünü senkronize olmayan biçimde indirmesine
neden olur.
downloadUpdate() yöntemi aşağıdaki olayları gönderebilir:
•
UpdateEvent.DOWNLOAD_START—Sunucuya bağlantı kuruldu. ApplicationUpdaterUI kitaplığı kullanılırken, bu
olay indirme ilerlemesini izleyen bir ilerleme çubuğu içeren bir iletişim penceresi görüntüler.
•
ProgressEvent.PROGRESS—Dosya indirme ilerlerken düzenli aralıklarla gönderilir.
•
DownloadErrorEvent.DOWNLOAD_ERROR—Güncelleme dosyasına bağlanma veya bu dosyayı indirme sırasında
hata oluştuğunda gönderilir. Ayrıca geçersiz HTTP durumlarında gönderilir. (Örn. “404 - Dosya bulunamadı”.) Bu
olay, ek hata bilgilerini tanımlayan bir tam sayı olan errorID özelliğini içerir. Ek subErrorID özelliği, daha fazla
bilgi içerir.
•
UpdateEvent.DOWNLOAD_COMPLETE—Güncelleyici güncelleme tanımlayıcı dosyasını başarıyla indirdi ve
yorumladı. Bu olayı iptal etmezseniz, ApplicationUpdater sürümü, güncel sürümü yüklemeye devam eder.
ApplicationUpdaterUI sürümünde, kullanıcıya devam etme ve etmeme seçeneklerini veren bir iletişim kutusu
sunulur.
Uygulamayı güncelleme
ApplicationUpdater nesnesi, güncelleme dosyasının indirilmesi tamamlandığında downloadComplete olayını
gönderir. Varsayılan davranışı iptal ederseniz, güncelleme işlemine devam etmek için installUpdate() yöntemini
çağırabilirsiniz:
appUpdater.installUpdate(file);
Bu yöntemin çağrılması, güncelleyicinin AIR dosyasının güncel sürümünü yüklemesine neden olur. Bu yöntem,
güncelleme olarak AIR dosyasına referans veren bir File nesnesi olan tek bir file parametresi içerir.
ApplicationUpdater nesnesi, installUpdate() yöntemini çağırmanın bir sonucu olarak beforeInstall olayını
gönderebilir:
•
UpdateEvent.BEFORE_INSTALL—Güncellemenin yüklenmesinden hemen önce gönderilir. Bazen, güncelleme
devam etmeden kullanıcının geçerli çalışmayı tamamlayabilmesi için, bu sırada güncellemenin yüklenmesini
önlemek yararlıdır. Event nesnesinin preventDefault() yönteminin çağrılması, yüklemeyi bir sonraki yeniden
başlatmaya kadar erteler ve ek güncelleme işlemi başlatılamaz. (Bunlar, checkNow() yönteminin çağrılması veya
dönemsel kontrol sonucu oluşan güncellemeleri kapsar.)
Rastgele bir AIR dosyasından yükleme
Kullanıcının bilgisayarındaki bir AIR dosyasından yüklemek üzere güncel sürümü yüklemek için
installFromAIRFile() yöntemini çağırabilirsiniz:
appUpdater.installFromAIRFile();
Bu yöntem, güncelleyicinin AIR dosyasından uygulamanın güncel sürümünü yüklemesine neden olur.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 326
AIR uygulamalarını güncelleme
installFromAIRFile() yöntemi aşağıdaki olayları gönderebilir:
•
StatusFileUpdateEvent.FILE_UPDATE_STATUS—ApplicationUpdater, dosyayı installFromAIRFile()
yöntemini kullanarak başarıyla doğruladıktan sonra gönderilir. Bu olay, aşağıdaki özelliklere sahiptir.
•
available—Güncel uygulamanın sürümünden farklı bir sürüm mevcut olduğunda true olarak; aksi halde
(sürüm aynıysa) false olarak ayarlıdır.
•
version —Yeni kullanılabilir sürümü temsil eden dize.
•
path—Güncelleme dosyasının yerel yolunu temsil eder.
StatusFileUpdateEvent nesnesinin mevcut özelliği true olarak ayarlandığında bu olayı iptal edebilirsiniz. Bu olayın
iptal edilmesi, güncellemenin ilerlemesini iptal eder. İptal edilen güncellemeye devam etmek için
installUpdate() yöntemini çağırın.
•
StatusFileUpdateErrorEvent.FILE_UPDATE_ERROR—Hata oluştu ve güncelleyici AIR uygulamasını
yükleyemedi.
Güncelleme işlemini iptal etme
Güncelleme işlemini iptal etmek için cancelUpdate() yöntemini çağırabilirsiniz:
appUpdater.cancelUpdate();
Bu yöntem, tüm eksik indirilen dosyaları silerek, bekleyen tüm indirmeleri iptal eder ve dönemsel kontrol
zamanlayıcısını yeniden başlatır.
Updater nesnesi başlatılıyorsa, bu yöntem etkisizdir.
ApplicationUpdaterUI arabirimini yerelleştirme
ApplicationUpdaterUI sınıfı, güncelleme işlemi için varsayılan bir kullanıcı arabirimi sağlar. Bu, kullanıcının işlemi
başlatmasına, işlemi iptal etmesine ve diğer ilgili işlemleri gerçekleştirmesine olanak sağlayan iletişim kutularını içerir.
Güncelleme tanımlayıcı dosyasının description öğesi, uygulama açıklamasını farklı dillerde tanımlamanızı sağlar.
Aşağıdaki gibi lang niteliklerini tanımlayan birden çok text öğesi kullanın:
<?xml version="1.0" encoding="utf-8"?>
<update xmlns="http://ns.adobe.com/air/framework/update/description/1.0">
<version>1.1a1</version>
<url>http://example.com/updates/sample_1.1a1.air</url>
<description>
<text xml:lang="en">English description</text>
<text xml:lang="fr">French description</text>
<text xml:lang="ro">Romanian description</text>
</description>
</update>
Güncelleme çerçevesi, son kullanıcının yerelleştirme zincirine en çok uyan tanımı kullanır. Daha fazla bilgi için bkz.
Güncelleme tanımlayıcı dosyasını tanımlama ve AIR dosyasını web sunucunuza ekleme.
Flex geliştiricileri, doğrudan "ApplicationUpdaterDialogs" paketine yeni bir dil ekleyebilir.
JavaScript geliştiricileri, updater nesnesinin addResources() yöntemini çağırabilir. Bu yöntem, bir dil için dinamik
olarak yeni bir kaynak paketi ekler. Kaynak paketi, bir dile ilişkin yerelleştirilmiş dizeleri tanımlar. Bu dizeler, çeşitli
iletişim kutusu metin alanlarında kullanılır.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 327
AIR uygulamalarını güncelleme
JavaScript geliştiricileri, kullanıcı arabirimi tarafından kullanılan yerel ayar zincirini tanımlamak için
ApplicationUpdaterUI sınıfının localeChain özelliğini kullanabilir. Genellikle yalnızca JavaScript (HTML)
geliştiricileri bu özelliği kullanır. Flex geliştiricileri, yerel ayar zincirini yönetmek için ResourceManager kullanabilir.
Örneğin, aşağıdaki JavaScript kodu Rumence ve Macarca için kaynak paketlerini tanımlar:
appUpdater.addResources("ro_RO",
{titleCheck: "Titlu", msgCheck: "Mesaj", btnCheck: "Buton"});
appUpdater.addResources("hu", {titleCheck: "Cím", msgCheck: "Üzenet"});
var languages = ["ro", "hu"];
languages = languages.concat(air.Capabilities.languages);
var sortedLanguages = air.Localizer.sortLanguagesByPreference(languages,
air.Capabilities.language,
"en-US");
sortedLanguages.push("en-US");
appUpdater.localeChain = sortedLanguages;
Ayrıntılar için bkz. dil başvurusudaki ApplicationUpdaterUI sınıfının addResources() yöntemi.
328
Bölüm 34: AIR uygulamalarını
yerelleştirme
Adobe® AIR™ 1.1 birden çok dil desteği içerir.
Yerelleştirmeye giriş
Yerelleştirme, birden çok yerel ayarı desteklemek için varlıkları ekleme işlemidir. Yerel ayar, dil ve ülke kodunun
kombinasyonudur. Örneğin en_US Birleşik Devletler'de konuşulan İngilizceyi, fr_FR Fransa'da konuşulan Fransızcayı
belirtir. Bu yerel ayarlar için bir uygulamayı yerelleştirmek üzere iki varlık kümesi sağlarsınız: biri en_US yerel ayarı,
diğeri fr_FR yerel ayarı için.
Yerel ayarlar dilleri paylaşabilir. Örneğin en_US ve en_GB (İngiltere) farklı yerel ayarlardır. Bu durumda her iki yerel
ayar da İngilizce dilini kullanır, ancak ülke kodu onların farklı yerel ayarlar olduğunu ve bu nedenle farklı varlıklar
kullanabileceklerini gösterir. Örneğin en_US yerel ayarındaki bir uygulama "color" kelimesini yazabilir, ancak aynı
kelime en_GB yerel ayarında "colour" şeklindedir. Ayrıca para birimleri yerel ayara bağlı olarak dolar veya pound
biçimindedir ve tarih ve saat formatı da farklı olabilir.
Ayrıca ülke kodunu belirtmeden de bir dil için bir varlık kümesi sağlayabilirsiniz. Örneğin, İngilizce dili için en
varlıkları ve en_US yerel ayarı için de ABD İngilizcesi'ne özgü ek varlıklar sağlayabilirsiniz.
AIR SDK bir HTML Yerelleştirme Çerçevesi (AIRLocalizer.js dosyasında bulunan) sağlar. Bu çerçeve birden çok yerel
ayarla çalışmaya yardımcı olan API'ler içerir. Ayrıntılar için bkz. “HTML içeriğini yerelleştirme” sayfa 329.
Yerelleştirme, uygulamanızda kullanılan dizeleri çevirmenin ötesinde bir işlemdir. Ses dosyaları, görüntüler ve
videolar gibi her tür varlığı içerebilir.
Uygulama yükleyicisindeki uygulama adını ve
açıklamasını yerelleştirme
Uygulama tanımlayıcı dosyasındaki name ve description öğeleri için birden çok dil belirtebilirsiniz. Örneğin
aşağıdaki örnek, uygulama adını üç dilde belirtir (İngilizce, Fransızca ve Almanca):
<name>
<text xml:lang="en">Sample 1.0</text>
<text xml:lang="fr">Échantillon 1.0</text>
<text xml:lang="de">Stichprobe 1.0</text>
</name>
Her metin öğesinin xml:lang niteliği, RFC4646'da da (http://www.ietf.org/rfc/rfc4646.txt) tanımlandığı gibi bir dil
kodu belirtir.
Ad öğesi, AIR uygulama yükleyicisinin görüntülediği uygulama adını tanımlar. AIR uygulama yükleyicisi, işletim
sistemi ayarları tarafından belirtilen kullanıcı arabirimi dilleriyle en iyi eşleşen yerelleştirilmiş değeri kullanır.
Benzer şekilde uygulama tanımlayıcı dosyasındaki description öğesinin de çok dilli sürümlerini belirtebilirsiniz. Bu
öğe, AIR uygulama yükleyicisinin görüntülediği açıklama metnini tanımlar.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 329
AIR uygulamalarını yerelleştirme
Bu ayarlar yalnızca AIR uygulama yükleyicisinde kullanılabilir olan diller için geçerlidir. Çalışan, yüklü uygulama için
kullanılabilir olan yerel ayarları belirtmez. AIR uygulamaları, AIR uygulama yükleyicisinde kullanılabilir olanlar da
dahil olmak üzere ve bunlara ek olarak birden çok dili destekleyen kullanıcı arabirimleri sağlayabilir.
Daha fazla bilgi için bkz. “Uygulama tanımlayıcı dosyasında özellikleri tanımlama” sayfa 43.
Bir yerel ayar seçme
Uygulamanızın hangi yerel ayarı kullandığını belirlemek için, aşağıdaki yöntemlerden birini kullanabilirsiniz:
• Kullanıcı istemi — Uygulamayı varsayılan bir yerel ayarda başlatıp, ardından kullanıcıdan tercih ettiği yerel ayarı
seçmesini isteyebilirsiniz.
•
Capabilities.languages — Capabilities.languages özelliği, işletim sistemi üzerinden ayarlandığı şekilde
kullanıcının tercih edilen dillerinde bulunan dillerin bir dizisini listeler. Dizeler RFC4646
(http://www.ietf.org/rfc/rfc4646.txt) tarafından tanımlanan dil etiketleri içerir (varsa komut ve bölge bilgileri).
Dizeler sınırlayıcı olarak tire kullanır (örneğin "en-US" veya "ja-JP"). Döndürülen dizideki ilk giriş, language
özelliğiyle aynı birincil dil kimliğine sahipti. Örneğin languages[0]"en-US" olarak ayarlıysa, language özelliği
şu şekilde ayarlıdır: "en". Ancak language özelliği "xu" (bilinmeyen bir dili belirtir) olarak ayarlıysa, languages
dizisindeki ilk öğe farklı olur.
•
Capabilities.language — Capabilities.language özelliği, işletim sisteminin kullanıcı arabirimi dil kodunu
sağlar. Ancak bu özellik 20 bilinen dille sınırlıdır. İngilizce sistemlerde bu özellik yalnızca dil kodunu döndürür,
ülke kodunu döndürmez. Bu nedenlerden ötürü, Capabilities.languages dizisindeki ilk öğeyi kullanmak daha
yararlıdır.
Flaş içeriğini yerelleştirme
Flash CS3 ve Flash CS4, ActionScript 3.0 bileşenlerinde bir Locale sınıfı içerir. Locale sınıfı sayesinde, bir SWF
dosyasının çok dilli bir metni nasıl görüntülediğini kontrol edebilirsiniz. Flash Dizeler paneli sayesinde, dinamik
metin alanlarında dize sabit değerleri yerine dize kimliklerini kullanabilirsiniz. Bu sayede, dile özgü bir XML
dosyasından yüklenen metni görüntüleyen bir SWF dosyası oluşturabilirsiniz. Locale sınıfını kullanma hakkında bilgi
için, bkz. Flash ActionScript 3.0 Language and Components Reference (ActionScript 3.0 Dil ve Bileşenler Başvurusu).
HTML içeriğini yerelleştirme
AIR 1.1 SDK, bir HTML yerelleştirme çerçevesi içerir. AIRLocalizer.js JavaScript dosyası çerçeveyi tanımlar. AIR
SDK'nin çerçeveler dizini, AIRLocalizer.js dosyasını içerir. Bu dosya, birden çok yerelleştirilmiş sürümü destekleyen
uygulamalar oluşturma konusuna yardımcı olmak için işlevler sağlayan air.Localizer sınıfını içerir.
AIR HTML yerelleştirme çerçevesi kodunu yükleme
Yerelleştirme çerçevesini kullanmak için, AIRLocalizer.js dosyasını projenize kopyalayın. Ardından bu dosyayı bir
komut dosyası etiketi kullanarak uygulamanın ana HTML dosyasına ekleyin:
<script src="AIRLocalizer.js" type="text/javascript" charset="utf-8"></script>
Sonraki JavaScript air.Localizer.localizer nesnesini çağırabilir:
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 330
AIR uygulamalarını yerelleştirme
<script>
var localizer = air.Localizer.localizer;
</script>
air.Localizer.localizer nesnesi, yerelleştirilmiş kaynakları kullanma ve yönetme için yöntemler ve özellikler
tanımlayan tek nesnedir. Localizer sınıfı aşağıdaki yöntemleri içerir:
Yöntem
Açıklama
getFile()
Belirli bir yerel ayar için belirtilen kaynak paketinin metnini alır. Bkz. “Belirli yerel ayarlar için kaynak alma”
sayfa 335.
getLocaleChain()
Dilleri yerel ayar zincirinde döndürür. Bkz. “Yerel ayar zincirini tanımlama” sayfa 334.
getResourceBundle()
Paket anahtarlarını ve karşılık gelen değerleri nesne olarak döndürür. Bkz. “Belirli yerel ayarlar için kaynak
alma” sayfa 335.
getString()
Bir kaynak için tanımlı olan dizeyi alır. Bkz. “Belirli yerel ayarlar için kaynak alma” sayfa 335.
setBundlesDirectory(
)
Paket dizini konumunu ayarlar. Bkz. “AIR HTML Localizer ayarlarını özelleştirme” sayfa 334.
setLocalAttributePre
fix()
HTML DOM öğelerinde kullanılan yerelleştirici nitelikleri tarafından kullanılan öneki ayarlar. Bkz. “AIR HTML
Localizer ayarlarını özelleştirme” sayfa 334
setLocaleChain()
Yerel ayar zincirinde dillerin sırasını ayarlar. Bkz. “Yerel ayar zincirini tanımlama” sayfa 334.
sortLanguagesByPrefe
rence()
Yerel ayar zincirindeki yerel ayarları, işletim sistemi ayarlarındaki yerel ayar sırasına bağlı olarak sıralar. Bkz.
“Yerel ayar zincirini tanımlama” sayfa 334.
update()
HTML DOM'yi (veya bir DOM öğesini) geçerli yerel ayar zincirindeki yerelleştirilmiş dizelerle günceller. Yerel
ayar zinciriyle ilgili bilgi için, bkz. “Yerel ayar zincirlerini yönetme” sayfa 331. update() yöntemi hakkında
daha fazla bilgi için, bkz. “DOM öğelerini geçerli yerel ayarı kullanmak üzere güncelleme” sayfa 333.
Localizer sınıfı aşağıdaki statik özellikleri içerir:
Özellik
Açıklama
localizer
Uygulama için tek Localizer nesnesine bir başvuru döndürür.
ultimateFallbackLocale
Uygulama hiçbir kullanıcı tercihini desteklemediğinde kullanılan yerel ayar. Bkz.
“Yerel ayar zincirini tanımlama” sayfa 334.
Kaynak paketlerini tanımlama
HTML yerelleştirme çerçevesi yerelleştirme dosyalarından dizelerin yerelleştirilmiş sürümlerini okur. Yerelleştirme
dosyası, bir metin dosyasında serileştirilmiş anahtar tabanlı değerlerin bir koleksiyonudur. Yerelleştirme dosyasına
bazen paket de denir.
Uygulama projesi dizininizin locale (yerel ayar) adlı bir alt dizinini oluşturun. (Farklı bir ad da kullanabilirsiniz, bkz.
“AIR HTML Localizer ayarlarını özelleştirme” sayfa 334.) Bu dizin yerelleştirme dosyalarını içerir. Bu dizin paketler
dizini olarak bilinir.
Uygulamanızın desteklediği her yerel ayar için, paketler dizininin bir alt dizinini oluşturun. Her alt dizini yerel ayar
koduyla eşleşecek şekilde adlandırın. Örneğin French (Fransız) alt dizinini “fr” ve English (İngiliz) alt dizinini “en”
olarak adlandırın. Dil ve ülke kodu olan bir yerel ayarı tanımlamak için alt çizgi (_) karakterini kullanabilirsiniz.
Örneğin U.S. English (Amerikan İngilizcesi) dizinini “en_us” olarak adlandırın. (Alternatif olarak alt çizgi yerine, “enus” örneğinde olduğu gibi tire de kullanabilirsiniz. HTML yerelleştirme çerçevesi her ikisini de destekler.)
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 331
AIR uygulamalarını yerelleştirme
Bir yerel ayar alt dizinine istediğiniz sayıda kaynak dosya ekleyebilirsiniz. Genellikle her dil için bir yerelleştirme
dosyası oluşturursunuz (ve dosyayı ilgili dilin dizinine yerleştirirsiniz). HTML yerelleştirme çerçevesi, bir dosyanın
içeriğini okumanızı sağlayan bir getFile() yöntemi içerir (bkz. “Belirli yerel ayarlar için kaynak alma” sayfa 335.
.properties dosya uzantısına sahip dosyalar, yerelleştirme özellik dosyaları olarak bilinir. Bir yerel ayar için anahtar
değer çiftleri tanımlamak üzere onları kullanabilirsiniz. Özellikler dosyası, her satırda bir dize değeri tanımlar.
Örneğin aşağıdaki örnekte dize değeri "Hello in English."greeting adlı anahtar için tanımlanır:
greeting=Hello in English.
Aşağıdaki metni içeren bir özellikler dosyası, altı anahtar değer çifti tanımlar:
title=Sample Application
greeting=Hello in English.
exitMessage=Thank you for using the application.
color1=Red
color2=Green
color3=Blue
Bu örnek özellikler dosyasının, en dizininde saklanacak olan İngilizce sürümünü gösterir.
Bu Özellikler dosyasının Fransızca sürümü fr dizinine konur.
title=Application Example
greeting=Bonjour en français.
exitMessage=Merci d'avoir utilisé cette application.
color1=Rouge
color2=Vert
color3=Bleu
Farklı bilgi türleri için birden fazla kaynak dosya tanımlayabilirsiniz. Örneğin bir legal.properties dosyası yasal ortak
metin içerebilir (telif hakkı bilgileri gibi). Bu kaynağı birden fazla uygulamada tekrar kullanmak isteyebilirsiniz. Benzer
şekilde, kullanıcı arabiriminin farklı kısımları için yerelleştirilmiş içerik tanımlayan ayrı dosyalar tanımlayabilirsiniz.
Bu dosyalarda, birden fazla dili desteklemek için UTF-8 kodlaması kullanın.
Yerel ayar zincirlerini yönetme
Uygulamanız AIRLocalizer.js dosyasını yüklediğinde, uygulamanızda tanımlı olan yerel ayarları inceler. Bu yerel
ayarlar, paketler dizininin alt dizinlerine karşılık gelir (bkz. “Kaynak paketlerini tanımlama” sayfa 330). Kullanılabilir
yerel ayarların listesi yerel ayar zinciri olarak bilinir. AIRLocalizer.js dosyası yerel ayar zincirini, işletim sistemi ayarları
tarafından tanımlanmış tercih edilen sırayı temel alarak sıralar. (Capabilities.languages özelliği, işletim sistemi
kullanıcı arabirimi dillerini tercih edilen sırada listeler.)
Dolayısıyla bir uygulama "en", "en_US" ve "en_UK" yerel ayarları için kaynak tanımlarsa, AIR HTML Localizer
çerçevesi yerel ayar zincirini uygun şekilde sıralar. Bir uygulama "en" öğesini birincil yerel ayar olarak bildiren bir
sistemde başladığında, yerel ayar zinciri ["en", "en_US", "en_UK"] şeklinde sıralanır. Bu durumda uygulama
kaynakları önce "en" paketinde, sonra "en_US" paketinde arar.
Ancak sistem "en-US" öğesini birincil yerel ayar olarak bildirirse, sıralama ["en_US", "en", en_UK"] şeklindedir.
Bu durumda uygulama kaynakları önce "en_US" paketinde, sonra "en" paketinde arar.
Varsayılan olarak uygulama yerel ayar zincirindeki ilk yerel ayarı, kullanılacak varsayılan yerel ayar olarak tanımlar.
Uygulamayı ilk kez çalıştırdıktan sonra kullanıcıdan bir yerel ayar seçmesini isteyebilirsiniz. Ardından seçimi bir
tercihler dosyasında saklamayı ve uygulamanın bir sonraki başlatılışında bu yerel ayarı kullanmayı seçebilirsiniz.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 332
AIR uygulamalarını yerelleştirme
Uygulamanız kaynak dizeleri yerel ayar zincirindeki herhangi bir yerel ayarda kullanabilir. Belirli bir yerel ayar bir
kaynak dize tanımlamazsa, uygulama, yerel ayar zincirinde tanımlı olan diğer yerel ayarlar için bir sonraki eşleşen
kaynak dizeyi kullanır.
Localizer nesnesinin setLocaleChain() yöntemini çağırarak yerel ayar zincirini özelleştirebilirsiniz. Bkz. “Yerel ayar
zincirini tanımlama” sayfa 334.
DOM öğelerini yerelleştirilmiş içerikle güncelleme
Uygulamadaki bir öğe, yerelleştirme özellikleri dosyasındaki bir anahtar değere başvurabilir. Örneğin aşağıdaki
örnekte bulunan title öğesi, bir local_innerHTML niteliğini belirtir. Yerelleştirme çerçevesi, yerelleştirilen bir
değeri aramak için bu niteliği kullanır. Çerçeve varsayılan olarak "local_" ile başlayan nitelik adları arar. Çerçeve,
"local_" ifadesinin arkasından gelen metinle eşleşen adlara sahip nitelikleri günceller. Bu durumda çerçeve, title
öğesinin innerHTML niteliğini ayarlar. innerHTML niteliği, varsayılan özellikler dosyasındaki (default.properties)
mainWindowTitle anahtarı için tanımlı olan değeri kullanır:
<title local_innerHTML="default.mainWindowTitle"/>
Geçerli yerel ayar eşleşen bir değer tanımlamazsa, yerelleştirici çerçevesi yerel ayar zincirinin kalanını arar. Yerel ayar
zincirinde bir değerin tanımlı olduğu bir sonraki yerel ayarı kullanır.
Aşağıdaki örnekte p öğesinin metni (innerHTML niteliği), varsayılan özellikler dosyasında tanımlanan greeting
anahtarının değerini kullanır:
<p local_innerHTML="default.greeting" />
Aşağıdaki örnekte, input öğesinin değer niteliği (ve görüntülenen metin), varsayılan özellikler dosyasında tanımlanan
btnBlue anahtarının değerini kullanır:
<input type="button" local_value="default.btnBlue" />
HTML DOM'yi geçerli yerel ayar zincirinde tanımlı olan dizeleri kullanmak üzere güncellemek için, Localizer
nesnesinin update() yöntemini çağırın. update() yöntemini çağırmak Localizer nesnesinin DOM'yi ayrıştırmasına
ve yerelleştirme ("local_...") niteliklerini bulduğu konumda işlemeleri uygulamasına neden olur:
air.Localizer.localizer.update();
Hem bir nitelik ("innerHTML" gibi) hem de karşılık gelen yerelleştirme niteliği için ("local_innerHTML" gibi) değer
tanımlayabilirsiniz. Bu durumda yerelleştirme çerçevesi, yerelleştirme zincirinde karşılık gelen bir değer bulursa,
yalnızca nitelik değerinin üzerine yazar. Örneğin aşağıdaki öğe hem value hem de local_value niteliklerini
tanımlar:
<input type="text" value="Blue" local_value="default.btnBlue"/>
Yalnızca belirli bir DOM öğesini de güncelleyebilirsiniz. Bir sonraki bölüm olan “DOM öğelerini geçerli yerel ayarı
kullanmak üzere güncelleme” sayfa 333 bölümüne bakın.
AIR HTML Localizer "local_" ifadesini varsayılan olarak bir öğenin yerelleştirme ayarlarını tanımlayan nitelikler
için önek olarak kullanır. Örneğin local_innerHTML niteliği varsayılan olarak bir öğenin innerHTML değeri için
kullanılan paket ve kaynak adını tanımlar. Ayrıca local_value niteliği varsayılan olarak bir öğenin value niteliği için
kullanılan paket ve kaynak adını da tanımlar. Localizer öğesini "local_" dışında bir nitelik öneki kullanmak üzere
yapılandırabilirsiniz. Bkz. “AIR HTML Localizer ayarlarını özelleştirme” sayfa 334.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 333
AIR uygulamalarını yerelleştirme
DOM öğelerini geçerli yerel ayarı kullanmak üzere güncelleme
Localizer nesnesi HTML DOM'yi güncellediğinde, işaretli öğelerin, geçerli yerel ayar zincirinde tanımlı dizelere dayalı
olan nitelik değerlerini kullanmasına neden olur. HTML yerelleştiricisinin HTML DOM'yi güncellemesi için,
Localizer nesnesinin update() yöntemini çağırın:
air.Localizer.localizer.update();
Yalnızca belirtilen bir DOM öğesini güncellemek için, update() yöntemine bir parametre olarak iletin. update()
yöntemi yalnızca parentNode adlı, isteğe bağlı bir parametreye sahiptir. parentNode parametresi belirtildiğinde,
yerelleştirilecek DOM öğesini tanımlar. update() yöntemini çağırmak ve bir parentNode parametresi belirtmek,
yerelleştirme niteliklerini belirten tüm alt öğeler için yerelleştirilen değerleri ayarlar.
Örneğin aşağıdaki div öğesine bakın:
<div id="colorsDiv">
<h1 local_innerHTML="default.lblColors" ></h1>
<p><input type="button" local_value="default.btnBlue" /></p>
<p><input type="button" local_value="default.btnRed" /></p>
<p><input type="button" local_value="default.btnGreen" /></p>
</div>
Bu öğeyi geçerli yerel ayar zincirinde tanımlı yerelleştirilmiş dizeleri kullanmak üzere güncellemek için, aşağıdaki
JavaScript kodunu kullanın:
var divElement = window.document.getElementById("colorsDiv");
air.Localizer.localizer.update(divElement);
Yerel ayar zincirinde bir anahtar değer bulunmazsa, yerelleştirme çerçevesi nitelik değerini "local_" niteliğinin
değerine ayarlar. Örneğin bir önceki örnekte, yerelleştirme çerçevesinin lblColors anahtarı için bir değer
bulamadığını varsayın (yerel ayar zincirindeki hiçbir default.properties dosyasında). Bu durumda innerHTML değeri
olarak "default.lblColors" öğesini kullanır. Bu değeri kullanmak eksik kaynaklar olduğunu (geliştiriciye) belirtir.
update() yöntemi, yerel ayar zincirinde kaynak bulamadığında bir resourceNotFound olayı gönderir.
air.Localizer.RESOURCE_NOT_FOUND sabiti, "resourceNotFound" dizesini tanımlar. Olayın üç özelliği vardır:
bundleName, resourceName ve locale. bundleName özelliği, kaynak bulunamayan paketin adıdır. resourceName
özelliği, kaynak bulunamayan paketin adıdır. locale özelliği, kaynak bulunamayan yerel ayarın adıdır.
update() yöntemi, belirtilen paketi bulamadığında bir bundleNotFound olayı gönderir.
air.Localizer.BUNDLE_NOT_FOUND sabiti, "bundleNotFound" dizesini tanımlar. Olayın iki özelliği vardır:
bundleName ve locale. bundleName özelliği, kaynak bulunamayan paketin adıdır. locale özelliği, kaynak
bulunamayan yerel ayarın adıdır.
update() yöntemi senkronize olmayan bir şekilde çalışır (ve resourceNotFound ve bundleNotFound olaylarını
senkronize olmayan bir şekilde gönderir). Aşağıdaki kod resourceNotFound ve bundleNotFound olayları için olay
dinleyicilerini ayarlar:
air.Localizer.localizer.addEventListener(air.Localizer.RESOURCE_NOT_FOUND, rnfHandler);
air.Localizer.localizer.addEventListener(air.Localizer.BUNDLE_NOT_FOUND, rnfHandler);
air.Localizer.localizer.update();
function rnfHandler(event)
{
alert(event.bundleName + ": " + event.resourceName + ":." + event.locale);
}
function bnfHandler(event)
{
alert(event.bundleName + ":." + event.locale);
}
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 334
AIR uygulamalarını yerelleştirme
AIR HTML Localizer ayarlarını özelleştirme
Localizer nesnesinin setBundlesDirectory() yöntemi sayesinde paketlerin dizin yolunu özelleştirebilirsiniz.
Localizer nesnesinin setLocalAttributePrefix() yöntemi sayesinde paketlerin dizin yolunu ve Localizer
tarafından kullanılan nitelik değerini özelleştirebilirsiniz.
Varsayılan paketler dizini, uygulama dizininin yerel ayar alt dizini olarak tanımlanır. Localizer nesnesinin
setBundlesDirectory() yöntemini çağırarak başka bir dizin de belirtebilirsiniz. Bu yöntem için path adlı bir
parametre gereklidir, bu parametre, bir dize olarak istenilen paketler dizinine giden yoldur. path parametresinin
değeri şunlardan biri olabilir:
•
"locales" gibi, uygulama dizinine göreceli bir yol tanımlayan bir Dize
•
"app://languages" gibi, app, app-storage veya file URL şemalarını kullanan geçerli bir URL tanımlayan bir
Dize (http URL şemasını kullanmayın)
• Bir File nesnesi
URL'ler ve dizin yolları hakkında bilgi için, bkz. “File nesnelerinin Yolları” sayfa 103.
Örneğin aşağıdaki kod paketler dizinini, uygulama depolama dizininin (uygulama dizininin değil) diller alt dizinine
ayarlar:
air.Localizer.localizer.setBundlesDirectory("languages");
path parametresi olarak geçerli bir yol iletin. Aksi takdirde yöntem bir BundlePathNotFoundError istisnası atar.
Hatanın name özelliği "BundlePathNotFoundError" öğesidir ve message özelliği geçersiz yolu belirtir.
AIR HTML Localizer "local_" ifadesini varsayılan olarak bir öğenin yerelleştirme ayarlarını tanımlayan nitelikler
için önek olarak kullanır. Örneğin local_innerHTML niteliği, aşağıdaki input öğesinin innerHTML değeri için
kullanılan paket ve kaynak adını tanımlar:
<p local_innerHTML="default.greeting" />
Localizer nesnesinin setLocalAttributePrefix() yöntemi sayesinde, "local_" dışında bir nitelik öneki
kullanabilirsiniz. Bu statik yöntem için, nitelik öneki olarak kullanmak istediğiniz dize olan bir parametre gereklidir.
Örneğin aşağıdaki kod, yerelleştirme çerçevesini, "loc_" ifadesini nitelik öneki olarak kullanmak üzere ayarlar:
air.Localizer.localizer.setLocalAttributePrefix("loc_");
Yerelleştirme çerçevesinin kullandığı nitelik önekini özelleştirebilirsiniz. Varsayılan değer ("local_"), kodunuzun
kullandığı başka bir nitelikle çakışıyorsa, öneki özelleştirmek isteyebilirsiniz. Bu yöntemi çağırırken, HTML nitelikleri
için geçerli karakterler kullandığınızdan emin olun. (Örneğin değer boşluk karakteri içermemelidir.)
Yerelleştirme niteliklerini HTML öğelerinde kullanma hakkında bilgi için, bkz. “DOM öğelerini yerelleştirilmiş
içerikle güncelleme” sayfa 332.
Paketler dizini ve nitelik öneki ayarları, farklı uygulama oturumları arasında kalıcı değildir. Özel paketler dizini veya
nitelik öneki ayarı kullanıyorsanız, uygulama her başladığında ayarı yeniden yaptığınızdan emin olun.
Yerel ayar zincirini tanımlama
AIRLocalizer.js kodunu yüklediğinizde, varsayılan olarak varsayılan yerel ayar zincirini ayarlar. Paketler dizininde ve
işletim sistemi dil ayarlarında bulunan yerel ayarlar, bu yerel ayar zincirini tanımlar. (Ayrıntılar için bkz. “Yerel ayar
zincirlerini yönetme” sayfa 331.)
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 335
AIR uygulamalarını yerelleştirme
Localizer nesnesinin statik setLocaleChain() yöntemini çağırarak, yerel ayar zincirini değiştirebilirsiniz. Örneğin,
kullanıcı belirli bir dil için bir tercih belirtirse, bu yöntemi çağırmak isteyebilirsiniz. setLocaleChain() yöntemi için
chain adlı bir parametre gereklidir, bu parametre ["fr_FR","fr","fr_CA"] gibi bir yerel ayarlar dizisidir. Yerel
ayarların dizideki sırası, çerçevenin kaynak arama sırasını belirler (sonraki işlemlerde). Zincirdeki ilk yerel ayar için
kaynak bulunmazsa, diğer yerel ayarların kaynaklarına bakmaya devam eder. chain argümanı eksikse, bir dizi değilse
veya boş bir diziyse, işlev başarısız olur ve bir IllegalArgumentsError istisnası atar.
Localizer nesnesinin statik getLocaleChain() yöntemi, geçerli yerel ayar zincirindeki yerel ayarları listeleyen bir Dizi
döndürür.
Aşağıdaki kod geçerli yerel ayar zincirini okur ve zincirin başına iki Fransız yerel ayar ekler:
var currentChain = air.Localizer.localizer.getLocaleChain();
newLocales = ["fr_FR", "fr"];
air.Localizer.localizer.setLocaleChain(newLocales.concat(currentChain));
setLocaleChain() yöntemi yerel ayar zincirini güncellediğinde bir "change" olayı gönderir.
air.Localizer.LOCALE_CHANGE sabiti, "change" dizesini tanımlar. Olayın localeChain adlı bir özelliği vardır, bu,
yeni yerel ayar zincirindeki yerel ayar kodlarının bir dizisidir. Aşağıdaki kod bu olay için bir olay dinleyicisi ayarlar:
var currentChain = air.Localizer.localizer.getLocaleChain();
newLocales = ["fr_FR", "fr"];
localizer.addEventListener(air.Localizer.LOCALE_CHANGE, changeHandler);
air.Localizer.localizer.setLocaleChain(newLocales.concat(currentChain));
function changeHandler(event)
{
alert(event.localeChain);
}
Statik air.Localizer.ultimateFallbackLocale özelliği, uygulama hiçbir kullanıcı tercihini desteklemediğinde
kullanılan yerel ayarı temsil eder. Varsayılan olarak "en" değerindedir. Aşağıdaki kodda gösterildiği gibi, başka bir
yerel ayara ayarlayabilirsiniz:
air.Localizer.ultimateFallbackLocale = "fr";
Belirli yerel ayarlar için kaynak alma
Localizer nesnesinin getString() yöntemi, belirli bir yerel ayardaki kaynak için tanımlı olan dizeyi döndürür.
Yöntemi çağırırken bir locale değeri belirtmeniz gerekmez. Bu durumda yöntem yerel ayar zincirinin tamamına
bakar ve belirli kaynak adını sağlayan ilk yerel ayardaki dizeyi döndürür. Bu yöntem aşağıdaki parametrelere sahiptir:
Parametre
Açıklama
bundleName
Kaynağı içeren paket. Bu, .properties uzantısı olmadan özellikler dosyasının dosya
adıdır. (Örneğin bu parametre "alerts" olarak ayarlanırsa, Localizer kodu
alerts.properties adlı yerelleştirme dosyalarına bakar.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 336
AIR uygulamalarını yerelleştirme
Parametre
Açıklama
resourceName
Kaynak adı.
templateArgs
İsteğe bağlı. Değiştirme dizesindeki numaralı etiketleri değiştirmek için dize dizisi.
Örneğin templateArgs parametresinin ["Raúl", "4"] ve eşleşen kaynak
dizenin "Hello, {0}. You have {1} new messages.". olduğu bir işleve
yapılacak çağrıyı düşünün. Bu durumda işlev şunu döndürür: "Hello, Raúl.
You have 4 new messages.". Bu ayarı yoksaymak için, bir null değeri iletin.
locale
İsteğe bağlı. Kullanılacak yerel ayar kodu ("en", "en_us" veya "fr" gibi). Bir
yerel ayar sağlanmışsa ve eşleşen değer bulunmazsa, yöntem değerleri yerel ayar
zincirindeki diğer yerel ayarlarda aramaya devam etmez. Yerel kod
belirtilmemişse işlev, belirli kaynak adı için bir değer sağlayan yerel ayar
zincirindeki ilk yerel ayardaki dizeyi döndürür.
Yerelleştirme çerçevesi işaretli HTML DOM niteliklerini güncelleyebilir. Ancak yerelleştirilmiş dizeleri başka
şekillerde kullanabilirsiniz. Örneğin bir dizeyi dinamik olarak oluşturulmuş bir HTML'de veya bir işlev çağrısında
parametre değeri olarak kullanabilirsiniz. Örneğin aşağıdaki kod alert() işlevini, fr_FR yerel ayarının varsayılan
özellikler dosyasındaki error114 kaynağında tanımlı olan dizeyle çağırır.
alert(air.Localizer.localizer.getString("default", "error114", null, "fr_FR"));
getString() yöntemi, kaynağı belirtilen pakette bulamadığında bir resourceNotFound olayı gönderir.
air.Localizer.RESOURCE_NOT_FOUND sabiti, "resourceNotFound" dizesini tanımlar. Olayın üç özelliği vardır:
bundleName, resourceName ve locale. bundleName özelliği, kaynak bulunamayan paketin adıdır. resourceName
özelliği, kaynak bulunamayan paketin adıdır. locale özelliği, kaynak bulunamayan yerel ayarın adıdır.
getString() yöntemi, belirtilen paketi bulamadığında bir bundleNotFound olayı gönderir.
air.Localizer.BUNDLE_NOT_FOUND sabiti, "bundleNotFound" dizesini tanımlar. Olayın iki özelliği vardır:
bundleName ve locale. bundleName özelliği, kaynak bulunamayan paketin adıdır. locale özelliği, kaynak
bulunamayan yerel ayarın adıdır.
getString() yöntemi senkronize olmayan bir şekilde çalışır (ve resourceNotFound ve resourceNotFound
olaylarını senkronize olmayan bir şekilde gönderir). Aşağıdaki kod resourceNotFound ve bundleNotFound olayları
için olay dinleyicilerini ayarlar:
air.Localizerlocalizer.addEventListener(air.Localizer.RESOURCE_NOT_FOUND, rnfHandler);
air.Localizerlocalizer.addEventListener(air.Localizer.BUNDLE_NOT_FOUND, bnfHandler);
var str = air.Localizer.localizer.getString("default", "error114", null, "fr_FR");
function rnfHandler(event)
{
alert(event.bundleName + ": " + event.resourceName + ":." + event.locale);
}
function bnfHandler(event)
{
alert(event.bundleName + ":." + event.locale);
}
Localizer nesnesinin getResourceBundle() yöntemi, belirli bir yerel ayar için belirli bir paket döndürür. Yöntemin
dönüş değeri, paketteki anahtarlarla eşleşen özelliklere sahip bir nesnedir. (Uygulama belirtilen paketi bulamazsa,
yöntem null değerini döndürür.)
Yöntem iki parametre alır—locale ve bundleName.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 337
AIR uygulamalarını yerelleştirme
Parametre
Açıklama
locale
Yerel ayar (örn. "fr").
bundleName
Paket adı.
Örneğin, aşağıdaki kod fr yerel ayarı için varsayılan paketi yüklemek için document.write() yöntemini çağırır. Daha
sonra, bu paketteki str1 ve str2 anahtarlarının değerlerini yazmak için document.write() yöntemini çağırır:
var aboutWin = window.open();
var bundle = localizer.getResourceBundle("fr", "default");
aboutWin.document.write(bundle.str1);
aboutWin.document.write("<br/>");
aboutWin.document.write(bundle.str2);
aboutWin.document.write("<br/>");
getResourceBundle() yöntemi, belirtilen paketi bulamadığında bir bundleNotFound olayı gönderir.
air.Localizer.BUNDLE_NOT_FOUND sabiti, "bundleNotFound" dizesini tanımlar. Olayın iki özelliği vardır:
bundleName ve locale. bundleName özelliği, kaynak bulunamayan paketin adıdır. locale özelliği, kaynak
bulunamayan yerel ayarın adıdır.
Localizer nesnesinin getFile() yöntemi, belirli bir yerel ayar için bir paketin içeriğini dize olarak döndürür. Paket
dosyası UTF-8 dosyası olarak okunur. Bu yöntem aşağıdaki parametreleri içerir:
Parametre
Açıklama
resourceFileName
Kaynak dosyanın dosya adı ("about.html" gibi).
templateArgs
İsteğe bağlı. Değiştirme dizesindeki numaralı etiketleri değiştirmek için dize dizisi.
Örneğin templateArgs parametresinin ["Raúl", "4"] olduğu ve eşleşen
kaynak dizenin iki satır içerdiği bir işleve yapılacak çağrıyı düşünün:
<html>
<body>Hello, {0}. You have {1} new messages.</body>
</html>
Bu durumda işlev iki satırlı bir dize döndürür:
<html>
<body>Hello, Raúl. You have 4 new messages. </body>
</html>
locale
Kullanılacak yerel ayar, örneğin "en_GB" gibi. Bir yerel ayar sağlanmışsa ve
eşleşen dosya bulunmazsa, yöntem yerel ayar zincirindeki diğer yerel ayarlarda
aramaya devam etmez. Hiçbir yerel kod belirtilmemişse işlev,
resourceFileName öğesiyle eşleşen bir dosyaya sahip olan yerel ayar
zincirindeki ilk yerel ayardaki metni döndürür.
Örneğin aşağıdaki kod, fr yerel ayarının about.html dosyasının içeriğini kullanarak document.write() yöntemini
çağırır:
var aboutWin = window.open();
var aboutHtml = localizer.getFile("about.html", null, "fr");
aboutWin.document.close();
aboutWin.document.write(aboutHtml);
getFile() yöntemi, yerel ayar zincirinde kaynak bulamadığında bir fileNotFound olayı gönderir.
air.Localizer.FILE_NOT_FOUND sabiti, "resourceNotFound" dizesini tanımlar. getFile() yöntemi senkronize
olmayan bir şekilde çalışır (ve fileNotFound olayını senkronize olmayan bir şekilde gönderir). Olayın iki özelliği
vardır: fileName ve locale. fileName özelliği, bulunamayan dosyanın adıdır. locale özelliği, kaynak bulunamayan
yerel ayarın adıdır. Aşağıdaki kod bu olay için bir olay dinleyicisi ayarlar:
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 338
AIR uygulamalarını yerelleştirme
air.Localizer.localizer.addEventListener(air.Localizer.FILE_NOT_FOUND, fnfHandler);
air.Localizer.localizer.getFile("missing.html", null, "fr");
function fnfHandler(event)
{
alert(event.fileName + ": " + event.locale);
}
Tarihleri, saatleri ve para birimlerini yerelleştirme
Uygulamaların tarihi, saati ve para birimini sunma şekli her yerel ayar için birbirinden oldukça farklıdır. Örneğin
tarihler için ABD standardı ay/gün/yıl, Avrupa için tarihleri sunma şekliyse gün/ay/yıl şeklindedir.
Tarihleri, saatleri ve para birimlerini formatlamak için kod yazabilirsiniz. Örneğin aşağıdaki kod bir Date nesnesini
ay/gün/yıl veya gün/ay/yıl formatına dönüştürür. locale değişkeni (yerel ayarı temsil eden) "en_US" olarak ayarlıysa,
işlev ay/gün/yıl formatını döndürür. Örnek bir Date nesnesini tüm diğer yerel ayarlar için gün/ay/yıl formatına
dönüştürür:
function convertDate(date)
{
if (locale == "en_US")
{
return (date.getMonth() + 1) + "/" + date.getDate() + "/" + date.getFullYear();
}
else
{
return date.getDate() + "/" + (date.getMonth() + 1) + "/" + date.getFullYear();
}
}
339
Bölüm 35: Komut satırı araçlarını
kullanarak AIR uygulaması oluşturma
Adobe® AIR™ komut satırı araçları sayesinde Adobe AIR uygulamalarını test edebilir ve paketleyebilirsiniz. Bu araçları
ayrıca otomatikleştirilmiş oluşturma işlemlerinde de kullanabilirsiniz. AIR komut satırı araçları AIR SDK
(http://www.adobe.com/go/learn_air_download_AIRSDK_tr) adresinde bulunmaktadır.
AIR Hata Ayıklama Başlatıcısı'nı (ADL) Kullanma
AIR Hata Ayıklama Başlatıcısı'nı (ADL) geliştirme sırasında hem SWF tabanlı hem de HTML tabanlı uygulamaları
çalıştırmak için kullanın. ADL kullanarak bir uygulamayı paketlemeden ve yüklemeden çalıştırabilirsiniz. Varsayılan
olarak ADL, SDK'ye dahil olan bir çalışma zamanı kullanır, yani ADL'yi kullanmak için çalışma zamanını ayrı olarak
yüklemeniz gerekmez.
ADL, izleme ifadelerini ve çalışma zamanı hatalarını standart çıktıya yazdırır, ancak kesme noktalarını veya diğer hata
ayıklama özelliklerini desteklemez. SWF tabanlı bir uygulama geliştiriyorsanız, karmaşık hata ayıklama konularında
Flash Hata Ayıklayıcı (veya Flash CS) kullanın. Uygulamanızı ADL ile çalıştırmadan önce hata ayıklayıcı programını
başlatarak Flash Hata Ayıklayıcı'ya bağlanabilirsiniz.
Bir uygulamayı ADL ile başlatma
Aşağıdaki sözdizimini kullanın:
adl [-runtime runtime-directory] [-pubid publisher-id] [-nodebug] application.xml [rootdirectory] [-- arguments]
-runtime runtime-directory Kullanılacak çalışma zamanını içeren dizini belirtir. Belirtilmemişse, ADL programıyla
aynı SDK'de bulunan çalışma zamanı dizini kullanılır. ADL'i SDK klasöründen taşırsanız, çalışma zamanı dizinini
belirtmeniz gerekir. Windows ve Linux'ta, Adobe AIR dizinini içeren dizini belirtin. Mac OS X'te, Adobe
AIR.framework içeren dizini belirtin.
-pubid publisher-id Bu çalıştırma için AIR uygulamasının yayıncı kimliği olarak belirtilen değeri atar. Geçici bir
yayıncı belirlemek, yerel bağlantı üzerinden iletişim kurma gibi, bir uygulamanın benzersiz olarak tanımlanmasına
yardımcı olan yayıncı kimliğini kullanan AIR uygulaması özellliklerini test etmenizi sağlar. Son yayıncı kimliği, AIR
yükleme dosyasını imzalamak için kullanılan dijital sertifika tarafından belirlenir.
-nodebug Hata ayıklama desteğini kapatır. Kullanılırsa, uygulama işlemi Flash hata ayıklayıcıya bağlanamaz ve
işlenmeyen istisnaların iletişim kutuları bastırılır. (Ancak, izleme ifadeleri konsol penceresine yazdırmaya devam
eder.) Hata ayıklamanın kapatılması, uygulamanızın biraz daha hızlı çalışmasını sağlar ve ayrıca yüklenmiş bir
uygulamanın çalışma modunu daha iyi taklit eder.
application.xml Uygulama tanımlayıcı dosyası. Bkz. “AIR uygulamasının özelliklerini ayarlama” sayfa 42.
root-directory Uygulamanın çalıştırılacak kök dizinini belirtir. Belirtilmemişse, uygulama tanımlayıcı dosyasını
içeren dizin kullanılır.
-- arguments "--" karakterlerinden sonra gelen tüm karakter dizeleri uygulamaya komut satırı argümanları olarak
iletilir.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 340
Komut satırı araçlarını kullanarak AIR uygulaması oluşturma
Not: Zaten çalışmakta olan bir AIR uygulamasını başlattığınızda, bu uygulamanın yeni bir örneği başlatılmaz. Bunun
yerine çalışan örneğe bir invoke olayı gönderilir.
İzleme ifadelerini yazdırma
İzleme ifadelerini ADL'yi çalıştırmak için kullanılan konsola yazdırmak için, izleme ifadelerini trace() işleviyle
kodunuza ekleyin:
trace("debug message");
air.trace("debug message");
ADL Örnekleri
Geçerli dizinde bir uygulama çalıştırın:
adl myApp-app.xml
Geçerli dizinin alt dizininde bir uygulama çalıştırın:
adl source/myApp-app.xml release
Bir uygulama çalıştırın ve "tick" ve "tock" olmak üzere iki komut satırını iletin:
adl myApp-app.xml -- tick tock
Belirli bir çalışma zamanını kullanarak bir uygulama çalıştırın:
adl -runtime /AIRSDK/runtime myApp-app.xml
Hata ayıklama desteği olmadan bir uygulama çalıştırın:
adl myApp-app.xml -nodebug
Flash Hata Ayıklayıcı'ya (FDB) Bağlanma
SWF tabanlı bir AIR uygulamasının hatalarını Flash Hata Ayıklayıcı'yla ayıklamak için, bir FDB oturumu başlatın ve
daha sonra uygulamanızın hata ayıklama sürümünü başlatın. SWF dosyasının hata ayıklama sürümünü içeren bir AIR
uygulaması otomatik olarak bir dinleme FDB oturumuna bağlanır.
Not: AIR uygulamasının hata ayıklama sürümü, ana SWF dosyasının -debug bayrağıyla derlendiği sürümdür.
1 FDB'yi başlatın. FDB programı, Flex SDK'nin bin dizininde bulunabilir.
Konsol, FDB istemini görüntüler: <fdb>
2 run komutunu çalıştırın: <fdb>run [Enter]
3 Farklı bir komut veya kabuk konsolunda, uygulamanızın hata ayıklama sürümünü başlatın:
adl myApp.xml
4 FDB komutlarını kullanarak kesme noktalarını istenilen şekilde oluşturun.
5 Yazın: continue [Enter]
AIR uygulaması SWF tabanlıysa, hata ayıklayıcı yalnızca ActionScript kodu yürütmesini kontrol eder. AIR uygulaması
HTML tabanlıysa, hata ayıklayıcı yalnızca JavaScript kodu yürütmesini kontrol eder.
Hata ayıklayıcıya bağlanmadan ADL'yi çalıştırmak için -nodebug seçeneğini dahil edin:
adl myApp.xml -nodebug
FDB komutları hakkında temel bilgi için help komutunu yürütün:
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 341
Komut satırı araçlarını kullanarak AIR uygulaması oluşturma
<fdb>help [Enter]
FDB komutları hakkındaki ayrıntılar için Flex belgelerindeki Komut satırı hata ayıklayıcı komutlarını kullanma
linkine bakın.
ADL çıkış ve hata kodları
Aşağıdaki tablo, ADL tarafından yazdırılan çıkış kodlarını açıklamaktadır:
Çıkış kodu
Açıklama
0
Başarılı başlatma. ADL, AIR uygulaması çıktıktan sonra çıkar.
1
Zaten çalışmakta olan AIR uygulamasını başarılı bir şekilde başlatma. ADL hemen çıkar.
2
Kullanım hatası. ADL'ye verilen argümanlar yanlış.
3
Çalışma zamanı bulunamadı.
4
Çalışma zamanı başlatılamadı. Bunun nedeni genellikle uygulamada belirtilen sürümün veya yama
düzeyinin, çalışma zamanının sürümü veya yama düzeyiyle eşleşmemesidir.
5
Bilinmeyen nedenlerden kaynaklanan bir hata oluştu.
6
Uygulama tanımlayıcı dosyası bulunamadı.
7
Uygulama tanımlayıcının içeriği geçersiz. Bu hata genellikle XML'in doğru biçimlendirilmediğini belirtir.
8
Ana uygulama içerik dosyası (uygulama tanımlayıcı dosyasının <content> öğesinde belirtilen)
bulunamadı.
9
Ana uygulama içerik dosyası geçerli bir SWF veya HTML dosyası değil.
AIR yükleme dosyasını AIR Geliştirici Aracı (ADT)
kullanarak paketleme
AIR yükleme dosyasını hem SWF tabanlı hem de HTML tabanlı AIR uygulamalarınız için AIR Geliştirici Aracı'nı
(ADT) kullanarak oluşturursunuz. (Uygulamanızı oluşturmak için Adobe Flash CS3 kullanıyorsanız, AIR paketini
oluşturmak için Komutlar menüsündeki AIR Dosyası Oluştur komutunu da kullanabilirsiniz. Daha fazla bilgi için,
bkz. “Flash CS3 Professional için Adobe AIR Güncellemesi” sayfa 13. AIR uygulamaları oluşturmak için Flash CS4
kullanma hakkında bilgi için Flash Kullanarak Adobe AIR'de Yayınlama) linkine bakın.
ADT, komut satırından veya Ant gibi bir oluşturma aracından çalıştırabileceğiniz bir Java programıdır. AIR ve Flex
SDK'ler, Java programını sizin için çalıştıran komut satırı dosyaları içerir.
AIR yükleme dosyasını paketleme
Her AIR uygulaması, en az bir uygulama tanımlayıcı dosyasına ve ana SWF veya HTML dosyasına sahip olmalıdır.
Diğer yüklenen uygulama varlıkları da AIR dosyasında paketlenmelidir.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 342
Komut satırı araçlarını kullanarak AIR uygulaması oluşturma
Tüm AIR yükleyici dosyaları dijital sertifika kullanılarak imzalanmalıdır. AIR yükleyici, imzayı, uygulama dosyanızda
siz imzaladıktan sonra değişiklik yapılmadığını doğrulamak için kullanır. Bir sertifika yetkilisinden kod imzalayıcı
sertifika veya kendinden imzalı bir sertifika kullanabilirsiniz. Güvenilen bir sertifika yetkilisi tarafından yayımlanan
sertifika, uygulamanızın kullanıcılarına yayıncı olarak kimliğinize ilişkin bir güvence sağlar. Kendinden imzalı bir
sertifika, imzalayan olarak kimliğinizi doğrulamada kullanılamaz. Ayrıca bu olumsuzluk paketin değiştirilmediği
yönündeki güvenceyi de zayıflatır, çünkü meşru bir yükleme dosyası kullanıcıya ulaşmadan önce sahtesiyle
değiştirilmiş olabilir.
ADT -package komutunu kullanarak bir AIR dosyasını tek adımda paketleyebilir ve imzalayabilirsiniz. Ayrıca prepare komutuyla ara, imzalanmamış bir paket oluşturabilirsiniz ve ara paketi ayrı bir adımda -sign komutuyla
imzalayabilirsiniz.
Yükleme paketini imzalarken, ADT, zamanı doğrulamak için otomatik olarak bir zaman damgası yetkili sunucusuna
başvurur. Zaman damgası bilgileri AIR dosyasında bulunmaktadır. Doğrulanmış bir zaman damgası içeren AIR
dosyası, ileride herhangi bir zamanda yüklenebilir. ADT zaman damgası sunucusuna ulaşamazsa, paketleme iptal
edilir. Zaman damgalama seçeneğini geçersiz kılabilirsiniz, ancak zaman damgası olmadan, yükleme dosyasını
imzalamak için kullanılan sertifikanın süresi dolduktan sonra artık AIR uygulaması yüklenemez.
Varolan bir AIR uygulamasını güncellemek için bir paket oluşturuyorsanız, paket, orijinal uygulamayla aynı sertifika
veya aynı kimliğe sahip bir sertifika kullanılarak imzalanmalıdır. Aynı kimliğe sahip olmak için, iki sertifika aynı
belirgin ada (tüm bilgilendirici alanlar eşleşir) ve kök sertifikaya giden aynı sertifika zincirine sahip olmalıdır. Bu
nedenle, tanımlayıcı bilgilerin hiçbirini değiştirmediğiniz sürece, bir sertifika yetkilisinden alınan yenilenmiş
sertifikayı kullanabilirsiniz.
AIR 1.1 sürümünden itibaren, -migrate komutunu kullanarak bir uygulamayı yeni sertifika kullanmasını
sağlayabilirsiniz. Sertifikaya geçiş yapmak AIR dosyasının hem yeni hem de eski sertifikalarla imzalanmasını
gerektirir. Sertifika geçişi sayesinde kendinden imzalı bir sertifikadan ticari kod imzalayıcı sertifikasına veya
kendinden imzalı ya da ticari bir sertifikadan başka bir sertifikaya geçebilirsiniz. Bir sertifikaya geçiş yaptığınızda, var
olan kullanıcılarınızın, sizin yeni sürümünüzü yüklemeden önce var olan uygulamalarını kaldırmaları gerekmez.
Geçiş imzaları varsayılan olarak zaman damgalıdır.
Not: Uygulama tanımlayıcı dosyasındaki ayarlar, AIR uygulamasının kimliğini ve varsayılan yükleme yolunu belirler.
Bkz. “Uygulama tanımlayıcı dosyasının yapısı” sayfa 42.
AIR dosyasını tek adımda paketleme ve imzalama
❖ Aşağıdaki sözdizimiyle -package komutunu kullanın (tek bir komut satırında):
adt -package SIGNING_OPTIONS air_file app_xml [file_or_dir | -C dir file_or_dir | -e file
dir ...] ...
SIGNING_OPTIONS İmzalama seçenekleri, AIR dosyasını imzalamak için kullanılan özel anahtarı ve sertifikayı
içeren anahtar deposunu tanımlar. Bir AIR uygulamasını ADT tarafından oluşturulan kendinden imzalı bir
sertifikayla imzalamak için kullanabileceğiniz seçenekler şunlardır:
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 343
Komut satırı araçlarını kullanarak AIR uygulaması oluşturma
-storetype pkcs12 -keystore certificate.p12
Bu örnekte certificate.p12, anahtar deposu dosyasının adıdır. (Komut satırında verilmediği için ADT sizden şifreyi
ister.) İmzalama seçenekleri “ADT komut satırı imzalama seçenekleri” sayfa 347 tamamen açıklanmaktadır.
air_file Oluşturulan AIR dosyasının adı.
app_xml Uygulama tanımlayıcı dosyasının yolu. Yol, geçerli dizine göre veya mutlak yol olarak belirtilebilir.
(Uygulama tanımlayıcı dosyası, AIR dosyasında “application.xml” olarak yeniden adlandırılır.)
file_or_dir AIR dosyasında paketlenecek dosyalar ve dizinler. İstenilen sayıda dosya ve dizin boşluklarla ayrılarak
belirtilebilir. Bir dizini listelerseniz, gizli dosyalar haricinde bu dizinin içinde bulunan tüm dosyalar ve alt dizinler
pakete eklenir. (Buna ek olarak, uygulama tanımlayıcı dosyası doğrudan veya joker karakter ya da dizin genişletme
yoluyla belirtilmişse, yoksayılır ve pakete ikinci defa eklenmez.) Belirtilen dosyalar ve dizinler geçerli dizinde veya
geçerli dizinin alt dizinlerinden birinde olmalıdır. Geçerli dizini değiştirmek için -C seçeneğini kullanın.
Önemli: Joker karakterler C seçeneğinin ardından file_or_dir argümanlarında kullanılamaz. (Komut kabukları
joker karakterleri, argümanları ADT'ye iletmeden önce genişletir, bu da ADT'nin dosyaları yanlış konumda
aramasına neden olur.) Ancak yine de geçerli dizinin yerine geçmesi için nokta karakterini, ".", kullanabilirsiniz.
Örneğin, "-C assets ." alt dizinler de dahil olmak üzere varlıklar dizinindeki her şeyi uygulama paketinin kök
düzeyine kopyalar.
-C dir Uygulama paketine eklenen sonraki dosyaları ve dizinleri işlemeden önce, çalışma dizinini dir değeri olarak
değiştirir. Dosyalar veya dizinler uygulama paketinin köküne eklenir. Dosya sistemindeki birden çok noktadan
dosyaları dahil etmek için –C seçeneği istenilen sayıda kullanılabilir. dir için göreceli bir yol belirtilmişse, yol her
zaman orijinal çalışma dizininden çözümlenir.
ADT paketteki dosyaları ve dizinleri işledikçe, geçerli dizin ve hedef dosyalar arasındaki göreceli yollar saklanır.
Paket yüklendiğinde, bu yollar uygulama dizini yapısına genişletilir. Bu nedenle, -C release/bin
lib/feature.swf dosyasını belirtmek, release/bin/lib/feature.swf dosyasını kök uygulama klasörünün
lib alt dizinine yerleştirir.
-e file dir Belirtilen dosyayı belirtilen paket dizinine yerleştirir.
Not: Uygulama tanımlayıcı dosyasının <content> öğesi, ana uygulama dosyasının uygulama paketi dizin
ağacındaki son konumunu belirtmelidir.
ADT Örnekleri
Geçerli dizindeki belirli uygulama dosyalarını paketleyin:
adt –package -storetype pkcs12 -keystore cert.p12 myApp.air myApp.xml myApp.swf components.swc
Geçerli çalışma dizinindeki tüm dosyaları ve alt dizinleri paketleyin:
adt –package -storetype pkcs12 -keystore ../cert.p12 myApp.air myApp.xml .
Not: Anahtar deposu dosyası, uygulamanızı imzalamak için kullanılan özel anahtarı içerir. İmzalayıcı sertifikasını
hiçbir zaman AIR paketine dahil etmeyin. ADT komutunda joker karakterler kullanırsanız, anahtar deposu dosyasını
farklı bir konuma yerleştirin, böylece pakete dahil olmaz. Bu örnekte anahtar deposu dosyası cert.p12, üst dizinde
bulunur.
Yalnızca ana dosyaları ve bir görüntüler alt dizinini paketleyin.
adt –package -storetype pkcs12 -keystore cert.p12 myApp.air myApp.xml myApp.swf images
application.xml dosyasını ve bir çalışma dizininde (release/bin) bulunan ana SWF dosyasını paketleyin:
adt –package -storetype pkcs12 -keystore cert.p12 myApp.air release/bin/myApp.xml –C
release/bin myApp.swf
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 344
Komut satırı araçlarını kullanarak AIR uygulaması oluşturma
Derleme dosya sisteminizdeki birden fazla yerden alınan varlıkları paketleyin. Bu örnekte uygulama varlıkları
paketlemeden önce aşağıdaki klasörlerde konumlandırılmıştır:
/devRoot
/myApp
/release
/bin
myApp.xml
myApp.swf
/artwork
/myApp
/images
image-1.png
...
image-n.png
/libraries
/release
/libs
lib-1.swf
...
lib-n.swf
AIRAliases.js
Aşağıdaki ADT komutunu /devRoot/myApp dizininden çalıştırma:
adt –package -storetype pkcs12 -keystore cert.p12 myApp.air release/bin/myApp.xml
–C release/bin myApp.swf
–C ../artwork/myApp images
–C ../libraries/release libs
Şu paket yapısıyla sonuçlanır:
/myAppRoot
/META-INF
/AIR
application.xml
hash
myApp.swf
mimetype
/images
image-1.png
...
image-n.png
/libs
lib-1.swf
...
lib-n.swf
AIRAliases.js
ADT'yi bir Java programı olarak çalıştırın (sınıf yolunu ayarlamadan):
java –jar {AIRSDK}/lib/ADT.jar –package -storetype pkcs12 -keystore cert.p12 myApp.air
myApp.xml myApp.swf
ADT'yi bir Java programı olarak çalıştırın (Java sınıf yolu ADT.jar paketini içerecek şekilde ayarlanmış olarak):
java com.adobe.air.ADT –package -storetype pkcs12 -keystore cert.p12 myApp.air myApp.xml
myApp.swf
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 345
Komut satırı araçlarını kullanarak AIR uygulaması oluşturma
ADT hata mesajları
Aşağıdaki tablolar ADT programı tarafından bildirilebilecek olası hataları ve bunların olası nedenlerini listeler:
Uygulama tanımlayıcı doğrulama hataları
Hata kodu
Açıklama
Notlar
100
Uygulama tanımlayıcı ayrıştırılamıyor
Uygulama tanımlayıcı dosyasındaki
kapatılmamış etiketler gibi XML sözdizim
hatalarını kontrol edin.
101
Ad alanı eksik
Eksik ad alanını ekleyin.
102
Geçersiz ad alanı
Ad alanı yazımını kontrol edin.
103
Beklenmeyen öğe veya nitelik
Sorunlu öğeleri ve nitelikleri kaldırın.
Tanımlayıcı dosyada özel değerler geçerli
değil.
Öğe ve nitelik adlarının yazımını kontrol
edin.
Öğelerin doğru üst öğede
konumlandırıldığından ve niteliklerin
doğru öğelerle kullanıldığından emin olun.
104
Eksik öğe veya nitelik
Gerekli öğe veya niteliği ekleyin.
105
Öğe veya nitelik geçersiz değer içeriyor
Sorunlu değeri düzeltin.
106
Geçersiz pencere nitelik bileşimi
transparency = true ve
systemChrome = standard gibi bazı
pencere ayarları birlikte kullanılamaz.
Uyumsuz ayarlardan birini değiştirin.
107
Minimum pencere boyutu maksimum
pencere boyutundan büyük
Minimum veya maksimum boyut ayarını
değiştirin.
Ad alanları, öğeler, nitelikler ve bunların geçerli değerleri için bkz. “AIR uygulamasının özelliklerini ayarlama”
sayfa 42.
Uygulama simgesi hataları
Hata kodu
Açıklama
Notlar
200
Simge dosyası açılamıyor
Dosyanın belirtilen yolda mevcut olup
olmadığını kontrol edin.
Dosyanın açılabildiğinden emin olmak için
başka bir uygulama kullanın.
201
Simge yanlış boyutta
Simge boyutu (piksel cinsinden) XML
etiketiyle eşleşmeli. Örneğin, uygulama
tanımlayıcı öğesi verildiğinde:
<image32x32>icon.png</image32x3
2>
icon.png içindeki görüntü tam olarak
32x32 piksel olmalı.
202
Simge dosyası, desteklenmeyen bir
görüntü formatı içeriyor.
Uygulama dosyası hataları
Yalnızca PNG formatı desteklenir.
Uygulamanızı paketlemeden önce diğer
formatlardaki görüntüleri dönüştürün.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 346
Komut satırı araçlarını kullanarak AIR uygulaması oluşturma
Hata kodu
Açıklama
Notlar
300
Eksik dosya veya dosya açılamıyor
Komut satırında belirtilen bir dosya
bulunamadı veya açılamıyor.
301
Uygulama tanımlayıcı dosyası eksik veya
açılamıyor
Uygulama tanımlayıcı dosyası belirtilen
yolda bulunamadı veya açılamıyor.
302
Pakette kök içerik dosyası eksik
Uygulama tanımlayıcının <content>
öğesinde referans verilen SWF veya HTML
dosyası, ADT komut satırında listelenen
dosyalara dahil edilerek pakete eklenmeli.
303
Pakette simge dosyası eksik
Uygulama tanımlayıcıda belirtilen simge
dosyaları, ADT komut satırında listelenen
dosyalar arasına dahil edilerek pakete
eklenmeli. Simge dosyaları otomatik olarak
eklenmez.
304
Başlangıç penceresi içeriği geçersiz
Uygulama tanımlayıcının <content>
öğesinde referans verilen dosya geçerli bir
HTML veya SWF dosyası olarak tanınmadı.
305
Başlangıç penceresi içeriği SWF sürümü, ad Uygulama tanımlayıcının <content>
öğesinde referans verilen dosyanın SWF
alanı sürümünü aşıyor
sürümü, tanımlayıcı ad alanında belirtilen
AIR sürümü tarafından desteklenmiyor.
Örneğin, bir SWF10 (Flash Player 10)
dosyasını bir AIR 1.1 uygulamasının
başlangıç içeriği olarak paketlemeye
çalışmak bu hatayı yaratacaktır.
Diğer hatalar için çıkış kodları
Çıkış kodu
Açıklama
Notlar
2
Kullanım hatası
Komut satırı argümanlarındaki hataları
kontrol edin
5
Bilinmeyen hata
Bu hata, yaygın hata koşullarıyla
açıklanamayan bir durumu gösterir. Olası
kök nedenler ADT ve Java Çalışma Zamanı
Ortamı arasındaki uyumsuzluğu, bozuk
ADT veya JRE yüklemelerini ve ADT içindeki
programlama hatalarını içerir.
6
Çıktı dizinine yazılamadı
Belirtilen (veya uygulanan) çıktı dizininin
erişilebilir olduğundan ve bunu içeren
sürücünün yeterli disk alanına sahip
olduğundan emin olun.
7
Sertifikaya erişilemedi
Anahtar deposuna giden yolun doğru
biçimde belirtildiğinden emin olun.
Anahtar deposu içindeki sertifikanın
erişilebilir olup olmadığını kontrol edin.
Java 1.6 Keytool yardımcı programı, sorun
giderme sertifikası erişim sorunlarına
yardımcı olmak üzere kullanılabilir.
8
Geçersiz sertifika
Sertifika dosyası yanlış biçimlendirilmiş,
değiştirilmiş, süresi dolmuş veya iptal
edilmiş.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 347
Komut satırı araçlarını kullanarak AIR uygulaması oluşturma
Çıkış kodu
Açıklama
Notlar
9
AIR dosyası imzalanamadı
ADT'ye aktarılan imzalama seçeneklerini
doğrulayın.
10
Zaman damgası oluşturulamadı
ADT, zaman damgası sunucusuna bağlantı
oluşturamadı. Internete bir proxy sunucusu
aracılığıyla bağlandığınızda, JRE proxy
ayarlarını yapılandırmanız gerekebilir.
11
Sertifika oluşturma hatası
İmza oluşturmak için kullanılan komut satırı
argümanlarını doğrulayın.
12
Geçersiz giriş
Komut satırında ADT'ye aktarılan diğer
argümanları ve dosya yollarını doğrulayın.
ADT komut satırı imzalama seçenekleri
ADT, AIR uygulamalarını imzalamak için özel anahtarlara ve sertifikalara erişmek amacıyla Java Cryptography
Architecture (JCA) kullanır. İmzalama seçenekleri anahtar deposunu ve bu anahtar deposu içindeki özel anahtarı ve
sertifikayı tanımlar.
Anahtar deposu hem özel anahtarı hem de ilişkilendirilmiş sertifika zincirini içermelidir. Sertifika zinciri uygulamanın
yayıncı kimliğini belirlemek için kullanılır. İmzalayıcı sertifikası bilgisayarda güvenilen bir sertifikaya eklenirse,
sertifikanın ortak adı AIR yükleme iletişim kutusunda yayıncı adı olarak görüntülenir.
ADT sertifikanın x509v3 standardına uymasını (RFC3280) ve kod imzalama için uygun değerlere sahip Genişletilmiş
Anahtar Kullanımı uzantısını içermesini gerektirir. Sertifikadaki kısıtlamalar korunur ve AIR uygulamalarını
imzalamaya yönelik bazı sertifikaların kullanımını engelleyebilir.
Not: ADT, uygun olduğunda, sertifika geri alma listelerini denetlemek ve zaman damgalarını almak üzere Internet
kaynaklarına bağlanmak için Java çalışma zamanı ortamı proxy ayarlarını kullanır. ADT kullanırken Internet
kaynaklarına bağlanma konusunda bir sorunla karşılaşırsanız ve ağınız belirli proxy ayarları isterse, JRE proxy
ayarlarını yapılandırmanız gerekebilir.
AIR imzalama seçeneklerini belirtme
❖ -package ve -prepare komutları için ADT imzalama seçeneklerini belirtmek üzere aşağıdaki sözdizimini
kullanın:
[-alias aliasName] [-storetype type] [-keystore path] [-storepass password1] [-keypass
password2] [-providerName className] [-tsa url]
-alias aliasName —Anahtar deposundaki anahtarın başka adı. Anahtar deposu yalnızca tek bir sertifika içerdiğinde
başka ad belirtmek gerekmez. Başka ad belirtilmemişse, ADT, anahtar deposundaki ilk anahtarı kullanır.
Tüm anahtar deposu yönetim uygulamaları, başka bir adın sertifikalara atanmasına izin vermez. Örneğin Windows
sistemi anahtar deposunu kullanırken, sertifikanın ayırt edilen adını başka ad olarak kullanın. Kullanılabilir
sertifikaları listelemek için Java Keytool yardımcı programını kullanabilirsiniz, böylece başka adı belirleyebilirsiniz.
Örneğin şu komutu çalıştırmak:
keytool -list -storetype Windows-MY
sertifika için aşağıdakine benzer bir çıktı oluşturur:
CN=TestingCert,OU=QE,O=Adobe,C=US, PrivateKeyEntry,
Certificate fingerprint (MD5): 73:D5:21:E9:8A:28:0A:AB:FD:1D:11:EA:BB:A7:55:88
ADT komut satırında bu sertifikaya başvurmak için, başka adı şu şekilde ayarlayın:
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 348
Komut satırı araçlarını kullanarak AIR uygulaması oluşturma
CN=TestingCert,OU=QE,O=Adobe,C=US
Mac OS X'te Keychain'deki bir sertifikanın başka adı, Keychain Access uygulamasında görüntülenen addır.
-storetype type —Anahtar deposu uygulaması tarafından belirlenen anahtar deposu türü. Java'nın çoğu
yüklemesinde bulunan varsayılan anahtar deposu uygulaması JKS ve PKCS12 türlerini destekler. Java 5.0, PKCS11
türü için donanım belirteçlerindeki anahtar depolarına erişim konusunda ve Keychain türü için de Mac OS X
anahtarlığa erişim konusunda destek içerir. Java 6.0, MSCAPI türü için destek içerir (Windows'ta). Diğer JCA
sağlayıcıları yüklenmişse ve yapılandırılmışsa, ek anahtar deposu türleri kullanılabilirdir. Anahtar deposu türü
belirtilmemişse, varsayılan JCA sağlayıcısı için varsayılan tür kullanılır.
Saklama türü
Anahtar deposu formatı
Minimum Java
sürümü
JKS
Java anahtar deposu
dosyası (.keystore)
1.2
PKCS12
PKCS12 dosyası (.p12 veya
.pfx)
1.4
PKCS11
Donanım belirteci
1.5
KeychainStore
Mac OS X Keychain
1.5
Windows-MY
veya WindowsROOT
MSCAPI
1.6
-keystore path —Dosya tabanlı saklama türleri için anahtar deposu dosyasının yolu.
-storepass password1 —Anahtar deposuna erişmek için gereken şifre. Belirtilmemişse, ADT şifreyi ister.
-keypass password2 —AIR uygulamasını imzalamada kullanılan özel anahtara erişim için gereken şifre.
Belirtilmemişse, ADT şifreyi ister.
-providerName className —Belirtilen anahtar deposu türü için JCA sağlayıcısı. Belirtilmemişse, ADT, bu
anahtar deposu türü için varsayılan sağlayıcıyı kullanır.
-tsa url —Dijital imzaya zaman damgası uygulamak için RFC3161-uyumlu zaman damgası sunucusun URL'sini
belirtir. URL belirtilmemişse, Geotrust tarafından sağlanan varsayılan bir zaman damgası sunucusu kullanılır. Bir
AIR uygulamasının imzası zaman damgalı olduğunda, imzalayıcı sertifikasının süresi dolduktan sonra da
uygulama yüklenebilir, bunun nedeni zaman damgasının, sertifikanın imzalama sırasında geçerli olduğunu
doğrulamasıdır.
ADT, zaman damgası sunucusuna bağlanamazsa, imzalama iptal edilir ve hiç paket üretilmez. Zaman damgalamayı
devre dışı bırakmak için -tsa none öğesini belirtin. Ancak, zaman damgası olmadan paketlenmiş bir AIR
uygulaması, imzalayıcı sertifikasının süresi dolduktan sonra artık yüklenebilir olmaz.
Not: İmzalama seçenekleri, Java Keytool yardımcı programının eşdeğer seçenekleri gibidir. Keytool yardımcı
programını, Windows'ta anahtar depolarını incelemek ve yönetmek için kullanabilirsiniz. Apple® güvenlik yardımcı
programı da Mac OS X'te bu amaçla kullanılabilir.
İmzalama seçeneği örnekleri
.p12 dosyasıyla imzalama:
-storetype pkcs12 -keystore cert.p12
Varsayılan Java anahtar deposuyla imzalama:
-alias AIRcert -storetype jks
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 349
Komut satırı araçlarını kullanarak AIR uygulaması oluşturma
Belirli bir Java anahtar deposuyla imzalama:
-alias AIRcert -storetype jks -keystore certStore.keystore
Mac OS X anahtarlık ile imzalama:
-alias AIRcert -storetype KeychainStore -providerName Apple
Windows sistemi anahtar deposuyla imzalama:
-alias cn=AIRCert -storeype Windows-MY
Donanım belirteciyle imzalama (Java'yı belirteç kullanmak üzere yapılandırma konusundaki talimatlar ve doğru
providerName değeri için belirteç üreticisinin talimatlarına başvurun):
-alias AIRCert -storetype pkcs11 -providerName tokenProviderName
Zaman damgası gömmeden imzalama:
-storetype pkcs12 -keystore cert.p12 -tsa none
ADT ile imzalanmamış bir AIR ara dosyası oluşturma
İmzalanmamış AIR ara dosyası oluşturmak için -prepare komutunu kullanın. Geçerli bir AIR yükleme dosyası
üretmek için, AIR ara dosyası ADT -sign komutuyla imzalanmalıdır.
-prepare komutu, -package komutuyla aynı bayrakları ve parametreleri alır (imzalama seçenekleri dışında). Aradaki
tek fark çıktı dosyasının imzalanmamasıdır. Ara dosya, dosya adı uzantısıyla oluşturulur: airi.
AIR ara dosyasını imzalamak için, ADT -sign komutunu kullanın. (Bkz. AIR ara dosyasını ADT ile imzalama.)
ADT örneği
adt –prepare unsignedMyApp.airi myApp.xml myApp.swf components.swc
AIR ara dosyasını ADT ile imzalama
AIR ara dosyasını ADT ile imzalamak için, -sign komutunu kullanın. sign komutu yalnızca AIR ara dosyalarıyla
çalışır (airi uzantısı). AIR dosyası ikinci kez imzalanamaz.
AIR ara dosyası oluşturmak için, adt -prepare komutunu kullanın. (Bkz. “ADT ile imzalanmamış bir AIR ara dosyası
oluşturma” sayfa 349.)
AIRI dosyasını imzalama
❖ ADT -sign komutunu aşağıdaki sözdizimiyle kullanın:
adt -sign SIGNING_OPTIONSairi_fileair_file
SIGNING_OPTIONS İmzalama seçenekleri, AIR dosyasının imzalanacağı özel anahtarı ve sertifikayı tanımlar. Bu
seçenekler “ADT komut satırı imzalama seçenekleri” sayfa 347 açıklanmaktadır.
airi_file İmzalanacak olan imzalanmamış AIR ara dosyasının yolu.
air_file Oluşturulacak AIR dosyasının adı.
ADT Örneği
adt –sign -storetype pkcs12 -keystore cert.p12 unsignedMyApp.airi myApp.air
Daha fazla bilgi için, bkz. “AIR dosyasını dijital olarak imzalama” sayfa 307.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 350
Komut satırı araçlarını kullanarak AIR uygulaması oluşturma
Uygulama sertifikasını değiştirmek için AIR dosyasını
imzalama
Var olan bir AIR uygulamasını yeni bir imzalayıcı sertifikası kullanmak üzere güncellemek için, ADT -migrate
komutunu kullanın.
Sertifika geçişi aşağıdaki durumlarda yararlı olabilir:
• Kendinden imzalı bir sertifikadan bir sertifika yetkilisi tarafından yayımlanan bir sertifikaya yükseltme yapılırken
• Süresi dolmak üzere olan kendinden imzalı sertifika, yeni bir kendinden imzalı sertifikayla değiştirilirken
• Bir ticari sertifika diğeriyle değiştirilirken, örneğin şirketinizin kimliği değiştiğinde
Geçiş imzasını uygulamak için orijinal sertifika hala geçerli olmalıdır. Sertifikanın süresi dolduktan sonra, geçiş imzası
uygulanamaz. Uygulamanızın kullanıcılarının güncellenen sürümü yükleyebilmeleri için, var olan sürümü
kaldırmaları gerekecektir. Geçiş imzasının varsayılan olarak zaman damgalı olduğunu unutmayın, böylelikle bir geçiş
imzasıyla imzalanan AIR güncellemeleri, sertifikanın süresi dolduktan sonra da geçerli olur.
Not: Ticari olarak yayımlanmış bir sertifikayı yenilediğinizde, genellikle sertifikaya geçiş yapmanız gerekmez. Yenilenen
sertifika, ayırt edilen ad değiştirilene kadar orijinaliyle aynı yayıncı kimliğini korur. Ayırt edilen adın belirlenmesine
yönelik kullanılan sertifika niteliklerinin tam listesi için, bkz. “AIR yayıncı kimlikleri hakkında” sayfa 308.
Uygulamayı yeni bir sertifika kullanmaya geçirmek için:
1 Uygulamanız için bir güncelleme oluşturun
2 Güncelleme AIR dosyasını yeni sertifikayla paketleyin ve imzalayın
3 AIR dosyasını -migrate komutunu kullanarak orijinal sertifikayla yeniden imzalayın
-migrate komutuyla imzalanmış bir AIR dosyası hem uygulamanın yeni bir sürümünü yüklemek hem de eski
sertifikayla imzalananlar da dahil olmak üzere önceki sürümlerini güncellemek için kullanılabilir.
Bir AIR uygulamasını yeni bir sertifika kullanmaya geçirme
❖ ADT -migrate komutunu aşağıdaki sözdizimiyle kullanın:
adt -migrate SIGNING_OPTIONS air_file_in air_file_out
SIGNING_OPTIONS İmzalama seçenekleri, AIR dosyasının imzalanacağı özel anahtarı ve sertifikayı tanımlar. Bu
seçenekler orijinal imzalayıcı sertifikayı tanımlamalıdır ve “ADT komut satırı imzalama seçenekleri” sayfa 347
açıklanmaktadır.
air_file_in Yeni sertifikayla imzalanan, güncelleme için AIR dosyası.
air_file_out Oluşturulacak AIR dosyası.
ADT Örneği
adt –migrate -storetype pkcs12 -keystore cert.p12 myApp.air myApp.air
Daha fazla bilgi için, bkz. “AIR dosyasını dijital olarak imzalama” sayfa 307.
Not: -migrate komutu ADT'ye AIR 1.1 sürümünde eklendi.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 351
Komut satırı araçlarını kullanarak AIR uygulaması oluşturma
ADT ile kendinden imzalı bir sertifika oluşturma
Kendinden imzalı sertifikalar sayesinde geçerli bir AIR yükleme dosyası üretebilirsiniz, ancak kendinden imzalı
sertifikaların gerçekliği doğrulanamadığı için, bu sertifikalar kullanıcılarınıza yalnızca sınırlı güvenlik teminatları
sağlar. Kendinden imzalı bir AIR dosyası yüklendiğinde, yayıncı bilgileri kullanıcıya Bilinmeyen olarak görüntülenir.
ADT tarafından oluşturulan sertifika beş yıl boyunca geçerlidir.
Kendinden oluşturulan bir sertifikayla imzalanan AIR uygulaması için bir güncelleme oluşturursanız, hem orijinal
hem de güncelleme AIR dosyalarını imzalamak için aynı sertifikayı kullanmanız gerekir. ADT'nin ürettiği sertifikalar,
aynı parametreler kullanılsa bile her zaman benzersizdir. Bu nedenle, güncellemelerin ADT tarafından oluşturulan bir
sertifikayla kendinden imzalanmasını istiyorsanız, orijinal sertifikayı güvenli bir konumda saklayın. Buna ek olarak,
ADT tarafından oluşturulan orijinal sertifikanın süresi dolduktan sonra, güncellenmiş bir AIR dosyası üretemezsiniz.
(Yeni uygulamaları farklı bir sertifikayla yayınlayabilirsiniz, ancak aynı uygulamanın yeni sürümlerini
yayınlayamazsınız.)
Önemli: Adobe, kendinden imzalı sertifika sınırlamaları nedeniyle, genel olarak yayınlanan AIR uygulamalarının
imzalanması için kesinlikle güvenilir bir sertifika yetkilisi tarafından yayınlanan bir ticari sertifika kullanmanızı önerir.
ADT tarafından oluşturulan sertifika ve ilişkilendirilmiş özel anahtar, PKCS12 türü bir anahtar deposu dosyasında
saklanır. Belirtilen şifre anahtar deposunda değil, anahtarın kendisinde ayarlanır.
AIR dosyalarının kendiliğinden imzalanması için bir dijital kimlik sertifikası oluşturma
❖ ADT -certificate komutunu kullanın (tek bir komut satırında):
adt -certificate -cn name [-ou org_unit][-o org_name][-c country]
key_type pfx_file password
-cn name Yeni sertifikanın ortak adı olarak atanan dize.
-ou org_unit Sertifikayı yayımlayan birim olarak atanan dize. (İsteğe bağlı.)
-o org_name Sertifikayı yayımlayan kurum olarak atanan dize. (İsteğe bağlı.)
-c country İki harfli ISO-3166 ülke kodu. Geçersiz bir kod verilirse, sertifika oluşturulmaz. (İsteğe bağlı.)
key_type Sertifika için kullanılacak anahtar türü, “1024-RSA” veya “2048-RSA”.
pfx_file Oluşturulacak sertifika dosyasının yolu.
password Yeni sertifika için şifre. AIR dosyaları bu sertifikayla imzalanırken şifre gereklidir.
Sertifika oluşturma örnekleri
adt -certificate -cn SelfSign -ou QE -o "Example, Co" -c US 2048-RSA newcert.p12 39#wnetx3tl
adt -certificate -cn ADigitalID 1024-RSA SigningCert.p12 39#wnetx3tl
AIR dosyalarını imzalarken bu sertifikaları kullanmak için, aşağıdaki imzalama seçeneklerini ADT -package veya prepare komutlarıyla kullanırsınız:
-storetype pkcs12 -keystore newcert.p12 -keypass 39#wnetx3tl
-storetype pkcs12 -keystore SigningCert.p12 -keypass 39#wnetx3tl
Apache Ant aracını SDK araçlarıyla kullanma
Bu konu, Apache Ant oluşturma aracının AIR uygulamalarını test etmede ve paketlemede kullanılmasına ilişkin
örnekler sunar.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 352
Komut satırı araçlarını kullanarak AIR uygulaması oluşturma
Not: Bu açıklamalar Apache Ant aracını kapsamlı bir şekilde anlatma amacı taşımaz. Ant belgeleri için, bkz.
http://Ant.Apache.org.
Ant aracını basit projeler için kullanma
Bu örnek, Ant ve AIR komut satırı araçları kullanılarak bir AIR uygulaması oluşturmayı gösterir. Basit bir proje yapısı,
tüm dosyalar tek bir dizinde saklı olarak kullanılır.
Bu özellikler, oluşturma komut dosyasının yeniden kullanılmasını kolaylaştırmak için birçok tanımlı özellik kullanır.
Bir özellik kümesi, komut satırı araçlarının yüklenen konumlarını tanımlar:
<property name="SDK_HOME" value="C:/Flex3SDK"/>
<property name="ADL" value="${SDK_HOME}/bin/adl.exe"/>
<property name="ADT.JAR" value="${SDK_HOME}/lib/adt.jar"/>
İkinci özellik kümesi projeye özgüdür. Bu özellikler, uygulama tanımlayıcı ve AIR dosyalarının kök kaynak dosyasına
dayalı olarak adlandırıldığı bir adlandırma kuralını kabul eder. Diğer kurallar kolaylıkla desteklenir.
<property
<property
<property
<property
<property
<property
name="APP_NAME" value="ExampleApplication"/>
name="APP_ROOT" value="."/>
name="APP_DESCRIPTOR" value="${APP_ROOT}/${APP_NAME}-app.xml"/>
name="AIR_NAME" value="${APP_NAME}.air"/>
name="STORETYPE" value="pkcs12"/>
name="KEYSTORE" value="ExampleCert.p12"/>
ADL'yi bir uygulamayı test etmesi için çağırma
Uygulamayı ADL ile çalıştırmak için, bir exec görevi kullanın:
<target name="test" depends="compile">
<target name="test">
<exec executable="${ADL}">
<arg value="${APP_DESCRIPTOR}"/>
</exec>
</target>
ADT'yi bir uygulamayı paketlemesi için çağırma
Uygulamayı paketlemek için adt.jar aracını çalıştırmak üzere bir Java görevi kullanın:
<target name="package">
<java jar="${ADT.JAR}" fork="true" failonerror="true">
<arg value="-package"/>
<arg value="-storetype"/>
<arg value="${STORETYPE}"/>
<arg value="-keystore"/>
<arg value="${KEYSTORE}"/>
<arg value="${AIR_NAME}"/>
<arg value="${APP_DESCRIPTOR}"/>
<arg value="${APP_NAME}.swf"/>
<arg value="*.png"/>
</java>
</target>
Uygulamanızın paketlenecek başka dosyaları da varsa, ek <arg> öğeleri ekleyebilirsiniz.
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 353
Komut satırı araçlarını kullanarak AIR uygulaması oluşturma
Ant'ı daha karmaşık projeler için kullanma
Genel bir uygulamanın dizin yapısı tek bir dizinden daha karmaşıktır. Aşağıdaki örnek, daha pratik bir proje dizin
yapısına sahip olan bir AIR uygulamasını derlemek, test etmek ve paketlemek için kullanılan bir oluşturma dosyasını
gösterir.
Bu örnek proje, uygulama kaynak dosyalarını ve simge dosyaları gibi başka varlıkları src dizininde saklar. Oluşturma
komut dosyası, aşağıdaki çalışma dizinlerini oluşturur:
build Derlenen SWF dosyalarının sürümlerini (hata ayıklama özelliğine sahip olmayan) saklar.
debug Uygulamanın, derlenen tüm SWF'ler ve varlık dosyaları da dahil olmak üzere paketlenmemiş bir hata ayıklama
sürümünü saklar. ADL yardımcı programı, uygulamayı bu dizinden çalıştırır.
release Son AIR paketini saklar
AIR araçları, geçerli çalışma dizininin dışındaki dosyalarda çalışırken bazı ek seçeneklerin kullanılmasını gerektirir.
Testing ADL'ye iletilen ikinci argüman AIR uygulamasının kök dizinini belirtir. Uygulama kök dizinini belirtmek için
aşağıdaki satır, test görevine eklenir:
<arg value="${debug}"/>
Packaging Son paket yapısının bir parçası olmaması gereken alt dizinlerden dosya paketlemek, ADT çalışma dizininin
değiştirilmesi için -C direktifinin kullanılmasını gerektirir. -C direktifini kullandığınızda, yeni çalışma dizinindeki
dosyalar ve dizinler AIR paket dosyasının kök düzeyine kopyalanır. Bu nedenle, -C build file.png, file.png
dosyasını uygulama dizininin köküne kopyalar. Benzer şekilde -C assets icons, simge klasörünü kök düzeyine
kopyalar, simgeler klasörünün içindeki tüm dosyaları ve dizinleri de kopyalar. Örneğin, aşağıda bulunan paket
görevindeki satır dizisi, simgeler dizinini doğrudan uygulama paket dosyasının kök düzeyine ekler:
<arg value="-C"/>
<arg value="${assets}"/>
<arg value="icons"/>
Not: Birçok kaynağı ve varlığı farklı göreceli konumlara taşımanız gerekiyorsa, ADT için karmaşık bir argüman listesi
oluşturmak yerine, onları Ant görevleri kullanarak geçici bir dizine ayırmak genellikle daha kolaydır. Kaynaklarınız
organize edildikten sonra, onları paketlemek için basit bir ADT argüman listesi kullanılabilir.
<project>
<!-- SDK properties -->
<property name="SDK_HOME" value="C:/Flex3SDK"/>
<property name="ADL" value="${SDK_HOME}/bin/adl.exe"/>
<property name="ADT.JAR" value="${SDK_HOME}/lib/adt.jar"/>
<!-- Project properties -->
<property name="PROJ_ROOT_DIR" value="."/>
<property name="APP_NAME" value="ExampleApplication"/>
<property name="APP_ROOT_DIR" value="."/>
<property name="APP_ROOT_FILE" value="${APP_NAME}.swf"/>
<property name="APP_DESCRIPTOR" value="${PROJ_ROOT_DIR}/${APP_NAME}-app.xml"/>
<property name="AIR_NAME" value="${APP_NAME}.air"/>
<property name="release" location="${PROJ_ROOT_DIR}/release"/>
<property name="assets" location="${PROJ_ROOT_DIR}/src/assets"/>
<property name="STORETYPE" value="pkcs12"/>
<property name="KEYSTORE" value="ExampleCert.p12"/>
<target name="init" depends="clean">
<mkdir dir="${release}"/>
</target>
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 354
Komut satırı araçlarını kullanarak AIR uygulaması oluşturma
<target name="test">
<exec executable="${ADL}">
<arg value="${APP_DESCRIPTOR}"/>
<arg value="${APP_ROOT_DIR}"/>
</exec>
</target>
<target name="package" depends="init">
<java jar="${ADT.JAR}" fork="true" failonerror="true">
<arg value="-package"/>
<arg value="-storetype"/>
<arg value="${STORETYPE}"/>
<arg value="-keystore"/>
<arg value="${KEYSTORE}"/>
<arg value="${release}/${AIR_NAME}"/>
<arg value="${APP_DESCRIPTOR}"/>
<arg value="-C"/>
<arg value="${APP_ROOT_DIR}"/>
<arg value="${APP_ROOT_FILE}"/>
<arg value="-C"/>
<arg value="${assets}"/>
<arg value="icons"/>
</java>
</target>
<target name="clean" description="clean up">
<delete dir="${release}"/>
</target>
</project>
355
Dizin
Semboller
: (iki nokta) karakteri, SQL ifadesi parametre
adlarında 167
yeni işlevler 52
kaldırma 26
yükleme 23
kurulumu saptama 304
Adobe belgeleri 9
simgeler 49
? (soru işareti) karakter, adlandırılmamış
SQL parametrelerinde 168
Adobe destek web sitesi 9
sürümler 45, 287, 314
@ (at) karakteri, SQL ifadesi parametre
adlarında 167
Adobe Media Player 265
tarayıcı başlatma 50
Adobe Press kitapları 9
telif hakkı bilgileri 47
Adobe Reader 210, 261
yükleme 23, 298
Numaralar
1024-RSA 351
AES-CBC 128-bit şifreleme 206
ağ iletişimiyle yerel sanal alan 27
AIR uygulamaları için telif hakkı bilgileri 47
2048-RSA 351
AIR çalışma zamanı
AIR uygulamalarından çıkma 278
güncelleme 23
AIR uygulamalarını başlatma 278
Á
AC_FL_RunContent() işlevi
(default_badge.html'de) 300
kaldırma 2
AIR uygulamalarını çalıştırma 298, 305
saptama 287, 303
AIR uygulamalarını dağıtma 298
yama düzeyleri 43, 287
AIR uygulamalarını güncelleme 49, 313
AC_RuntimeActiveContent.js 300
yeni işlevler 52
AIR uygulamalarını yükleme 298
acceptDragDrop() yöntemi
(NativeDragManager sınıfı) 129, 134
açılır menüler 83, 92
AIR çalışma zamanını veya AIR
uygulamasını güncellemek için gerekli
ayrıcalıklar 23
acompc derleyicisi 234
AIR çalışma zamanını veya bir AIR
uygulamasını güncellemek için gerekli
ayrıcalıklar 298, 305
Acrobat 210, 261
AIR dosyaları
oluşturma 87
Action Message Format (AMF) 130, 148,
151
ActionScript
JavaScript çapraz komut dosyası 230
ActionScript belgeleri 9
ActionScript ve JavaScript arasında dönüşen
Date nesneleri 235
AIR dosyalarını imzalama 341
AIR dosyalarını paketleme
AIR Geliştirici Aracı (ADT) 341
AIR Geliştirici Aracı (ADT)
bir AIR dosyasını paketleme 341
kendinden imzalı sertifikalar
oluşturma 351
AIR geliştirici sertifikaları 308
AIR Hata Ayıklama Başlatıcısı (ADL)
çıkış ve hata kodları 341
addChildAt() yöntemi (Stage sınıfı) 67
air özelliği (AIRAliases.js dosyası) 209, 229
adlandırılmamış parametreler (SQL
ifadelerinde) 168
AIR uygulama yükleyicisinde desteklenen
diller 46
adlandırılmış parametreler (SQL
ifadelerinde) 167
AIR uygulamaları
Adobe AIR
giriş 6
güncelleme 23
kaldırma 2
AIR Geliştirici Aracı (ADT) ile
oluşturma 349
Ajax
imzalama seçenekleri 347
Adobe Acrobat Geliştirici Merkezi 262
AIRI dosyaları
paketleme 341
activate() yöntemi (NativeWindow
sınıfı) 64, 70
addChild() yöntemi (Stage sınıfı) 67
ayarlar 285
AIRAliases.js dosyası 209, 229
AIRLocalizer.js dosyası 329
AIRI dosyaları 349
activeWindow özelliği (NativeApplication
sınıfı) 69
AIR uygulaması
imzalama 307
ActionScript ve JavaScript arasında dönüşen
RegExp nesneleri 235
active olayı 76
yükleme yolu 45
güvenlik 33
uygulama sanal alanında destek 33
alanlar (veritabanı) 159
allowBrowserInvocation öğesi (uygulama
tanımlayıcı dosyası) 50, 278, 281
allowCrossDomainXHR niteliği (kare ve
iframe öğeleri) 212, 218
allowLoadBytesCodeExecution özelliği
(LoaderContext sınıfı) 40
alt menü özelliği
NativeMenuItem sınıfı 85
alt menüler 85, 88
alwaysInFront özelliği (NativeWindow
sınıfı) 70
ana anahtarlar
menü öğeleri 86
veritabanları 176
ayarlar 42, 45
ana dizin 104
başlatma 278
ana ekran 80
çalıştırma 298, 305
anahtar depoları 347, 351
çıkma 278
anımsatıcı karakterler
dağıtma 298
menü öğeleri 86
dosya türü ilişkilendirmeleri 50, 279, 286
app desteği URL şeması 238
güncelleme 23, 49, 313
app URL şeması 38, 40, 65, 230, 238, 262
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 356
Dizin
app-depolama URL şeması 38
AppInstallDisabled (Windows kayıt defteri
ayarları) 26
bitmapler
kopyala ve yapıştır desteği 143
sürükle ve bırak desteği 128, 137
clipboard olayı 215
clipboard özelliği (NativeDragEvent
sınıfı) 134
Apple geliştirici sertifikaları 308
bitmaps özelliği (Icon sınıf) 97
applicationDescriptor özelliği
(NativeApplication sınıfı) 285
boşta kalma süresi (kullanıcı) 287
getData() yöntemi 130, 134
bounce yöntemi() (Icon sınıfı) 98
clipboardData özelliği (clipboard
olayları) 215
ApplicationDomain sınıfı 231
applicationStorageDirectory özelliği (File
sınıfı) 104
ApplicationUpdater_UI.swf dosyası 318
ApplicationUpdater.swc dosyası 317
ApplicationUpdater.swf dosyası 318
ApplicatoinUpdater_UI.swc dosyası 317
app-storage URL şeması 40, 262
araç çubuğu (Mac OS) 62
arguments özelliği
BrowserInvokeEvent sınıfı 282
InvokeEvent sınıfı 279
boyut, pencereler 64
Clipboard sınıfı
boyutlar, pencereler 49
clipboardData özelliği (HTML copy-andpaste olayları) 144
browseForDirectory() yöntemi (File
sınıfı) 106
close olayı 76
browseForOpen() yöntemi (File sınıfı) 107
browseForSave() yöntemi (File sınıfı) 107
browserInvoke olayı 282, 306
BrowserInvokeEvent sınıfı 281
ByteArray sınıfı
bytesAvailable özelliği 149
compress() yöntemi 151
close() yöntemi
NativeWindow sınıfı 71
close() yöntemi (window nesnesi) 57
closing olayı 71, 76, 244, 283
complete olayı 232, 236, 241
compress() yöntemi (ByteArray sınıfı) 151
CompressionAlgorithm sınıfı 151
length özelliği 149
content öğesi (uygulama tanımlayıcı
dosyası) 48
position özelliği 149
contenteditable niteliği (HTML) 139
readBytes() yöntemi 148
contextmenu olayı 90
attach() yöntemi (SQLConnection
sınıfı) 178
readFloat() yöntemi 148
ContextMenu sınıfı 86, 89
readInt() yöntemi 148
ContextMenuEvent sınıfı
autoExit özelliği
readObject() yöntemi 148
Asfunction protokolü 28
at (@) karakteri, SQL ifadesi parametre
adlarında 167
NativeApplication sınıfı 283
readUTFBytes() yöntemi 148
contextMenuOwner özelliği 89
mouseTarget özelliği 89
AUTOINCREMENT sütunları (SQL) 177
uncompress() yöntemi 151
ContextMenuItem sınıfı 86
ayırıcı satırlar, menü 89
writeBytes() yöntemi 148
writeFloat() yöntemi 148
contextMenuOwner özelliği
(ContextMenuEvent sınıfı) 89
writeInt() yöntemi 148
çöp kutusu (dosya silme) 116
writeObject() yöntemi 148
copy olayı 144
writeUTFBytes() yöntemi 148
copy() yöntemi (NativeApplication
sınıfı) 146
B
bağlam menüleri 83, 89
HTML 90
başlangıç (sistem), bir AIR uygulamasını
başlatma 281
yapıcı 148
bytesAvailable özelliği (ByteArray sınıfı) 149
Başlat menüsü (Windows) 48
başlık çubuğu simgeleri (Windows) 62
bayt dizileri
bayt sırası 150
boyutu 149
konum 149
copyToAsync() yöntemi (File sınıfı) 115
Č
Canvas nesnesi 213, 220
CREATE TABLE ifadesi (SQL) 163
Capabilities sınıfı
createElement() yöntemi (Document
nesnesi) 228
playerType özelliği 287
çapraz komut dosyası 34, 230, 237
bayt sırası 150
Belge nesnesi
designMode özelliği 139
copyTo() yöntemi (File sınıfı) 115
Ch
childSandboxBridge özelliği
createDirectory() yöntemi (File sınıfı) 112
createRootWindow() yöntemi
(HTMLLoader sınıfı) 64, 66, 223
createTempDirectory() yöntemi (File
sınıfı) 112, 116
createTempFile() yöntemi (File sınıfı) 116
belgeler, ilgili 9
LoaderInfo sınıfı 35
creationDate özelliği (File sınıfı) 114
Belgelerim dizini (Windows) 104
Window nesnesi 30
creator özelliği (File sınıfı) 114
bellek içi veritabanları 162
ChosenSecurity sertifikaları 307, 308
big-endian bayt sırası 150
clearData() yöntemi
bilinmeyen yayıncı adı (AIR uygulama
yükleyicisinde) 307
ClipboardData nesnesi 214
DataTransfer nesnesi 137, 215
CSS
AIR uzantıları 221
HTML stillerine ActionScript'ten
erişme 236
bir AIR uygulamasıyla ilişkilendirilen
uzantılar (dosya) 50, 279
clientX özelliği (HTML drag olayları) 136
Ctrl tuşu 86
bir imzayı geçirme 310, 350
clientY özelliği (HTML drag olayları) 136
currentDirectory özelliği (InvokeEvent
sınıfı) 279
bitmap görüntüleri, simgeler için ayar 97
Clipboard 214
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 357
Dizin
currentDomain özelliği
(ApplicationDomain sınıfı) 231
dizinleri taşıma 113
dosyaları yazma 117
dizinleri temizleme 113
customUpdateUI öğesi (uygulama
tanımlayıcı dosyası) 49, 278, 315
dışarı sürükleme hareketi 128, 130
DPAPI (şifreli verilerin kullanıcılarla
ilişkilendirilmesi) 206
Dock menüleri 84
drag olayı 136, 215
dock simgeleri 98
dragend olayı 136, 215
cut olayı 144
Ď
data özelliği
NativeMenuItem sınıfı 87
DataTransfer nesnesi
types özelliği 139
DataTransfer nesnesi (HTML sürükle ve
bırak) 137, 138, 139, 215
deactivate olayı 76
default_badge.html 300
deflate sıkıştırma 151
değiştirici tuşlar, menü öğeleri 86
DELETE ifadesi (SQL) 177
destek 97
dragenter olayı 136, 215
menüler 87
dragleave olayı 136, 215
pencereyi simge durumuna küçültme
ve 70
dragover olayı 136, 215
zıplatma 98
DRM 265
Document nesnesi
dragstart olayı 136, 215
kimlik bilgileri 274
createElement() yöntemi 228
DRMAuthenticateEvent sınıfı 266, 273
designMode özelliği 216
DRMErrorEvent sınıfı 266
stylesheets özelliği 236
wirtelin() yöntemi 215
hata kodları 274
subErrorID özelliği 274
write() yöntemi 32, 215, 228
DRMStatusEvent sınıfı 266
writeln() yöntemi 32, 228
drop olayı 136, 215
deleteDirectory() yöntemi (File sınıfı) 113
documentRoot niteliği (kare ve iframe
öğeleri) 30, 210, 218, 238
dropAction özelliği (NativeDragEvent
sınıfı) 133, 134
deleteDirectoryAsync() yöntemi (File
sınıfı) 113
documentRoot nitelikleri (kare ve iframe
öğeleri) 30
dropEffect özelliği (DataTransfer
nesnesi) 137, 138, 215
deleteFile() yöntemi (File sınıfı) 116
documents dizini 104
deleteFileAsync() yöntemi (File sınıfı) 116
documentsDirectory özelliği (File sınıfı) 104
description öğesi (uygulama tanımlayıcı
dosyası) 46
doDrag() yöntemi (NativeDragManager
sınıfı) 129, 131, 134
É
effectAllowed özelliği (DataTransfer
nesnesi) 137, 138, 215
designMode özelliği (Document
nesnesi) 139, 216
dominitialize olayı 218
eklentiler (HTML'de) 210
dosya API'si 102
ekranlar 79
desktopDirectory özelliği (File sınıfı) 104
Dictionary sınıfı 229
dijital haklar yönetimi 265
dijital imzalar 307, 341, 347
dinamik kod oluşturma 31
dosya listeleri
sürükle ve bırak desteği 137
dosya seçici iletişim kutuları 107
dosya sistemi
güvenlik 38
ana 80
numaralandırma 80
pencereler,taşınan 80
ekranları numaralandırma 80
encoding özelliği (File sınıfı) 111
dispatchEvent() yöntemi (NativeWindow
sınıfı) 58
dosya sistemi API'si 102
EncryptedLocalStore sınıfı 206
display() yöntemi (NativeMenu sınıfı) 92
dosya sistemiyle yerel sanal alan 27, 211
Endian.BIG_ENDIAN 150
displayState özelliği (Stage sınıfı) 77
dosya türlerini kaydetme 286
Endian.LITTLE_ENDIAN 150
displayStateChange olayı 58, 77
dosya türü ilişkilendirmeleri 50, 279, 286
enterFrame olayı 67
displayStateChanging olayı 58, 77
dosya URL şeması 38, 108, 230
error olayı 166
dizin oluşturma 112
dosyalar
etki alanları arası önbellek güvenliği 28
dizin seçici iletişim kutuları 106
başvurma 106
etkin menü öğeleri 87
dizinler 104, 112
kopyala ve yapıştır desteği 143
etkin pencere 69, 70
başvurma 104
kopyalama 115
etkinlik (kullanıcı), saptama 287
kopyalama 113
okuma 117
eval() işlevi 28, 31, 212, 224, 225
numaralandırma 113
silme 116
oluşturma 112
sürükle ve bırak desteği 128
execute() yöntemi (SQLStatement
sınıfı) 167, 169, 176
silme 113, 116
taşıma 115
exists özelliği (File sınıfı) 114
taşıma 113
veritabanı 158
exit() yöntemi
uygulama başlatma 279
yazma 117
dizinleri kopyalama 113
dosyaları kopyalama 115
dizinleri numaralandırma 113
dosyaları okuma 117
dizinleri silme 113, 116
dosyaları silme 116
dosyaları taşıma 115
NativeApplication sınıfı 283
exiting olayı 283
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 358
Dizin
F
FDB (hata ayıklayıcı) 340
File sınıfı 102, 103
FileReference sınıfı
load() yöntemi 125
save() yöntemi 125
gözatma
dizin seçmek için 106
dosya seçmek için 107
applicationStorageDirectory özelliği 103
FileStream sınıfı 102
güncelleme çerçevesi 316
browseForDirectory() yöntemi 106
browseForOpen() yöntemi 107
fileTypes öğesi (uygulama tanımlayıcı
dosyası) 50, 286
güncelleme tanımlayıcı dosyası (güncelleme
çerçevesi) 319
browseForSave() yöntemi 107
Flash belgeleri 9
copyTo() yöntemi 115
Flash Media Rights Management Server 265
güncelleme yapılandırma dosyası
(güncelleme çerçevesi) 321
copyToAsync() yöntemi 115
Flash Player 52, 208, 211, 229
güvenlik
createDirectory() yöntemi 112
FlashVars ayarları (badge.swf'yi kullanmak
için) 300
Ajax çerçeveleri 33
Flex
çapraz komut dosyası 34
createTempDirectory() yöntemi 112, 116
createTempFile() yöntemi 116
creationDate özelliği 114
creator özelliği 114
deleteDirectory() yöntemi 113
sürükle ve bırak desteği 130
CSS 29
FLV videoları, şifreleme 265
dinamik kod oluşturma 31
FMRMS (Flash Media Rights Management
Server) 265
dosya sistemi 38
deleteDirectoryAsync() yöntemi 113
deleteFile() yöntemi 116
asfunction protokolü 28
en iyi uygulamalar 40
etki alanları arası önbellek 28
deleteFileAsync() yöntemi 116
G
geçici dizinler 112
eval() işlevi 31
desktopDirectory özelliği 103
geçici dosyalar 116
documentsDirectory özelliği 103
içerik yükleme 65
gereksinimler
iframe'ler 29, 30
encoding özelliği 111
exists özelliği 114
PDF oluşturma 261
getDirectoryListingAsync() yöntemi 113
getApplicationVersion() yöntemi (air.swf
dosyası) 304
getRootDirectories() 103
getData() yöntemi
getRootDirectories() yöntemi 103
Clipboard sınıfı 134
isDirectory özelliği 114
ClipboardData nesnesi 214
lineEnding özelliği 111
DataTransfer nesnesi 139, 215
load() yöntemi 125
HTML copy-and-paste olayı 144
modificationDate özelliği 114
HTML 29, 31, 208, 210, 224
img etiketleri 28
indirgeme saldırıları 41
JavaScript 237
JavaScript hataları 225
kareler 29, 30
kullanıcı kimlik bilgileri 41
Loader.loadBytes() yöntemi 40
metin alanları 28
moveTo() yöntemi 115
getData() yöntemi (bir HTML drag olayının
dataTransfer özelliğine ait) 137
moveToAsync() yöntemi 115
getData() yöntemi (Clipboard sınıfı) 130
sanal alanlar 27, 210, 211, 237, 287
moveToTrash() yöntemi 116
getDefaultApplication() yöntemi
(NativeApplication sınıfı) 286
tarayıcı başlatma özelliği 282
getDirectoryListing() yöntemi (File
sınıfı) 113
uygulama dışı sanal alanlar 28
getDirectoryListingAsync() yöntemi (File
sınıfı) 113
verileri şifreleme 206
getResult() yöntemi (SQLStatement
sınıfı) 176
XMLHTTPRequest 218
moveToTrashAsync() yöntemi 116
name özelliği 114
nativePath özelliği 103, 114
parent özelliği 114
relativize() yöntemi 109
resolvePath() yöntemi 103
save() yöntemi 125
separator özelliği 111
size özelliği 114
spaceAvailable özelliği 111
type özelliği 114
url özelliği 103, 114
userDirectory özelliği 103
yerel bir veritabanına başvurma 162
FileMode sınıfı 102
filename öğesi (uygulama tanımlayıcı
dosyası) 45
getScreensForRectangle() yöntemi(Screen
sınıfı) 80
getStatus() yöntemi (air.swf dosyası) 303
GlobalSign sertifikaları 307, 308
gömülü nesneler (HTML'de) 210
sanal alan köprüleri 30, 34, 238
uygulama depolama dizini 25
uygulama sanal alanı 27
veritabanı 168
XMLHttpRequest nesneleri 33
yükleme (uygulama ve çalışma
zamanı) 23
yükleme için kullanıcı ayrıcalıkları 23
GZIP formatı 151
göreceli yollar (dosyalar arasında) 109
görüntü sırası, pencereler 70
H
hafif pencereler 59
görüntüler
hasEventListener() yöntemi 246
görev çubuğu simgeleri 70, 97
Bkz. ekranlar
hata ayıklama
ADL kullanarak 340
hata kodları
DRM 274
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 359
Dizin
height öğesi (uygulama tanımlayıcı
dosyası) 49
height özelliği (HTMLLoader sınıfı) 223
Icon sınıfı
bitmaps özelliği 97
J
Java Cryptography Architecture (JCA) 347
bounce() yöntemi 98
JavaScript
hizmet pencereleri 59
id öğesi (NativeApplication sınıfı) 285
ActionScript çapraz komut dosyası 230
hostContainer özelliği (PDF) 263
id öğesi (uygulama tanımlayıcı dosyası) 45
AIR API'lere erişim 228
HTML
idleThreshold özelliği (NativeApplication
sınıfı) 287
AIR çalışma zamanı ve 208
AIR uzantıları 218
DOM, ActionScript'ten erişim 232
ifadeler, SQL 166
AIRAliases.js dosyası 209, 229
eklentiler 210
iframe öğeleri 30, 210, 212, 218
error olayları 241
gömülü nesneler 210
güvenlik 237
güvenlik 29, 210, 237
iki nokta (:) karakteri, SQL ifadesi parametre
adlarında 167
kaydırma 241
ikili veriler
kopyala ve yapıştır 143
olaylar 241
pencereler 64
sanal alanlar 211
sürükle ve bırak desteği 128, 137
SWF içeriğini kaplama 66
yazdırma 211
yükleme içeriği 223
HTML DOM ve yerel pencereler 57
htmlBoundsChanged olayı 241
Bkz. bayt dizileri
ilişkisel veritabanları
Bkz. veritabanları
PDF 262
programlama 223
JavaScript URL şeması 32, 227
imzalar
javascript URL şeması 217
geçirme 310, 350
indirgeme saldırıları ve güvenlik 41
JavaSoft geliştirici sertifikaları 309
JSON 212
Info.plist dosyaları (Mac OS) 47
innerHTML özelliği 32, 215, 228
HTMLLoader sınıfı 223
olaylar, işleme 244
imleç, sürükle ve bırak efektleri 134, 138
HTMLLoader
htmlLoader özelliği (window nesnesi) 65
hatalar 225, 232, 242, 245
JavaScript güvenliği 31
initialWindow öğesi (uygulama tanımlayıcı
dosyası) 48, 57
htmlLoader özelliği (Window nesnesi) 209,
217, 223
güvenlik hatalarını önleme 225
img etiketleri (TextField nesnesi
içeriğinde) 28
htmlDOMInitialize olayı 241
placeLoadStringContentInApplicationSa
ndbox özelliği 223
AIR desteği 211
INSERT ifadesi (SQL) 181
K
kaldırma
AIR çalışma zamanı 2
AIR uygulamaları 26
installApplication() yöntemi (air.swf
dosyası) 305
kare öğeleri 210, 212, 218
installFolder öğesi (uygulama tanımlayıcı
dosyası) 47
kendinden imzalı sertifikalar 41, 307, 351
createRootWindow() yöntemi 64, 66, 223
INTEGER PRIMARY KEY sütunları
(SQL) 177
height özelliği 223
invoke olayı 278
JavaScript erişimi 209
InvokeEvent sınıfı 51, 279
loadString() yöntemi 34, 223
arguments özelliği 279
olaylar 241
currentDirectory özelliği 279
kareler 30
Keyboard sınıfı 86
KeyChain (şifreli verilerin kullanıcılarla
ilişkilendirilmesi) 206
keyEquivalent özelliği (NativeMenuItem
sınıfı) 86
keyEquivalentModifiers özelliği
(NativeMenuItem sınıfı) 86
kimlik bilgileri
paintsDefaultBackground özelliği 60, 67
işaretli menü öğeleri 87
pdfCapability özelliği 261
isDirectory özelliği (File sınıfı) 114
placeLoadStringContentInApplicationSa
ndbox özelliği 34
isHTTPS özelliği (BrowserInvokeEvent
sınıfı) 282
klavye kısayolları
runtimeApplicationDomain özelliği 231
İşlev yapıcıları (JavaScript'te) 212
kod imzalama 41, 307
width özelliği 223
işlevler (JavaScript)
kök birimler 104
HTMLPDFCapability sınıfı 261
değişmezler 32
HTMLUncaughtScriptException sınıfı 242
tanımlar 32
yapıcı 227
Í
içeri sürükleme hareketi 128, 133
isSetAsDefaultApplication() yöntemi
(NativeApplication sınıfı) 286
DRM şifreli içerik için 274
kopyala ve yapıştır 145
komut dosyası etiketleri 212, 215, 228, 230,
234
src özelliği 32
komut satırı argümanları, yakalama 279
Komut tuşu 86
icon öğesi (uygulama tanımlayıcı
dosyası) 49
komutlar, menü
icon özelliği (NativeApplication sınıfı) 97
kopyala ve yapıştır
Bkz. menü öğeleri
HTML 143, 214
klavye kısayolları 145
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 360
Dizin
menü komutları 145
maxSize öğesi (uygulama tanımlayıcı
dosyası) 49
Microsoft Windows
tuş eşdeğerleri 147
varsayılan menü öğeleri (Mac OS) 146
menü
MIME türleri
kullanıcı adları
şifreli ortam içeriği için ayar 265
kullanıcı etkinliği, saptama 287
kullanıcı kimlik bilgileri ve güvenlik 41
olaylar 94
HTML kopyala ve yapıştır 214
uygulama 94
HTML sürükle ve bırak 137
yapı 85
menü çubukları 85
menü komutları için hızlandırıcı tuşlar 86
L
label özelliği (NativeMenuItem sınıfı) 146
başlık çubuğu simgeleri 62
menü komutları için tuş eşdeğerleri 86
menü öğeleri 85
minimizable öğesi (uygulama tanımlayıcı
dosyası) 49
minimize() yöntemi (NativeWindow
sınıfı) 72
minimumPatchLevel niteliği (uygulama
tanımlayıcı dosyası) 43
lastInsertRowID özelliği (SQLResult
sınıfı) 176
anımsatıcı karakterler 86
data, atama 87
minSize öğesi (uygulama tanımlayıcı
dosyası) 49
lastUserInput özelliği (NativeApplication
sınıfı) 287
durumlar 87
mnemonicIndex özelliği
length özelliği (ByteArray sınıfı) 149
hızlandırıcı tuşlar 86
lineEnding özelliği (File sınıfı) 111
modificationDate özelliği (File sınıfı) 114
işaretli 87
listRootDirectories() yöntemi (File
sınıfı) 104
monitörler
kopyala ve yapıştır 146
little-endian bayt sırası 150
load olayı 210, 212, 225, 232
load olayları 228
load() yöntemi (FileReference sınıfı) 125
loadBytes() yöntemi (Loader sınıfı) 40
Loader sınıfı 65
Loader.loadBytes() yöntemi 40
LoaderContext sınıfı
etkin 87
NativeMenuItem sınıfı 86
Bkz. ekranlar
oluşturma 88
mouseDown olayı 74, 129
seçme 93
mouseMove olayı 129
tuş eşdeğerleri 86
menuItemSelect olayları 86
mouseTarget özelliği (ContextMenuEvent
sınıfı) 89
menüler 83
move olayı 58, 76
açılır 87, 92
alt menüler 85, 88
ayırıcı satırlar 89
moveTo() yöntemi
File sınıfı 115
Window nesnesi 57
bağlam menüleri 89
moveToAsync() yöntemi (File sınıfı) 115
birlikte çalışılacak sınıflar 84
moveToTrash() yöntemi (File sınıfı) 116
applicationDomain özelliği 35
dock 84
securityDomain özelliği 35
dock öğesi 87
moveToTrashAsync() yöntemi (File
sınıfı) 116
kopyala ve yapıştır komutları 145
moving olayı 76
allowLoadBytesCodeExecution
özelliği 40
LoaderInfo sınıfı
childSandboxBridge özelliği 35
öğeler 85
parentSandboxBridge özelliği 35
olay akışı 85, 92
loadString() yöntemi (HTMLLoader
sınıfı) 34, 223
oluşturma 87
LocalConnection sınıfı 299, 306
pencere 87, 94
locationChange olayı 241
sistem tepsisi simgeleri 84
özel 84
sistem tepsisi simgesi 87
M
Mac OS
türleri 84
tuş eşdeğerleri 86
araç çubuğu 62
uygulama 87
proxy simgeleri 62
varsayılan sistem 84
mainScreen özelliği (Screen sınıfı) 80
XML, tanımlama 90
makbuzlar, DRM şifreli içerikle
kullanma 265
yapı 84
menuSelect olayları 86
masaüstü dizini 104
messageHandler özelliği (PDF) 263
masaüstü pencereleri
metin
Bkz. pencereler
maximizable öğesi (uygulama tanımlayıcı
dosyası) 49
maximize() yöntemi (NativeWindow
sınıfı) 72
kopyala ve yapıştır desteği 143
sürükle ve bırak desteği 128, 137
Microsoft authenticode digital ID'ler 308
Microsoft authenticode sertifikaları 309
Ň
name öğesi (uygulama tanımlayıcı
dosyası) 46
name özelliği (File sınıfı) 114
NativeApplication sınıfı 217
activeWindow özelliği 69
addEventListener() yöntemi 278
applicationDescriptor özelliği 285
autoExit özelliği 283
copy() method() 146
exit() yöntemi 283
getDefaultApplication() yöntemi 286
icon özelliği 97
id özelliği 285
idleThreshold özelliği 287
isSetAsDefaultApplication() yöntemi 286
lastUserInput özelliği 287
publisherID özelliği 285, 308
removeAsDefaultApplication()
yöntemi 286
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 361
Dizin
runtimePatchLevel özelliği 287
orderBehind() yöntemi 70
runtimeVersion özelliği 287
orderInBackOf() yöntemi 70
setAsDefaultApplication() yöntemi 50
orderInFrontOf() yöntemi 70
startAtLogin özelliği 281
orderToBack() yöntemi 70
open() yöntemi (SQLConnection sınıfı) 162
supportsDockIcon özelliği 97
orderToFront() yöntemi 70
supportsMenu özelliği 94
restore() yöntemi 72
openAsync() yöntemi (SQLConnection
sınıfı) 161, 162, 164
supportsSystemTrayIcon özelliği 97
stage özelliği 67
opener özelliği (window nesnesi) 65
NativeApplication.setAsDefaultApplication
() yöntemi 286
startMove() yöntemi 75
orderBehind() yöntemi (NativeWindow
sınıfı) 70
NativeBoundsEvent sınıfı 76
systemChrome özelliği 59
nativeDragComplete olayı 129, 133, 135
systemMaxSize özelliği 64
nativeDragDrop olayı 129
systemMinSize özelliği 64
nativeDragEnter olayı 129, 133, 134, 135
transparent özelliği 59, 60
NativeDragEvent sınıfı
type özelliği 59
clipboard özelliği 134
dropAction özelliği 133, 134
startResize() yöntemi 74
visible özelliği 64, 70
yapıcı 64
nativeDragExit olayı 129, 135
NativeWindowDisplayStateEvent sınıfı 77
NativeDragManager sınıfı
NativeWindowInitOptions sınıfı 63, 64
acceptDragDrop() yöntemi 129, 134
doDrag() yöntemi 129, 131, 134
nativeDragOver olayı 129, 133, 134, 135
nesne başvuruları
open() yöntemi
SQLConnection sınıfı 161
Window nesnesi 34, 64, 217
orderInBackOf() yöntemi (NativeWindow
sınıfı) 70
orderInFrontOf() yöntemi (NativeWindow
sınıfı) 70
orderToBack() yöntemi (NativeWindow
sınıfı) 70
orderToFront() yöntemi (NativeWindow
sınıfı) 70
örnek uygulamalar 2
otomatik başlatma (bir AIR uygulamasını
oturum açılırken başlatma) 281
kopyala ve yapıştır desteği 143
oturum açma, bir AIR uygulamasını
başlatma 281
sürükle ve bırak desteği 128
outerHTML özellikleri 215
nativeDragStart olayı 129, 135
nesne değişmezleri (JavaScript'te) 32
özel anahtarlar 347
nativeDragUpdate olayı 129, 135
nesneleri serileştirme 130
özel güncelleme kullanıcı arabirimi 315
NativeMenu sınıfı 85, 92
NetStream sınıfı
özel krom 59
NativeMenuItem sınıfı 85
alt menü özelliği 85
preloadEmbeddedMetadata()
yöntemi 267
data özelliği 87
resetDRMVouchers() yöntemi 270
keyEquivalent özelliği 86
setDRMAuthenticationCredentials()
yöntemi 266, 270
keyEquivalentModifiers özelliği 86
label özelliği 146
mnemonicIndex özelliği 86
Netstream sınıfı
şifreli içerik, oynatma 266
Özellikler
language özelliği 329
languages özelliği 329
P
P12 dosyaları 308
nativePath özelliği (File sınıfı) 104, 114
normal pencereler 59
paintsDefaultBackground özelliği
(HTMLLoader sınıfı) 60, 67
nativeWindow özelliği
NSHumanReadableCopyright alanı (Mac
OS) 47
Pano
Stage sınıfı 63, 69
Window nesnesi 209, 216
kopyala ve yapıştır 143
parameters özelliği (SQLStatement
sınıfı) 166, 167
nativeWindow özelliği (window nesnesi) 57,
65
Ó
OID sütun adı (SQL) 177
NativeWindow sınıfı 56
olay seç 85, 93, 94
parent özelliği (File sınıfı) 114
activate yöntemi 70
olayı görüntüleme 85, 94
parent özelliği (window nesnesi) 65
activate yöntemi() 64
olaylar
parentSandboxBridge özelliği
parametreler, SQL ifadelerinde 167
activate() yöntemi 70
dinleyiciler 244
LoaderInfo sınıfı 35
addEventListener() yöntemi 76
HTML 241
Window nesnesi 30
alwaysInFront özelliği 70
işleyiciler 244
başlatma 68
menü 85, 92
close() yöntemi. 71
NativeWindow sınıfı 76
parentSandboxBridge özelliği (Window
nesnesi) 238
yerel pencereler 58
PDF
dispatchEvent() yöntemi 58
Window nesnesi) 217
JavaScript erişimi 209
ölçeklenebilir vektör grafikleri (SVG) 211
maximize() yöntemi 72
onclick işleyicisi 228
minimize() yöntemi 72
ondominitialize niteliği 218
AIR uygulamasına ekleme 261
olaylar 76
onload işleyicisi 31
bilinen sınırlamalar 264
onmouseover işleyicisi 228
destek 210, 261
PDF içeriği
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 362
Dizin
JavaScript iletişimi 262
yeniden yükleme 58, 72
yükleme 262
yönetme 69
pdfCapability özelliği (HTMLLoader
sınıfı) 261
pencereleri büyütme 49, 58, 72
pencere
pencereleri gizleme 70
kapatma 283
pencere menüleri 83, 94
oluşturma 87
pencereler
pencereleri etkinleştirme 64, 70
pencereleri gösterme 70
pencereleri kapatma 58, 71, 283
pencereleri küçültme 49
resetDRMVouchers() yöntemi (NetStream
sınıfı) 270
resizable öğesi (uygulama tanımlayıcı
dosyası) 49
resize olayı 58, 76
resizing olayı 76
resolvePath() yöntemi (File sınıfı) 104
Responder sınıfı 166, 176
restore() yöntemi (NativeWindow sınıfı) 72
arka plan 60
pencereleri simge durumuna küçültme 58,
70, 72
başlatma 62
pencereleri sıralama 70
ROWID sütun adı (SQL) 177
boyut 64
pencereleri taşıma 58, 74, 75
_ROWID_ sütun adı (SQL) 177
boyutu 49
büyütme 49, 58, 72
pencereleri yeniden boyutlandırma 49, 58,
74
runtime özelliği (Window nesnesi) 65, 209,
216, 229
çalışılacak sınıflar 57
pencereleri yeniden yükleme 58, 72
davranış 59
pencerelerin arka planı 60
runtimeApplicationDomain özelliği
(HTMLLoader sınıfı) 231
dikdörtgen olmayan 60
pencerelerin boyutu 49
etkin 69, 70
pencerelerin görünümü 59
etkinleştirme 64
pencerelerin görünürlüğü 48
gizleme 70
pencerelerin konumu 49
görüntü sırası 70
pencerelerin sırası 70
görünüm 59
PFX dosyaları 308
görünürlük 48
gösterme 70
placeLoadStringContentInApplicationSand
box özelliği (HTMLLoader sınıfı) 34,
223
hafif 59
playerType özelliği
hizmet pencereleri 59
Capabilities sınıfı 287
result olayı 166
runtimePatchLevel özelliği
(NativeApplication sınıfı) 287
runtimeVersion özelliği (NativeApplication
sınıfı) 287
Š
sanal alan köprüleri 30, 34, 210, 211, 225,
237, 238
sanal alanlar 27, 211, 237, 287
sandboxRoot niteliği (kare ve iframe
öğeleri) 210, 238
ilk 57
position özelliği (ByteArray sınıfı) 149
sandboxRoot niteliği (kare ve öğeleri) 213,
218
kapatma 58, 71
postMessage() yöntemi (PDF nesnesi) 263
sandboxRoot özelliği
konum 49
krom 59
preloadEmbeddedMetadata() yöntemi
(NetStream sınıfı) 267
küçültme 49
print() yöntemi (Window nesnesi) 211
maksimum boyut 64
Program Dosyaları dizini (Windows) 298
BrowserInvokeEvent sınıfı 282
minimum boyut 64
Security sınıfı 287
normal pencereler 59
programMenuFolder öğesi (uygulama
tanımlayıcı dosyası) 48
satırlar (veritabanı) 159, 176
olay akışı 58
proxy simgeleri
save() yöntemi (FileReference sınıfı) 125
olaylar 76
Mac OS 62
oluşturma 62, 68, 223
publisherid dosyası 285
özel krom 59
publisherID özelliği (NativeApplication
sınıfı) 285, 308
özellikler 48
sahne ölçek modları 64
saydamlık 48
şeffaflık 60
simge durumuna küçültme 58, 70, 72
sistem kromu 59
sıra 70
stil 59
taşıma 58, 74, 75, 80
türler 59
yeniden boyutlandırma 49, 58, 74
Ř
readBytes() yöntemi (ByteArray sınıfı) 148
readFloat() yöntemi (ByteArray sınıfı) 148
readInt() yöntemi (ByteArray sınıfı) 148
readObject() yöntemi (ByteArray sınıfı) 148
readUTFBytes() yöntemi (ByteArray
sınıfı) 148
relativize() yöntemi (File sınıfı) 109
removeAsDefaultApplication() yöntemi
(NativeApplication sınıfı) 286
removeEventListener() yöntemi 245
iframe 30
kare 30
sandboxType özelliği
saydam pencereler 48
scaleMode özelliği
Stage sınıfı 74
Screen sınıfı 79
getScreenForRectangle() yöntemi 80
mainScreen özelliği 80
screens özelliği 80
screens özelliği (Screen sınıfı) 80
screenX özelliği (HTML drag olayları) 136
screenY özelliği (HTML drag olayları) 136
scroll olayı 241
security
window.open() 34
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 363
Dizin
Security sınıfı
simgeler
SQLLite veritabanı desteği 157
allowDomain() yöntemi 35, 39
dock 97, 98
sandboxType özelliği 287
görev çubuğu 70, 97
SQLMode sınıfı 159, 165
securityDomain özelliği
(BrowserInvokeEvent sınıfı) 282
görüntüler 97
SQLResult sınıfı 159, 176
hareketlendirme 97
SQLSchemaResult sınıfı 159
şeffaf pencereler 60
kaldırma 97
SQLStatement sınıfı 159, 165
SELECT ifadesi (SQL) 169, 181
sistem tepsisi 97
execute yöntemi 167
senkronize olmayan programlama
uygulama 49
execute() yöntemi 169, 176
dosya sistemi 102
veritabanları 161, 164, 181
XMLHttpRequests 228
senkronize programlama
dosya sistemi 102
sistem kromu 59
HTML pencereleri 64
sistem tepsisi simgeleri 84, 87
destek 97
Ayrıca bkz. veritabanları
getResult() yöntemi 176
parameters nesnesi 166
parameters özelliği 167
sqlConnection özelliği 166
veritabanları 161, 164, 181
sistemde oturum açma, bir AIR
uygulamasını başlatma 281
SQLTableSchema sınıfı 159
XMLHttpRequests 228
size özelliği (File sınıfı) 114
SQLTransactionLockType sınıfı 159
soru işareti (?) karakter, adlandırılmamış
SQL parametrelerinde 168
SQLTriggerSchema sınıfı 159
separator özelliği (File sınıfı) 111
serileştirilmiş nesneler
kopyala ve yapıştır desteği 143
spaceAvailable özelliği (File sınıfı) 111
sürükle ve bırak desteği 128
SQL
sertifika iptal listesi (CRL) 312
sertifika uygulama bildirimi (CPS) 312
adlandırılmamış parametreler
(ifadelerde) 168
text özelliği 166, 167, 169, 177
SQLUpdateEvent sınıfı 159
SQLViewSchema sınıfı 159
stage özelliği
NativeWindow sınıfı 67
Stage sınıfı
sertifika yetkilileri (CA'lar) 307
adlandırılmış parametreler
(ifadelerde) 167
sertifikalar
AUTOINCREMENT sütunları 177
addChildAt() yöntemi 67
ADT komut satırı seçenekleri 347
CREATE TABLE ifadesi 163
displayState özelliği 77
AIR dosyalarını imzalama 307
DELETE ifadesi 177
nativeWindow özelliği 63, 69
değiştirme 310, 350
hakkında 159
formatlar 308
ifadeler 165, 166
StageDisplayState sınıfı 77
geçiş 310, 350
ifadelerdeki parametreler 167
StageScaleMode sınıfı 64, 74
kod imzalama 41
INSERT ifadesi 181
süresi dolan 309
INTEGER PRIMARY KEY sütunları 177
startAtLogin özelliği (NativeApplication
sınıfı) 281
yetkililer (CA'lar) 41
kullanılan sınıflar 159
zincirler 312
OID sütun adı 177
setAsDefaultApplication() yöntemi
(NativeApplication sınıfı) 50, 286
setData() yöntemi
ClipboadData nesnesi 214
DataTransfer nesnesi 137, 139, 215
startMove() yöntemi (NativeWindow
sınıfı) 75
startResize() yöntemi (NativeWindow
sınıfı) 74
_ROWID_ sütun adı 177
StatusEvent sınıfı 266
SELECT ifadesi 169, 181
stil sayfaları, HTML
UPDATE ifadesi 177
veri türleme 168, 181
SQLCollationType sınıfı 159
setDRMAuthenticationCredentials()
yöntemi (NetStream sınıfı) 266, 270
sqlConnection özelliği (SQLStatement
sınıfı) 166
setInterval() işlevi 32, 217, 227
SQLConnection sınıfı 159
setTimeout() işlevi 32, 217, 227
attach() yöntemi 178
Shift tuşu 86
open yöntemi 162
şifreleme 265
open() yöntemi 161
şifreli ortam içeriği için ayar 265
scaleMode özelliği 64, 74
ROWID sütun adı 177
setDragImage() yöntemi (bir HTML drag
olayının dataTransfer özelliğine
ait) 137
şifreler
addChild() yöntemi 67
SQLColumnNameStyle sınıfı 159
openAsync() yöntemi 161, 162, 164
SQLError sınıfı 159, 166
şifreli veriler, saklama ve alma 206
SQLErrorEvent sınıfı 159, 166
şifreli verileri güçlü ciltleme 206
SQLEvent sınıfı 159
SQLIndexSchema sınıfı 159
ActionScript'te değiştirme 236
styleSheets özelliği (Document nesnesi) 236
subErrorID özelliği (DRMErrorEvent
sınıfı) 274
Sun Java signing digital ID'ler 308
supportsDockIcon özelliği
(NativeApplication sınıfı) 97
supportsMenu özelliği (NativeApplication
sınıfı) 94
supportsSystemTrayIcon özelliği
(NativeApplication sınıfı) 97
sürükle ve bırak
aktarım formatları 128
değiştirici tuşlar 134
Flex desteği 130
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 364
Dizin
hareketler 128
Ú
uncaughtScriptExcpetion olayı 241
V
veri doğrulaması, uygulama başlatma 282
uncompress() yöntemi (ByteArray
sınıfı) 151
veri şifreleme 206
HTML'deki olaylar 136
ilgili sınıflar 128
unload olayları 216
verileri sıkıştırma 151
imleç efektleri 134, 138
UntrustedAppInstallDisabled (Windows
kayıt defteri ayarları) 26
VeriSign sertifikaları 308
HTML 135, 215
HTML'de varsayılan davranış 136
uygulama dışı sanal alan içeriğine
(HTML'de) 141
UPDATE ifadesi (SQL) 177
sürükleme sırasında fare konumu 135
update() yöntemi (Updater sınıfı) 313
sürümler, AIR uygulaması 287
UpdateDisabled (Windows kayıt defteri
ayarları) 26
sütunlar (veritabanı) 159
SWF dosyaları
komut dosyası etiketi yoluyla
yükleme 234
veri türleri, veritabanı 181
Verisign sertifikaları 307, 308
veritabanı
hatalar 178
kullanılan sınıflar 159
Updater sınıfı 313
veritabanına bağlanma 164
url özelliği
veritabanları
File sınıfı 104, 114
alanlar 159
url özelliği (File sınıfı) 104
ana anahtarlar 176, 177
HTML'de 210
URL şemaları 108
bağlanma 164
HTML'nin üzerini kaplama 66
URL'ler 230
bellek içi 162
SWF içeriği
systemChrome özelliği (NativeWindow
sınıfı) 59
kopyala ve yapıştır desteği 143
çoklu, çalışma 178
sürükle ve bırak desteği 128, 137
dosyalar 158
güvenlik 168
systemMaxSize özelliği (NativeWindow
sınıfı) 64
URLs
systemMinSize özelliği (NativeWindow
özelliği) 64
URLStream sınıfı 212
kullanımlar 158
userDirectory özelliği (File sınıfı) 104
oluşturma 162
userIdle olayı 287
performans 168
userPresent olayı 287
satır kimlikleri 177
uyg. depolama URL şeması 108
satırlar 159
uyg. URL şeması 108, 211
senkronize mod 161
uygulama depolama dizini 25, 104, 108, 230
senkronize olmayan mod 161
uygulama depolama URL şeması 25
sütunlar 159
uygulama dizini 104
tablolar 159, 163
uygulama dışı sanal alanlar 28, 141, 211, 224,
225, 238
veri alma 169
uygulama kimlikleri 45
verileri değiştirme 177
uygulama menüleri 83, 94
verileri silme 177
Ť
tablolar (veritabanı) 159
oluşturma 163
tam ekran pencereler 77
tanımlama bilgileri 214
tarayıcı başlatma özelliği 50, 281
teknik destek 9
text özelliği (SQLStatement sınıfı) 166, 167,
169, 177
TextField sınıfı
HTML yükleme yeri 223
img etiketleri 28
Thawte sertifikaları 307, 308
HTML içeriği yükleme 223
oluşturma 87
uygulama olmayan sanal alanlar 210
title öğesi (uygulama tanımlayıcı dosyası) 48
uygulama sanal alanı 27, 210, 211, 223, 224,
225, 228, 238, 287
tost stili pencereler 70
uygulama tanımlayıcı dosyası 42
transparent öğesi (uygulama tanımlayıcı
dosyası) 48
uygulama tanımlayıcı özelliği
transparent özelliği (NativeWindow
sınıfı) 59, 60
uygulamalar
tuş eşdeğerleri
okuma 285
hakkında 158
veri türleme 168, 181
yapı 159
version öğesi (uygulama tanımlayıcı
dosyası) 45
video içeriğini şifreleme 265
visible öğesi (uygulama tanımlayıcı
dosyası) 48
visible özelliği
NativeWindow sınıfı 64, 70
Bkz. AIR uygulamaları
W
web tarayıcıları
kopyala ve yapıştır 147
uygulamaları çevirme 328
type özelliği (File sınıfı) 114
uygulamaları kapatma 283
type özelliği (NativeWindow sınıfı) 59
uzak sanal alanlar 27, 211
AIR çalışma zamanını saptama 303
types özelliği
uzantılar (dosya), AIR uygulamasıyla
ilişkili 286
AIR uygulamalarını başlatma 305
DataTransfer nesnesi 215
HTML copy-and-paste olayı 144
HTML drag olayı 137
types özelliği (DataTransfer nesnesi) 139
AIR uygulamalarını yükleme 305
AIR uygulamasının yüklenip
yüklenmediğini saptama 304
bir AIR uygulamasını başlatma 281
WebKit 208, 210, 221
FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.5 UYGULAMALARI GELIŞTIRME 365
Dizin
-webkit-border-horizontal-spacing CSS
özelliği 221
writeObject() yöntemi (ByteArray
sınıfı) 148
-webkit-border-vertical-spacing CSS
özelliği 221
writeUTFBytes() yöntemi (ByteArray
sınıfı) 148
-webkit-line-break CSS özelliği 221
-webkit-margin-bottom-collapse CSS
özelliği 221
X
x öğesi (uygulama tanımlayıcı dosyası) 49
-webkit-margin-collapse CSS özelliği 221
XML
-webkit-margin-start CSS özelliği 221
-webkit-margin-top-collapse CSS
özelliği 221
menü tanımlama yolu 90
sınıf 229
-webkit-nbsp-mode CSS özelliği 221
XML ad alanı (uygulama tanımlayıcı
dosyası) 43
-webkit-padding-start CSS özelliği 221
XMLHttpRequest nesnesi 33, 212, 218, 228
-webkit-rtl-ordering CSS özelliği 222
XMLList sınıfı 229
-webkit-text-fill-color CSS özelliği 222
xmlns (uygulama tanımlayıcı dosyası) 43
-webkit-text-security CSS özelliği 222
-webkit-user-drag CSS özelliği 136, 222, 138
-webkit-user-modify CSS özelliği 222
Y
y öğesi (uygulama tanımlayıcı dosyası) 49
-webkit-user-select CSS özelliği 136, 138,
222
yama düzeyleri
width öğesi (uygulama tanımlayıcı
dosyası) 49
yama düzeyleri, AIR çalışma zamanı 43
width özelliği (HTMLLoader sınıfı) 223
yayıncı adı 307
Window nesnesi
yayıncı kimlikleri 285, 308
AIR çalışma zamanı 287
childSandboxBridge özelliği 30
yazdırma 211
close() yöntemi 57
yerel ayarlar, bir uygulama için seçme 329
htmlLoader nesnesi 209
yerel güvenilir sanal alan 27, 211
htmlLoader özelliği 65, 217, 223
yerel menüler
moveTo() yöntemi 57
nativeWindow nesnesi 209
nativeWindow özelliği 57, 65, 216
open yöntemi 217
open() yöntemi 34, 64
Bkz. menüler
yerel pencereler
Bkz. pencereler
yerel veritabanları
Bkz. veritabanları
opener özelliği 65
yerelleştirme 328
parent özelliği 65
yol sınırlayıcı (dosya sistemi) 106
parentSandboxBridge özelliği 30, 217, 238
yollar (dosya ve dizin) 108
print() yöntemi 211
yollar, göreceli 109
runtime özelliği 28, 33, 65, 209, 216, 229
WindowedApplication sınıfı 56
Ž
zaman damgaları 309
windows 56
zengin internet uygulamaları (RIA'lar) 6
Windows kayıt defteri ayarları 26
ZIP dosyası formatı 153
write() yöntemi (Document nesnesi) 215,
228
ZLIB sıkıştırma 151
Window sınıfı 56
writeBytes() yöntemi (ByteArray sınıfı) 148
writeFloat() yöntemi (ByteArray sınıfı) 148
writeInt() yöntemi (ByteArray sınıfı) 148
writeln() yöntemi (Document nesnesi) 215,
228

Benzer belgeler

Yardım PDF`sini İndir

Yardım PDF`sini İndir şekilde veya herhangi bir yöntemle aktarılamaz. Bu kılavuz son kullanıcı lisans sözleşmesi içermeyen bir yazılımla dağıtılmamış olsa bile bu kılavuzdaki içeriğin telif hakkı yasalarıyla korunduğunu...

Detaylı