2010-12-24

Android Dev - Writing Application/Ground Zero (2/3)


 

[จากตอนที่แล้ว]


เป็นไงคับ  ทำกันแล้วเป็นไงบ้าง  คิดว่าไม่น่าจะมีประเด็นอะไรนะคับ  ติดขัดอะไรก็โพสมากันคับ  เผื่อช่วยอะไรได้

 

[มาต่อกันดีก่า]

รอบนี้จะมาว่าด้วยเรื่องการ generate ตัว key เพื่อให้แอพ (MapView) สามารถเรียกใช้บริการ Location Service ของ Google สาเหตุที่จะมาลงรายละเอียดกันก้อเพราะตัวผมเองงมอยู่สองวันเนื่องจากความใหม่ในเรื่องพวกนี้ (พวก JAVA/Eclipse)  ท่านที่อยู่ตัวอยู่แล้วก้อสามารถข้ามไปหัวข้อต่อไปเลยคับ

 

[ว่าด้วยเรื่องการสร้าง Key เพื่อไปขอใช้บริการ Location Service]

อ้างอิง http://code.google.com/intl/th-TH/android/add-ons/google-apis/mapkey.html)

เล่าคร่าวๆนะคับ
  1. เขาคาดหวังว่า แอพเราจะมี Certificate (ใบรับรองบนโลกคอมพิวเตอร์) ผูกไว้
  2. เราเอาต้องเอา "ลายนิ้วมือ" (Fingerprint) ที่ถอด(รหัส)จากใบรับรองเพื่อไปลงทะเบียนกับกูเกิ้ล
  3. ทางกูเกิ้ลจะสร้าง "กุญแจ" มาให้ (Key ที่ผูกกับ "ลายนิ้วมือ"ที่ลงทะเบียนไว้)
  4. เอากุญแจ(ที่เราได้มา)ใส่ลงใน Code ของเรา  แอพเราจะทำการส่งกุญแจก่อนเรียกใช้งาน Location Service และสามารถโหลดภาพแผนที่กลับเข้ามาแสดงผลถ้ากุญแจถูกต้อง
  5. *หมายเหตุ* ถ้ากุญแจไม่ได้ลงทะเบียนไว้  หรือกุญแจไม่ตรงกับลายนิ้วมือบนแอพของเรา  แอพเราจะไม่ได้รับข้อมูลกลับมา 
  6. *หมายเหตุ* คำว่า "ไม่ตรง" เกิดจากการคำนวนทางคณิตศาสตร์ชั้นสูง  เหมือนเอาตัวเลขสองตัวหยอดเข้าไปในสมการ  ถ้าผลลัพธ์ก้อจะเป็นแค่ "ตรง" หรือ "ไม่ตรง" อะไรประมาณเนี้ยแล่ะ 
  7. *หมายเหตุ* ทุกๆเครื่อง(ที่ลง SDK)จะมีใบรับรองแบบ debug mode อยู่  ใบนั้นละคับคือใบที่เราจะเอาไปสร้างลายนิ้วมือเพื่อใช่ในการทำงานครั้งนี้
  8. *หมายเหตุ* ทั้งใบรับรอง  ลายนิ้วมือ  กุญแจ  จิงๆคือตัวเลขเป็นชุดๆที่ทำให้สามารถระบุที่มาที่ไปของตัว(แอพ)ของคุณได้  คือจะขาดความน่าเชื่อถือถ้าไม่มีใบนั้นๆ(คือไม่รู้หัวนอนปลายเท้า)  เหมือนเวลาลงโปรแกรมบน XP แล้วโดนเตือนว่า "ท่านกำลังลงโปรแกรมที่ไม่ทราบเจ้าของ" อ่ะคับ
 

[ขั้นตอนในการสร้างและรันโปรแกรมตัวอย่าง MapView ]
ลำดับตามนี้คับ
  1. ทำการคัดลองโค๊ตทุกอย่างให้เรียบร้อย
  2. ลอก "ลายนิ้วมือ" จากใบรับรองออกมา
  3. นำ "ลายนิ้วมือ" ไปลงทะเบียนกับกูเกิ้ล  เพื่อรับกุญแจในการเข้าใช้บริการ
  4. นำกุญแจไปใส่ใน Code ของเรา
  5. สร้าง AVD (SDCard) ที่รองรับ Google API
  6. ทำการรันโปรแกรม 
 

[แรกสุดเลย]
ให้ทำการสร้าง Project แล้วคัดลอกโค๊ตทุกอย่างให้เสร็จก่อนคับ  เพื่อรอการกรอกเลข Key ในขั้นตอนสุดท้าย

 

[ลอกลายนิ้วมือ]
ขั้นตอนการดู "ลายนิ้วมือ" จากใบรับรองที่มีบนเครื่องของเรา
  1. หาตำแหน่งของไฟล์ "keytool.exe" ที่อยู่ใน JRE6.0 บนเครื่องของเรา

    อ้างอิง  [การเตรียมเครื่องเพื่อการพัฒนาโปรแกรมบน Android (3/3) - ติดตั้ง JRE6.0... ]
    (ของผมคือ - C:\Program Files\android\jre6\bin\keytool.exe)

  2. Run ตัว DOS ขึ้นมา

    (เอ่อ – สำหรับคนรุ่นใหม่คงเรียกว่า CMD.exe กระมัง)
    [Start]->[Run]->[กรอก "cmd"]->[กด OK]

  3. (ที่ cmd) ตั้งค่า PATH ของ XP ให้ชี้ไปที่ Keytool.exe ดังนี้

    (ทำคำสั่ง "set path=%path%;c:\++ตำแหน่งDirของKeytool++;")
    (ของผมคือ - C:\Program Files\android\jre6\bin)

  4. ตรวจสอบว่า ตั้งค่า PATH ถูกต้อง

    (ทำคำสั่ง "path"  - ให้ดูว่าค่าที่เราเพิ่งใส่ต้องอยู่ที่ท้ายสุดของสิ่งที่ display ออกมา)

  5. หาตำแหน่งของไฟล์ "debug.keystore"

    (ของผมคือ C:\Documents and Settings\ยูสเซอร์เนมบนเครื่องคุณ\.android)

  6. (ที่ cmd) ทำการ change directory ไปที่ตำแหน่งของไฟล์ "debug.keystore"

    (ทำคำสั่ง "cd c:\documents and settings\ยูสเซอร์เนมบนเครื่องคุณ\.android)

  7. เอ่อ...  ขอพักเหนื่อยก่อนคับ  แต่ใกล้เสร็จแล้ว
  8. ทำการเรียก keytool.exe ขึ้นมา

    (ที่ cmd) ทำคำสั่ง  "keytool -list -keystore debug.keystore"

  9. ให้ใส่ password ว่า "android"
  10. Keytool จะแสดงค่า ลายนิ้วมือออกมาให้ดูคับ  ให้จดไว้หรือ capture หน้านั้นเก็บไว้คับ  ทุกเครื่องจะมีลายนิ้วมือไม่เหมือนกันนะคับ  เสียใจ  ห้ามเลียนแบบ

[รูป 1.0] - หน้าจอผลลัพธ์ในขั้นตอนการคัดลอก "ลายนิ้วมือ"

 

[ไปลงทะเบียนกันคับ]

(อ้างอิง - http://code.google.com/intl/th-TH/android/maps-api-signup.html)

1. ไปที่นี่คับ http://code.google.com/intl/th-TH/android/maps-api-signup.html

2. ทำการกรอกเลขลายนิ้วมือลงไป  (ระบุหน่อยคับว่า ตกลงตามเงื่อนไขที่ว่าไว้)

3. กดปุ่ม  [Generate Map API]  จะได้ผลลัพธ์หน้าตาประมาณนี้ละคับ  ให้จดค่า Key และทำการ capture หน้าจอเก็บไว้คับ

[รูป 1.0] - หน้าจอผลลัพธ์ในขั้นตอนการลงทะเบียนเพื่อขอ MapAPI

 

[เอา Key ไปใส่ใน Code]
ได้ Key แล้วให้เอาไปใส่ใน Code ของเราตรงไฟล์ Layout ใน Res คับ

ของผมคือ

[XML ใน Layout File]
<com.google.android.maps.MapView
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:apiKey="0MWZBHOMcDn3g9bxIQ0uLu-cPs1AxBoQDfGYTMw"/>

 

[ก่อนที่จะ Run ตัว MapView]
ต้องทำการสร้าง SDCard ตัวใหม่โดยระบุให้มีการใช้ API เป็น "Google API Level 4" ก่อนนะคับ  มิงั้น Eclipse จะฟ้องและไม่ยอมโหลด Emulator ให้

อ้างอิง: การเตรียมเครื่องเพื่อการพัฒนาโปรแกรมบน Android (3/3) - [Activate ตัว Android Emulator]

ทำตามขั้นตอนนั้นละคับ  แต่เปลี่ยน [Target] ให้เป็น "Android 1.6 – API Level 4"
เวลารันไม่ต้องระบุอะไร  ตราบเท่าที่ Eclipse สามารถหา SDCard ที่มี API ถูกตัว

 

[ถ้าพร้อมแล้ว]
ให้ทำการรันได้เลยครับ  เครื่องต้อง online ได้นะคับ  เมื่อตัว Emulator ขึ้นมาแล้วลองเล่นดู  จะเห็นได้รำไรว่าอนาคตของมือถือ Android แล้วคับว่าจะมาแนวไหน

 

[ตอนหน้า (3/3)]
ขอโยกปุจฉาไปอยู่กับวิสัจชนาในตอนหน้ารวดเดียวเลยคับ

 

สวัสดี ปีเสือ

Solution 9420 Blog