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