Tuesday, March 19, 2013

วิธีเช็คเวอร์ชั่นล่าสุดของ App





หลายคนน่าจะเคยประสบกับปัญหา ที่เวลาเราอัพเดทแอพแล้ว User อาจจะไม่ได้อัพเดทตาม ซึ่งบางทีเราก็ต้องการให้อัพเดทเพื่อแก้ไขปัญหาบางอย่าง ที่เราได้ปรับแก้ไขเรียบร้อยแล้ว วันนี้ผมจะมาแนะนำการตรวจสอบเวอร์ชันของแอพ เพื่อให้ User ได้อัพเดททันที เมื่อแอพเรามีเวอร์ชั่นใหม่ล่าสุด
ส่วนวิธีการทำนั้นสามารถทำได้หลายวิธี ยกตัวอย่าง (ที่คิดออกตอนนี้นะ)
1. ใช้ Server ส่วนตัว แล้วให้แอพ Request ทุกครั้งก่อนใช้งาน เพื่อตรวจสอบเวอร์ชั่นล่าสุด ถ้าไม่ใช่ล่าสุด ก็ให้ขึ้น Alert เพื่ออัพเดทก่อนใช้งาน
2. ไม่ต้องมี Server ส่วนตัวให้วุ่นวาย ใช้วิธีการ Request ไปที่ iTunes แทน เพื่อดูเวอร์ชั่นล่าสุดของแอพเราที่อยู่บน App Store ถ้าไม่ใช่ล่าสุด ก็ให้ขึ้น Alert เพื่ออัพเดทก่อนใช้งาน

โดยวิธีที่ผมจะแนะนำวันนี้คือแบบที่ 2
สิ่งที่เราต้องเตรียมคือ
1.App ID ของแอพที่เราต้องการตรวจสอบ
ดูง่ายๆ จาก https://itunes.apple.com/th/app/thai-tunes-tv-free/id454349366
App ID = 454349366

2. เนื่องข้อมูลที่ใช้เราจะได้กลับมาเป็น JSON ก็ต้องใช้ Lib กันหน่อย :) ที่ผมใช้ประจำก็ SBJson

พร้อมแล้วก็สร้าง Xcode Project กันขึ้นมาเลยครับ โดยการใช้งานจะตรวจสอบทุกครั้งเมื่อเปิดแอพ ให้
เรานำ คำสั่งที่จะตรวจสอบเวอร์ชั่นไว้ใน Method นี้

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{

}


เอาจริงๆอยากทำเป็น Tutorial นะ แต่ด้วยข้อจำกัดด้านเวลา เด๋วถ้าเริ่มว่างๆหน่อย จะพยายามเขียนให้ได้นะครับ รอบบนี้เอาแบบ อธิบายยาวเลยนะ ^^'

โอเคจากนั้นเราก็ทำการตรวจสอบเวอร์ชั่นละ จาก API นี้


http://itunes.apple.com/lookup?id=AppID

ตรง AppID เราก็นำ App ID ของเราใส่ลงไป ถ้าลองนำไปวางบน Browser ก็จะมีข้อมูลออกมาเพียบ ดูแล้วงงมาก แต่ถ้าใครอยากดูข้อมูลแบบง่ายๆ ก็ลองใช้พวก JSONView ดูก็ได้ครับ

ในส่วนของโค้ด ก็จะเป็นแบบนี้

NSData * data = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:[[NSString stringWithFormat:@"http://itunes.apple.com/lookup?id=%@",Your_App_ID] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]];
    
    NSString *jsonString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
    
    if ([[[jsonString JSONValue] objectForKey:@"resultCount"] integerValue] == 1) {
        dispatch_async(dispatch_get_main_queue(), ^{
            NSLog(@"%@",[[jsonString JSONValue] objectForKey:@"results"]);
            
            NSArray *resultArray = [[jsonString JSONValue] objectForKey:@"results"];
            
            float latestVersion = [[[resultArray objectAtIndex:0] objectForKey:@"version"] floatValue];
            float appVersion = [[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"] floatValue];
            
            if (appVersion < latestVersion) {
                UIAlertView *alert = [[UIAlertView alloc] initWithTitle:[NSString stringWithFormat:@"คุณกำลังใช้ %@ เวอร์ชั่นเก่า",[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleName"]] message:@"เพื่อใช้งานคุณสมบัติใหม่ คุณจำเป็นต้องอัพเดทเวอร์ชั่นล่าสุดในตอนนี้" delegate:self cancelButtonTitle:@"ปิด" otherButtonTitles:@"อัพเดท",nil];
                [alert show];
                [alert release];
            }
        });
    }
    
    [data release];


ในส่วนแรกจะทำการ Request ไปที่ iTunes ถ้าไม่มีอะไรผิดพลาด API จะ Return ข้อมูลมาเป็น 1 จากนั้นก็ทำการเปรียบเทียบ App Version กับ iTunes Version ดู ถ้า App Version น้อยกว่า iTunes Version ก็ Alert ให้อัพเดท แต่ถ้าเท่ากันแล้วก็ผ่าน แบบนี้ครับ

ผมแนบตัวอย่าง Souce Code ไว้ด้วย ใครอยากลองดาวโหลดไปเล่นดูก็ตามสบายนะครับ อธิบายอาจจะงงๆ หน่อยนะ ไว้มีโอกาสจะมีเขียนเป็น Tutorial ดีๆ ไปละครับ :)















No comments:

Post a Comment