Phan Hồng Minh - 11CNTT2 - 312023111131 Trang 43
Hình 3.4. Chức năng nhận thơng báo mới
Hình 3.5. Biểu đồ lượng người dùng thường xuyên theo thời gian
Biểu đồ này do Parse tự động sinh ra, cung cấp cho chúng ta thấy được lượng người dùng ứng dụng qua từng ngày
Phan Hồng Minh - 11CNTT2 - 312023111131 Trang 44
KẾT LUẬN
Kết quả đạt được
Trong quá trình thực tập tại khoa, em đã đạt được những kết quả như sau :
Tìm hiểu cơng nghệ mới, ngơn ngữ lập trình mới.
Áp dụng qui trình sản xuất phần mềm vào quá trình thực hiện đề tài.
Học cách làm việc theo nhóm.
Làm quen với môi trường và áp lực công việc.
Được học thêm nhiều kiến thức mới mẻ, đặc biệt là về làm ứng dụng di động iOS.
Nắm vững cấu trúc MVC của hệ điều hành iOS.
Ứng dụng được triển khai thực tế tại địa chỉ: DUEd News Apple Store.
Hạn chế
Bên cạnh những kết quả đạt được, em vẫn cịn nhiều hạn chế trong q trình thực tập
Thời gian quá ngắn nên chưa có đủ điều kiện để tìm hiểu thêm nhiều kiến thức.
Chưa quen với mơi trường làm việc nên gặp nhiều khó khăn, nhất là trễ tiến độ dự án.
Chưa vận dụng hợp lý lý thuyết vào quá trình làm việc.
Việc đưa ứng dụng vào một số lỗi nhất định và có những khó khăn nhất định trong quá trình sửa lỗi.
Hướng phát triển
Ứng dụng sẽ tiếp tục được phát triển để ngày càng đáp ứng được nhu cầu của người dùng, một số chức năng sẽ được đưa vào thời gian tới như: tối ưu hoá khả năng cập nhật tin mới, cải tiến giao diện cho thiết bị iPad, thêm vào các hành động có thể thực hiện qua thông báo đẩy.
Phan Hồng Minh - 11CNTT2 - 312023111131 Trang 45
TÀI LIỆU THAM KHẢO
[1] Trang web VietNamNet. “Google: 17 triệu người Việt Nam đang dùng smartphone”<http://vietnamnet.vn/vn/cong-nghe-thong-tin-vien-
thong/136651/google--17-trieu-nguoi-vn-dang-dung-smartphone.html> (Truy cập ngày 03/01/2015).
[2] Trang web: Thế giới di động. “Muốn biết nhiều thông tin thú vị về smartphone ở Việt Nam, đừng bỏ qua bài viết này”. <https://www.thegioididong.com/tin- tuc/muon-biet-nhieu-thong-tin-thu-vi-ve-smartphone-o-v-590649> (Truy cập ngày 03/01/2015).
[3] Trang web: ScrumGuides.org. "The Scrum Guide". <
http://www.scrumguides.org/scrum-guide.html> (Truy cập ngày 20/01/2015). [4] Trang web: Apple Inc. "Local and Push Notifications".
<https://developer.apple.com/notifications/>. (Truy cập ngày 15/01/2015). [5] Trang web: Parse Inc. "Push Notification Guide - iOS".<
https://parse.com/docs/push_guide#top/iOS>. (Truy cập ngày 20/01/2015). [6] Trang web: Wikipedia Foundation Inc. "XML". <
http://vi.wikipedia.org/wiki/XML>. (Truy cập ngày 25/01/2015). [7] Trang web: Wikipedia Foundation Inc. "RSS (định dạng tập tin)". <
Phan Hồng Minh - 11CNTT2 - 312023111131 Trang 46
PHỤ LỤC
Phụ Lục A. Hướng dẫn sử dụng 1. Cài đặt
Có 3 cách để cài đặt ứng dụng trên hệ điều hành iOS.
Cách 1:
Truy cập ứng dụng App Store trên điện thoại và tìm kiếm ứng dụng với từ khố “DUEd news”.
Hình PL.1.1 Chọn App Store trên màn hình
Tải ứng dụng về bằng cách bấm vào nút “Install”.
Phan Hồng Minh - 11CNTT2 - 312023111131 Trang 47 Cách 2:
Từ trình duyệt điện thoại gõ vào link sau : http://goo.gl/YD1QbA, điện thoại sẽ tự động chuyển bạn về ứng dụng để tiến hành cài đặt.
Hình PL.1.3 Giao diện cài đặt ứng dụng
Cách 3:
Từ trình duyệt của điện thoại, truy cập vào trang chủ http://ued.vn, chọn biểu tưởng ứng dụng, điện thoại sẽ được chuyển về màn hình cài đặt.
Phan Hồng Minh - 11CNTT2 - 312023111131 Trang 48
2. Hướng dẫn sử dụng
Giao diện đầu tiên khi khởi động chương trình lần đầu tiên
Hình PL.1.5 Danh sách các chuyên mục
Ở giữa là danh sách các chuyên mục tin có trên trang web http://www.ued.vn Góc trái trên là danh mục các chức năng của chương trình, danh mục này có thể truy cập nhanh bằng 2 cách:
Cách 1: bấm vào nút danh mục ở góc trái.
Cách 2: vuốt màn hình từ mép trái ra đến giữa màn hình.
Hình PL.1.6 Danh mục chức năng chương trình
Ý nghĩa của danh mục này:
“Đọc tin”: sẽ chuyển các bạn về màn hình chọn chuyên mục để bắt đầu
đọc tin.
“Đăng ký”: sẽ chuyển các bạn về màn hình chọn những chuyên mục nào
Phan Hồng Minh - 11CNTT2 - 312023111131 Trang 49 “Cài đặt”: sẽ chuyển các bạn về màn hình cài đặt các thông số cho
chương trình như: giới hạn số tin tải về, giới hạn thời gian tin được tải về tính từ ngày hiện tại.
“Thông tin”: cung cấp cho bạn thông tin về ứng dụng như phiên bản, người lập trình, bản quyền.
2.1. Chức năng “Đọc tin”
2.1.1. Hiển thị
Sau khi chọn 1 chuyên mục để đọc tin, thông báo sau sẽ xuất hiện lần đầu, chọn “có” để bắt đầu tải tin.
Hình PL.1.7 Giao diện khi lần đầu chọn chuyên mục
Sau khi tải tin xong, danh sách sẽ tự động được hiển thị lên màn hình dưới dạng danh sách.
Hình PL.1.8 Tin được hiển thị dưới dạng danh sách
Chọn bất kỳ một tin nào để đọc tóm tắt. Để tồn bộ nội dung tin, chọn “Chi tiết”.
Phan Hồng Minh - 11CNTT2 - 312023111131 Trang 50
Hình PL.1.9 Màn hình tóm tắt và chi tiết của tin
Các tin đã đọc sẽ được dánh dấu màu xám.
Hình PL.1.10 Tin đã đọc sẽ được bơi xám
2.1.2. Chức năng “Tìm kiếm theo tiêu đề tin”
Để tìm kiếm nhanh 1, nhập tiêu đề muốn tìm vào ơ tìm kiếm chương trình sẽ tìm tin và hiển thị lại danh sách tin tìm được.
Phan Hồng Minh - 11CNTT2 - 312023111131 Trang 51
2.1.3. Các tuỳ chọn cho “Tin”
Chương trình cung cấp 4 bộ lọc cho tin tức: tất cả tin, tin đã đọc, tin chưa đọc, tin được đánh dấu, với mục đích giúp người đọc truy xuất nhanh đến những thuộc tính của tin một cách nhanh nhất.
Từ màn hình danh sách tin, chọn nút “Tuỳ chọn”.
Hình PL.1.12 Nút bấm vào chế độ lọc tin và danh mục các bộ lọc cho tin
Người dùng có thể lọc tin theo Tất cả, Chưa đọc hoặc Đã lưu (yêu thích).
2.2. Chức năng “Đăng ký chuyên mục”
Chức năng “Đăng ký chuyên mục” giúp người dùng đăng ký nhận thơng báo khi có tin mới từ 1 số chuyên mục quan tâm, điều này giúp giảm dung lượng truy cập mạng. Người dùng có thể chọn, huỷ theo dõi bằng cách bấm vào chuyên mục tương ứng.
Phan Hồng Minh - 11CNTT2 - 312023111131 Trang 52
Hình PL.1.14 Màn hình khi có thơng báo mới, số tin mới tải về được hiển thị trên icon chương trình
Chương trình sẽ tự động tải tin mới và cập nhật số tin mới lên icon của chương trình.
2.3. Chức năng “Cài đặt”
Chức năng “Cài đặt” với chức năng tiết kiệm bộ nhớ máy khi cho phép người dùng giới hạn số tin tải về hoặc giới hạn số ngày trở lại của tin được tải về. Người dùng có thể cài đặt tối đa 150 tin và 30 ngày giới hạn.
Ví dụ: số tin giới hạn là 30 tin và 30 ngày giới hạn thì chương trình tối đa sẽ tải tối đa 30 tin trong vịng 1 tháng trở lại.
Hình PL.1.15 Giao diện cài đặt 3. Các sự cố thường gặp và cách khắc phục 3. Các sự cố thường gặp và cách khắc phục
3.1. Khơng nhận được thơng báo có tin mới
Thơng báo sẽ được gởi đến điện thoại mỗi khi có tin mới được cập nhật trên trang chủ, trong q trình gởi thơng báo có thể bị sự cố mạng làm cho tin không thể
Phan Hồng Minh - 11CNTT2 - 312023111131 Trang 53
tới máy của bạn ngay lập tức, các bạn vui lịng chờ hoặc có thể tự động cập nhật tin bằng tay.
3.2. Nhận được thơng báo có tin mới nhưng khơng có tin mới
Trong trường hợp này, người dùng hãy thử mở ứng dụng thông qua thông báo đẩy để chương trình hồn tất thủ tục chạy ngầm bên dưới .
3.3. Không xem được chi tiết tin
Trong trường hợp người dùng coi chi tiết tin nhưng ứng dụng chỉ xuất hiện màn hình trắng, xin vui lịng kiểm tra kết nối mạng và thử lại một vài lần.
3.4. Các lỗi khác
Trong quá trình sử dụng nếu phát hiện các lỗi ngoài những lỗi đã nêu ra ở trên, vui lòng liên hệ với đơn vị sở hữu ứng dụng để tiến hành khắc phục.
Phan Hồng Minh - 11CNTT2 - 312023111131 Trang 54
Phụ Lục B. Mã nguồn xử lý tệp XML - RSS Hàm xử lý khi bắt đầu 1 thẻ
- (void)parser:(NSXMLParser *)parser
didStartElement:(NSString*)elementName namespaceURI:(NSString
*)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict;{
element = elementName;
if ([elementisEqualToString:@"item"]) {
item = [[NSMutableDictionary alloc] init]; title = [[NSMutableString alloc] init]; link = [[NSMutableString alloc] init];
description = [[NSMutableString alloc] init]; image = [[NSMutableString alloc] init];
pubDate = [[NSMutableString alloc] init]; idNews = [[NSMutableString alloc] init]; count++;
}
elseif([elementisEqualToString:@"channel"]){
GlobalClass *obj=[GlobalClass getInstance];
obj.numNews = 0; }
}
Hàm xử lý khi kết thúc 1 thẻ
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName;{
GlobalClass *obj=[GlobalClassgetInstance];
if ([elementName isEqualToString:@"item"]) {
[item setObject:title forKey:@"title"]; [item setObject:link forKey:@"link"];
Phan Hồng Minh - 11CNTT2 - 312023111131 Trang 55
[item setObject:description forKey:@"description"]; [item setObject:image forKey:@"image"];
[item setObject:pubDate forKey:@"pubDate"]; [item setObject:idNews forKey:@"idNews"]; [feedsaddObject:[item copy]];
DBManager *db=[DBManager getInstance];
int category = (int)obj.category;
[title setString:[self replaceHTMLCharacter:title]];
[description setString:[self replaceHTMLCharacter:description]];
// Prepare the query string.
NSString *query = [NSString stringWithFormat:@"insert into `news`
values('%d', '%@', '%@', '%@', '%@','%d','%@', 0, 0)",idNews.intValue, title, description, link, image,category,pubDate ];
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"YYYY-MM-dd HH:mm:ss.SSS"];
NSDate *date = [dateFormat dateFromString:pubDate]; double now = [[NSDatedate] timeIntervalSince1970]; double tmp = [date timeIntervalSince1970];
double descent = (now - tmp)/86400;
// Execute the query.
if(obj.numNews< obj.numberNewsLimit&& (int)descent <=
obj.dateLimit){
obj.numNews = obj.numNews + 1;
if([db executeQuery:query]){
NSString *key = [NSStringstring WithFormat:@"category%d",
category];
NSUserDefaults *userDefaults = [NSUserDefaults
standardUserDefaults];
NSMutableArray *tmp = [userDefaults objectForKey:key];
Phan Hồng Minh - 11CNTT2 - 312023111131 Trang 56 if(tmp == nil){ tmp1 = [[NSMutableArrayalloc] init]; [tmp1 addObject:[NSNumbernumberWithInt:[idNewsintValue]]]; }else{ tmp1 = [[NSMutableArrayalloc] initWithArray:tmp]; [tmp1 addObject:[NSNumbernumberWithInt:[idNewsintValue]]]; }
[userDefaults setObject:tmp1 forKey:key]; [userDefaults synchronize];
obj.numNewsDownloaded = [tmp1 count]; }
} }
elseif ([elementName isEqualToString:@"channel"]){
[[NSNotificationCenter defaultCenter]
postNotificationName:@"reloadData"object:self];
DBManager *db=[DBManagergetInstance];
NSString *query = [NSStringstringWithFormat:@"update `category` set
`numlastupdate` = %d WHERE id = %d",(int)obj.numNews,(int)obj.category ];
[db executeQuery:query];
NSDate *date = [NSDatedate];
NSDateFormatter *dateFormat = [[NSDateFormatteralloc]init];
[dateFormat setDateFormat:@" dd/MM/yyyy hh:mm:ss"]; [[NSUserDefaultsstandardUserDefaults] setObject:[dateFormat
stringFromDate:date] forKey:[NSStringstringWithFormat:@"lastupdate-
%d",(int)obj.category]];
} }
Phan Hồng Minh - 11CNTT2 - 312023111131 Trang 57
Hàm xử lý để lấy nội dung bên trong 1 thẻ
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string; { if ([elementisEqualToString:@"title"]) { [titleappendString:string]; } elseif ([elementisEqualToString:@"link"]) { [linkappendString:string]; }elseif ([elementisEqualToString:@"description"]){ [descriptionappendString:string]; }elseif ([elementisEqualToString:@"thumb"]){ [imageappendString:string]; }elseif ([elementisEqualToString:@"pubDate"]){ [pubDateappendString:string]; }elseif ([elementisEqualToString:@"id"]){ [idNewsappendString:string]; } }
Phan Hồng Minh - 11CNTT2 - 312023111131 Trang 58
Phụ Lục C. Mã nguồn đăng ký chuyên mục với Parse
-(void)application:(UIApplication *)application
didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken{ [PFPushstoreDeviceToken:deviceToken];
NSString *query = [NSStringstringWithFormat:@"select `id`,`subcribe`
FROM `category`"];
DBManager *db =[DBManagergetInstance];
NSArray *arrtmp = [[NSArrayalloc] initWithArray:[db
loadDataFromDB:query]];
for (id i in arrtmp) {
NSString *str = [NSStringstringWithFormat:@"channel-%d",[[i
objectAtIndex:0] intValue]];
if([[i objectAtIndex:1] intValue] == 1){
[PFPushsubscribeToChannelInBackground:str ]; }else{ [PFPushunsubscribeFromChannelInBackground:str ]; } } }