PDF

Tạo ứng dụng kiểm soát thời gian bằng iBeacons và dịch
vụ IBM Mobile Data
Danilo Augusto Silva (https://www.ibm.com/
developerworks/community/profiles/html/
profileView.do?key=c460b084-269c-4106-8bdcad78e6dcc407&lang=en&tabid=dWAboutMe)
Kỹ sư phần mềm
Student
17 07 2014
tiên
vào
ngày 01 04
(Xuất bản lần đầu
2015)
Pargles Dall Oglio (https://www.ibm.com/developerworks/
community/profiles/html/profileView.do?key=ba0bb01bd0a3-4869-9fa1-69d82ef37e04&lang=en&tabid=dWAboutMe)
Kỹ sư phần mềm
Student
Yuka Kyushima (https://www.ibm.com/developerworks/
community/profiles/html/profileView.do?key=662cefc8ef94-4855-a2c1-72e34ac53ef3&lang=en)
Kỹ sư phần mềm
Student
IBM Bluemix bao gồm bộ SDK mạnh mẽ để tương tác với các thiết bị di động và dịch vụ đám
mây. Bài viết này trình bày cách tạo ứng dụng đơn giản bằng Android Estimote SDK cho
iBeacons với Cloudant trên Bluemix. Bài viết bắt đầu bằng việc trình bày tổng quan các tính
năng cơ bản do Estimote Android SDK cung cấp, mô tả tích hợp ứng dụng Android đơn giản vào
dịch vụ đám mây Mobile Data (Dữ liệu di động) và trình bày cách thức đơn giản để tích hợp ứng
dụng bằng công nghệ Beacon mới với dịch vụ đám mây do Bluemix cung cấp.
Đăng ký IBM Bluemix™
Nền tảng đám mây này có sẵn dịch vụ, thời gian chạy (runtime) và cơ sở hạ tầng miễn phí,
giúp bạn nhanh chóng tạo và triển khai ứng dụng kế tiếp của bạn trên di động hoặc trên web.
Beacon là thiết bị điện tử nhỏ phát ra tín hiệu bluetooth năng lượng thấp Bluetooth Low Energy
(BLE). Bất kỳ thiết bị nào có công nghệ BLE đều có thể bắt được tín hiệu này, chẳng hạn điện thoại
thông minh và máy tính bảng. Công nghệ mới này tạo ra cuộc cách mạnh hóa cho quyết định của
các công ty về phương thức tùy chỉnh sản phẩm và dịch vụ của mình hướng đến khách hàng.
© Copyright IBM Corporation 2015
Tạo ứng dụng kiểm soát thời gian bằng iBeacons và dịch vụ IBM
Mobile Data
Nhẫn hiệu đăng ký
Trang 1 của 11
developerWorks®
ibm.com/developerWorks/vn/
Hình ảnh được cho phép bởi Estimote.
Hiện tại có một số nơi sử dụng công nghệ iBeacon. Các cửa hàng bán lẻ sử dụng công nghệ này
để cung cấp thông tin thực tế về sản phẩm, thực hiện chào giá theo địa điểm cho khách hàng, hoặc
chụp các mô hình giao thông khi khách hàng duyệt tìm thông tin qua cửa hàng.
Tạo ứng dụng kiểm soát thời gian bằng iBeacons và dịch vụ IBM
Mobile Data
Trang 2 của 11
ibm.com/developerWorks/vn/
developerWorks®
Hình ảnh được cho phép bởi Estimote.
Bài viết này mô tả cách tạo hệ thống đơn giản theo dõi thời gian và sự có mặt bằng cách sử
dụng Android SDK của Estimote, một trong các công ty phát triển các thiết bị này. Với ứng dụng
Estimote, thật dễ để mô phỏng Estimote iBeacon để kiểm tra với thiết bị iOS. Tìm hiểu cách tạo
dịch vụ Dữ liệu di động trên IBM Bluemix™ để lưu dữ liệu từ thiết bị Android và cách tạo trang web
đơn giản có thể truy xuất dữ liệu từ cơ sở dữ liệu và hiển thị nó cho người dùng.
Bluemix được sử dụng cho dự án này nhờ nó sử dụng nhiều dịch vụ có sẵn giúp lập trình viên phần
mềm dễ dàng tạo các ứng dụng web và di động.
“ Hãy tạo ứng dụng này cho chính bạn và bạn sẽ thấy thật
đơn giản để tạo ứng dụng bằng công nghệ iBeacon và tích
hợp với các dịch vụ Bluemix. ”
Những thứ bạn cần cho ứng dụng của mình
•
•
•
•
•
•
Tài khoản Bluemix
Làm quen với lập trình Android
Công cụ lập trình Android
Estimote SDK cho Android
Estimote iBeacon hoặc thiết bị iOS để mô phỏng nó
Làm quen với dịch vụ Dữ liệu di động Bluemix
Tạo ứng dụng kiểm soát thời gian bằng iBeacons và dịch vụ IBM
Mobile Data
Trang 3 của 11
developerWorks®
ibm.com/developerWorks/vn/
• Git và Node được cài đặt
Chạy ứng dụng
Lấy mã
Bước 1. Tạo ứng dụng Android cơ bản bằng iBeacon của Estimote
1. Tạo dự án ứng dụng Android trên Eclipse hoặc trên bất kỳ nền tảng khác.
2. Tải về Estimote iBeacon SDK cho Android và sao chép tập tin estimote-sdk-preview.jar trong
thư mục Android-SDK/EstimoteSDK/ vào thư mục thư viện trên Eclipse.
3. Trong tập tin MainActivity.java, nhập gói sau để sử dụng iBeacon:
import
import
import
import
import
com.estimote.sdk.Beacon;
com.estimote.sdk.BeaconManager;
com.estimote.sdk.BeaconManager.MonitoringListener;
com.estimote.sdk.Region;
com.estimote.sdk.Utils;
4. Trong cùng một lớp, tạo các biến sau:
private static final String ESTIMOTE_PROXIMITY_UUID = "YourEstimoteBeaconID";
/*You can get this ID using several free programs, such as iBeacon Locate*/
private static final Region ALL_ESTIMOTE_BEACONS = new Region("regionId",ESTIMOTE_PROXIMITY_UUID,
null, null);
protected static final String TAG = "EstimoteiBeacon";
private static final int NOTIFICATION_ID = 123;
BeaconManager beaconManager;
NotificationManager notificationManager;
public int flagRegion = 0;
Lưu ý biến ESTIMOTE_PROXIMITY_UUID phải chứa ID cụ thể của beacon cần được sử dụng cho
tác vụ này. Các beacon thực có ID B9407F30-F5F8-466E-AFF9-25556B57FE6D. Tuy nhiên, số
này có thể được đổi bằng cách sử dụng SDK của Android. Để mô phỏng iBeacons trên điện
thoại hoặc máy tính bảng của Apple, sử dụng ứng dụng Estimote.
5. Trong phương thức onCreate, tất cả biến này đều được minh họa và báo giám sát
được thiết lập cho beacon. Sau khi nhập vào vùng, chuỗi được tạo trong phương thức
setRangingListener, như được hiển thị trong cách ghi mã sau.
beaconManager.setRangingListener(new BeaconManager.RangingListener() {......});
6. Như được hiển thị trong cách ghi mã sau, chuỗi này lấy thông tin beacon trong mỗi giây. Tăng
hoặc giảm thời gian bằng cách sử dụng phương thức setBackgroundPeriod có sẵn trên API của
Estimote.
public void onBeaconsDiscovered(Region region,
final List<Beacon> beacons) {
Log.d(TAG, "Ranged beacons: " + beacons);
runOnUiThread(new Runnable() {
@Override
public void run() {
if (beacons.size() > 0) {
Beacon iBeacon1 = null;
iBeacon1 = beacons.get(0);
if(String.valueOf(Utils.
proximityFromAccuracy(Utils.
computeAccuracy(iBeacon1))) == "IMMEDIATE"
&& flagRegion == 0){
createItem();
flagRegion++;
postNotification("Welcome, " + userID);
}
Tạo ứng dụng kiểm soát thời gian bằng iBeacons và dịch vụ IBM
Mobile Data
Trang 4 của 11
ibm.com/developerWorks/vn/
developerWorks®
}
}
});
}
Với mục đích gửi thông tin lân cận vào cơ sở dữ liệu, ứng dụng kiểm tra vị trí của beacon so với vị trí
của thiết bị và kiểm tra giá trị của flagRegion. Sử dụng thông tin này, ứng dụng đảm bảo thông báo
chỉ được gửi một lần cho mỗi lần thiết bị đi vào vùng beacon.
Phương thức createItem minh họa đối tượng mới và gửi nó vào cơ sở dữ liệu. Đối tượng lưu nhận
dạng người dùng. Phương thức postNotification được sử dụng để gửi thông báo Android và có thể
được tìm thấy trong tập tin MainActivity.java.
Bởi vì bạn đang thao tác với beacon, đảm bảo ứng dụng của bạn có cấp phép Bluetooth trên thiết
bị. Thêm các cấp phép sau vào tập tin AndroidManifest.xml:
<uses-sdk
android:minSdkVersion="18"
android:targetSdkVersion="19" />
<uses-permission android:name= "android.permission.BLUETOOTH"/>
<uses-permission android:name= "android.permission.BLUETOOTH_ADMIN"/>
<uses-permission android:name= "android.permission.GET_TASKS"/>
Thêm dịch vụ để phối hợp với Estimote:
<service android:name="com.estimote.sdk.service.BeaconService"
android:exported="false"/>
Do MainActivity.java đã sẵn sàng, đã đến lúc tạo bố cục cho ứng dụng của bạn. Về ví dụ bố cục,
xem nội dung của thư mục res/layout. Trong dự án mẫu này, bố cục bao gồm:
• activity_login.xml— Cửa sỗ đăng nhập, do LoginActivity.java kiểm soát, lấy tên người dùng.
• access_control_activity.xml— Do MainActivity.java kiểm soát, trong đó diễn ra các tương
tác beacon.
Để tạo cửa sổ gỡ lỗi để kiểm tra tất cả tính năng do SDK của Estimote cung cấp, bạn có thể kiểm tra
tập tin activity_main.xml.
Tạo ứng dụng kiểm soát thời gian bằng iBeacons và dịch vụ IBM
Mobile Data
Trang 5 của 11
developerWorks®
ibm.com/developerWorks/vn/
Ảnh sau hiển thị giao diện mẫu cho thao tác chính. Nó chờ tín hiệu beacon và hiển thị các tin nhắn
dưới dạng thông báo.
Tạo ứng dụng kiểm soát thời gian bằng iBeacons và dịch vụ IBM
Mobile Data
Trang 6 của 11
ibm.com/developerWorks/vn/
developerWorks®
Bước 2. Kết nối với dịch vụ Dữ liệu di động
Để kết nối ứng dụng Android và dịch vụ Dữ liệu di động, thực hiện theo các chỉ dẫn trong bài viết
developerWorks "Tạo ứng dụng Android bằng dịch vụ đám mây Dữ liệu di động."
Để thêm các gói trong hình sau vào dự án của bạn, hãy đưa chúng vào thư mục thư viện Eclipse.
Lớp DBActivity.java và Item.java có tất cả phương thức cần thiết để kết nối với dịch vụ Dữ liệu di
động. Để sử dụng các lớp này, khai báo các đối tượng sau trong tập tin MainActivity.java.
public class MainActivity extends Activity {
private String userID = "Your Name";
List<Item> itemList;
DBActivity dbApp;
...
}
Tạo phương thức createItem(), như được hiển thị trong cách ghi mã sau. Phương thức này được
gọi khi trạng thái lân cận của beacon là IMMEDIATE.
public void createItem() {
String android_id = Secure.getString(getBaseContext().getContentResolver(), Secure.ANDROID_ID);
Item item = new Item();
item.setName(userID);
item.setUserID(android_id);
item.setCreatedAt();
item.saveInBackground();
}
Tạo ứng dụng kiểm soát thời gian bằng iBeacons và dịch vụ IBM
Mobile Data
Trang 7 của 11
developerWorks®
ibm.com/developerWorks/vn/
Cuối cùng, đưa các dòng sau vào tập tin AndroidManifest.xml.
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.USE_CREDENTIALS" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
Bước tiếp theo là tạo ứng dụng di động trên Bluemix để sử dụng dịch vụ Dữ liệu di động:
1. Từ danh mục Bluemix, nhấp Mobile Cloud > Create Application.
2. Chọn tên ứng dụng và tên host cho ứng dụng và nhấp Create. Chờ khi ứng dụng khởi động
trước khi tiến hành.
3. Nhấp vào ứng dụng mới để mở trang Tổng quan.
4. Do đã có ID ứng dụng, hãy vào dự án Eclipse và mở thư mục tài sản. Tạo tập tin mới gọi là
accesscontrol.properties. Trong tập tin này, thêm mã sau:
applicationID=<INSERT_APPLICATION_ID_HERE>
applicationSecret=<INSERT_APPLICATION_SECRET_HERE>
applicationRoute=<YOUR_ROUTE>
Giờ đây bạn có thể dễ dàng truy cập dữ liệu thông qua bảng điều khiển web dịch vụ Dữ liệu di động
trên dự án của mình trong Bluemix.
Bước 3. Truy xuất dữ liệu từ cơ sở dữ liệu và chuyển nó đến một trang
web đơn giản
Giờ đây ứng dụng Android được kết nối với dịch vụ Dữ liệu di động. Giờ thì bạn có thể kết nối dịch
vụ với ứng dụng web. Bạn sẽ cần đến Node.js SDK. Bạn sẽ sử dụng mô-đun ibmbluemix và ibmdata.
Tạo ứng dụng kiểm soát thời gian bằng iBeacons và dịch vụ IBM
Mobile Data
Trang 8 của 11
ibm.com/developerWorks/vn/
developerWorks®
Trước khi có thể sử dụng dịch vụ Dữ liệu di động, bạn cần khởi tạo thành phần ibmbluemix core
SDK và chuyển tác vào applicationId, applicationSecretvà applicationRoute.
var ibmbluemix = require('ibmbluemix');
var config = {
applicationId:"<ApplicationID>",
applicationSecret:"<ApplicationSecret>"
applicationRoute:"<ApplicationRoute>"
};
ibmbluemix.initialize(config);
Giờ thì bạn có thể sử dụng dịch vụ Dữ liệu di động trong ứng dụng Node.js.
var ibmdata = require('ibmdata'),
app.use(function(req, res, next) {
req.data = ibmdata.initializeService(req);
next();
});
Sau khi khởi tạo dịch vụ, bạn có thể thêm GET phía máy chủ, như trong mã sau để truy xuất dữ liệu
từ cơ sở dữ liệu.
//Create resource URIs for the mbaas Context Route
appContext.get('/items', function(req, res) {
// Retrieve a Query instance of type "Item" and issue
// a find() action on it to retrieve all the items
var query = req.data.Query.ofType("Item");
query.find().done(function(items) {
res.send(items);
},function(err){
res.status(500);
res.send(err);
});
});
Giờ đây bạn có thể truy cập lớp mục bằng URL localhost:3000/${appHostName}/v1/apps/
${applicationId}/items hoặc ${appRoute}/${appHostName}/v1/apps/${applicationId}/items.
Phía máy khách, bạn cần thêm GET để truy xuất dữ liệu từ đường dẫn URL trên, như theo hàm sau.
//Retrieve data from the urlItems
//urlItems : '${appHostName}/v1/apps/${applicationId}/items'
var getData = function(urlItems){
$.get(urlItems, function(items){
console.log(items);
});
}
Bạn có thể chạy mã mẫu AccessControl bằng ứng dụng được tạo trên Bluemix. (AccessControl là
ứng dụng web yêu cầu dữ liệu từ đám mây và hiển thị nó trong trình duyệt.)
1. Tải về mẫu của chúng tôi với lệnh sau:
git clone https://hub.jazz.net/git/yuka/AccessControl2
Thư mục AndroidEclipseProject là ứng dụng Android cho dự án này.
Tạo ứng dụng kiểm soát thời gian bằng iBeacons và dịch vụ IBM
Mobile Data
Trang 9 của 11
developerWorks®
ibm.com/developerWorks/vn/
2. Chỉnh sửa tập tin public/appConfig.json với ID ứng dụng, bí mật ứng dụng và tuyến ứng dụng
tương ứng của bạn (tuyến ứng dụng là URL ứng dụng đầy đủ mà bạn đã tùy chỉnh khi tạo ứng
dụng trên Bluemix).
{
"applicationId": "<INSERT_APPLICATION_ID_HERE>",
"applicationSecret": "<INSERT_APPLICATION_SECRET_HERE>",
"applicationRoute": "<INSERT_APPLICATION_ROUTE_HERE>"
}
3. Từ thư mục ứng dụng, cài đặt mô-đun nút phụ thuộc: npm install --production.
4. Từ thư mục tương tự, chạy node app.
5. Sau đó ứng dụng mẫu có thể được truy cập bằng URL cục bộ này: http://localhost:3000/.
6. Để triển khai trên Bluemix, tải về và cài đặt Cloud Foundry CLI (xem cài đặt công cụ CF).
7. Từ thư mục ứng dụng mẫu, chạy cf push ${yourAppName} để triển khai ứng dụng.
8. Giờ thì có thể kiểm tra ứng dụng mẫu bằng URL của Bluemix.
Kết luận
Bài viết này trình bày cách đơn giản để tạo ứng dụng Android bằng iBeacon SDK của Estimote. Chỉ
với vài cú nhấp chuột là có thể kết nối ứng dụng này vào dịch vụ IBM Mobile Data.
Tạo ứng dụng kiểm soát thời gian bằng iBeacons và dịch vụ IBM
Mobile Data
Trang 10 của 11
ibm.com/developerWorks/vn/
developerWorks®
Đôi nét về các tác giả
Danilo Augusto Silva
Kỹ sư phần mềm, Đại học São Paulo
Pargles Dall Oglio
Kỹ sư phần mềm
Yuka Kyushima
Kỹ sư phần mềm
© Copyright IBM Corporation 2015
(www.ibm.com/legal/copytrade.shtml)
Nhẫn hiệu đăng ký
(www.ibm.com/developerworks/vn/ibm/trademarks/)
Tạo ứng dụng kiểm soát thời gian bằng iBeacons và dịch vụ IBM
Mobile Data
Trang 11 của 11