Saturday, November 26, 2016

So sánh những framework hỗ trợ viết ứng dụng trên SmartPhone

Khi lập trình trên SmartPhone bạn không nhất thiết phải học những ngôn ngữ đặc thù trên từng loại hệ điều hành thì mới có thể lập trình được. Ví dụ như muốn lập trình trên iOS thì phải học ngôn ngữ Objective-C hay Swift, muốn lập trình được trên Android thì học ngôn ngữ Java, muốn lập trình trên WinPhone thì học ngôn ngữ C#.


Hiện nay có rất nhiều những framework giúp đỡ cho các bạn rất nhiều khi các bạn muốn viết trên nhiều nền tảng smartphone bằng ngôn ngữ mà bạn yêu thích. Theo mình thấy thì hiện nay có 3 loại như: Native App, Hybrid Mobile App, Native Cross-Platform App.

[Behavioral Pattern] Observer pattern trong Objective-C

Dạo này mình bận công chuyện nên không có thời gian viết blog. Hôm nay rảnh mình sẽ viết tiếp bài  Observer Pattern trong loại bài Design Pattern mà mình đã viết trước đây. Rất mong sự ủng hộ của các bạn để mình có động lực viết loại bài về chủ đề Design Pattern.

Trong những loại Design Pattern mà các bạn làm trên iOS chắc chắn đây là loại pattern bạn dùng nhiều nhất. Nó rất hữu ích cho việc xử lý bất đồng bộ khi bạn gọi những request lên server, bạn không cần phải chờ mỗi khi gói tin được gởi từ server về. Và pattern này cũng là pattern chủ đạo trong khái niệm lập trình cấu trúc MVC và Reactive Programming.

Khái niệm: Là loại pattern chỉ sự phụ thuộc và hành vi giữa đối tượng cha và đối tượng con. Nếu đối tượng cha đăng ký observer pattern này với đối tượng con, thì khi đối tượng con xử lý những hành vi nào đó sẽ thông báo cho đối tượng cha ứng với id của observer đó, biết để xử lý tiếp công việc đó.

Cấu trúc lớp:
Sơ đồ UML Class Diagram của Observer Pattern

Saturday, September 17, 2016

Phương Pháp Động Não giúp ích tìm kiếm những ý tưởng và giải pháp hay


Thật tình cờ mình đọc được cuốn sách "Bạn thật sự có tài" bản dịch từ cuốn "inGenius" của tác giả Tina Seelig, trong thư viện sách của công ty. Trước giờ mình rất ít khi đọc sách nhưng mình đọc cuốn sách này mình thấy bà này viết rất hay và cô đọng. Và sau đây là lời giới thiệu của cuốn sách này:
"Khả năng sáng tạo không phải một loại tài năng thiên bẩm chỉ dành cho một số người đặc biệt, nó là một kỹ năng bất cứ ai cũng có thể học hỏi. Dựa trên nền tảng đó, tác giả - một chuyên gia huấn luyện và cũng là một giáo sư của Đại học Stanford sẽ giúp độc giả hiểu đúng hơn về sự sáng tạo. Cùng với việc làm rõ bản chất của sáng tạo, bà còn cung cấp cho độc giả nhiều ví dụ cực kỳ thú vị về những ý tưởng đột phát ở khắp mọi nơi, trong đó có những công ty nổi tiếng như Google, Pixar, Facebook, IDEO… Ngoài ra, dựa trên rất nhiều bài tập và tình huống thực tế thú vị trong quá trình bà làm việc ở Stanford, Tina Seelig đã giới thiệu với chúng ta trong cuốn sách này nhiều công cụ và phương pháp để nâng cao khả năng sáng tạo."

Trong cuốn sách này, tác giả nói rất nhiều phương pháp và ví dụ để nâng cao khả năng sáng tạo của bản thân, của nhóm, tổ chức, cộng đồng nơi bạn đang tham gia. Các bạn có thể đọc chi tiết hơn khi mua và đọc những nội dung trong cuốn sách đó. Ở đây mình xin ghi chú lại mô hình Thiên hướng cách tânPhương pháp động não.

Saturday, August 27, 2016

Hướng dẫn viết ứng dụng ChatBot trên Facebook Messenger bằng node.js (Phần 2)

Trong phần 1 mình có giới thiệu sơ các bạn các bước để viết ứng dụng ChatBot trên Cloud9. Cloud 9 rất tiện khi bạn viết code trên đó giữa nhiều người có thể cùng sửa trên cùng 1 file mà không bị vấn đề gì, nhưng hiện tại mình sử dụng tài khoản free nên gặp vấn đề là khi chạy 1 thời gian thì cloud đó bị sleep và ứng dụng mình đang start bị treo và xài không được nữa, vì thế mỗi lần như vậy phải start lại. Do đó cloud9 chỉ giúp các bạn khi đang phát triển ứng và chạy thử code để test trong thời gian ngắn thôi.

Hôm nay mình hướng dẫn các bạn tự start server ở localhost và dùng ngrok để public server localhost ra bên ngoài.

ngrok là gì?

ngrok là một reserse proxy nó cho phép tạo một secure tunnel từ một public endpoint đến web service đang chạy ở local. Cơ chế của nó rất đơn giản khi bạn start ngrok lên sẽ cung cấp cho bạn 2 url: http và https. Khi bạn truy suất theo những url đó thì nó sẽ chuyển đến webserver mà bạn đang start ở local theo đúng port mà bạn đã start web server và ngrok. Hình minh họa ở bên dưới:

Monday, August 8, 2016

Hướng dẫn viết ứng dụng ChatBot trên Facebook Messenger bằng node.js (Phần 1)

Hiện tại Facebook đang và đã tách riêng ứng dụng Messenger trên Facebook thành 1 platform riêng biệt, để viết thêm những tính năng mới cho Messenger này được phong phú hơn nữa. 1 chức năng mà Facebook cũng như các công ty làm về ứng dụng Chat đang quan tâm và làm đó là chức năng Chat Bot. Chat Bot là một chức năng có thể tự động trả lời lại cho người dùng khi bạn chat với con Bot đó, nói tóm lại nó là một máy tự động trả lời lại.

Mình dự định sẽ có 2 bài viết về chủ đề này. Phần 1 là mình hướng dẫn căn bản các bạn các bước để thiết lập kết nối với Facebook Messenger bằng Node.js.  Phần 2 là mình sẽ hướng dẫn các bạn sử dụng công cụ AI mà Facebook đang phát triển để biến con Bot có khả năng phân tích từ bạn nói với con Bot và trả lời lại cho bạn.

Thursday, July 7, 2016

Giới thiệu công cụ FLEX để debug mọi thông tin ngay trên simulator hoặc thiết bị iOS

Chào các bạn hôm nay mình xin giới thiệu đến các bạn 1 tool dùng để debug mọi thông tin như cấu trúc, vị trí, thuộc tính của những đối tượng trong 1 màn hình, có thể xem system logs, network, caches, file browser... trực tiếp ngay trên simulator / thiết bị iOS, mà không cần dùng XCode. Khi bạn thiết lập tool này, bạn có thể biết được mọi hành vi mà người lập trình đang làm trên ứng dụng này mà không cần phải coi code.

Công cụ này có tên là FLEX ( là từ viết tắt của Flipboard Explorer). Công cụ này rất dễ cài đặt và sử dụng, bạn chỉ nên sử dụng tool này cho chế độ Debug thôi. Mình sẽ giới thiệu sơ qua những chức năng chính của tool này như sau:

1. Có thể thay đổi vị trí của đối tượng:

Hình bên dưới đây minh họa cách công cụ này có thể tương tác những đối tượng trên màn hình như chọn và thay đổi vị trí của đối tượng trên màn hình. Bạn bạn chạy simulator thì nhấn phím "f" để mở thanh công cụ hoặc có thể tạo 1 button là "FLEX" để hiển thị thanh công cụ lên (code hiển thị sẽ đề cập bên dưới) và thao tác như sau:

Saturday, June 25, 2016

Viết Auto Layout bằng code và cách viết UnitTest để kiểm tra giao diện - Phần 3

Trước đây mình có 2 bài viết hướng dẫn cách dùng Auto Layout và Size Class bằng cách thiết lập trên storyboard hay file xib. Nếu các bạn chưa xem có thể xem qua AutoLayout và Size Class Phần 1, Phần 2.

Nếu các bạn làm project từ iOS 9 trở lên thì nên dùng UIStackView để thiết kế giao diện cho dễ, ngược lại từ iOS 8.4 trở xuống thì bạn phải dùng view và những constraint để giả như StackView, để có thể thiết kế giao diện 1 cách đơn giản nhất, vì khi trên 1 màn hình có nhiều thành phần nhỏ nếu bạn liên kết theo từng nhóm trong view thì dễ quản lý hơn. Hoặc bạn có thể dùng thư viện OAStackView, ý tưởng viết thư viện này từ UIStackView.

Viết giao diện nếu bạn muốn trực quan thì nên dùng storyboard hay xib, nhưng nhiều khi có những trường hợp bạn cần viết giao diện bằng code. Nếu bạn nắm được cách viết giao diện bằng code bạn có thể hiểu sâu hơn những vấn đề khi làm giao diện.

Khi làm autolayout trên iOS bằng constraint, có những khái niệm bạn cần phải hiểu như:

* Pin, Align và Ratio:

- Pin: bạn gắn 1 đối tượng giao diện (view, label, button...) vào 1 vị trí cố định nào đó (ví dụ như góc trên bên trái, góc trên bên phải, hay canh giữa...). Cố định chiều cao và chiều rộng với con số mong muốn.
- Align: bạn canh chỉnh từ 2 đối tượng trở lên, đối tượng này sẽ canh chỉnh theo đối tượng kia bằng những thuộc tính như trái, phải, trên, dưới, canh giữa, hay baseline.
- Ratio:  tỷ lệ chiều cao và chiều rộng của 1 đối tượng, nếu bạn muốn tỷ lệ giữ đối tượng này và đối tượng kia thì dùng chức năng Equal Widths/Heights.
  + Nếu bạn dùng storyboard thì sau khi thiết lập chiều rộng và chiều cao mong muốn rồi thì chọn thêm chức năng Aspect Ratio trong phần Pin để đối tượng đó luôn giữ đúng tỷ lệ đó, như hình bên dưới:

  + Equal Heights/Widths: mặc định là chiều cao/chiều rộng của đối tượng này bằng với chiều cao/chiều rộng của đối tượng kia, vì giá trị multiplier là 1. Bạn có thể dùng chức năng này để thiết lập tỷ lệ của đối tượng này với đối tượng khác bằng cách chỉnh giá trị của thuộc tính multiplier trong NSLayoutConstraint hay NSLayoutAnchor.

* Constraint:


Saturday, May 28, 2016

Hướng dẫn sử dụng thư viện OpenCV 3 trên iOS

Bài trước mình có hướng dẫn cách chạy code ví dụ mẫu C++ trên MacOS các bạn muốn xem có thể nhấn link này.

Các bạn có thể tải tài liệu về OpenCV tại đây.

Bài này mình hướng dẫn các bạn các bước để tạo 1 project iOS với thư viện OpenCV 3.

GaussianBlur

Thursday, May 26, 2016

Hướng dẫn cài đặt OpenCV trên MacOS và chạy ví dụ mẫu bằng terminal và XCode

OpenCV (Open Source Computer Vision) là thư viện mã nguồn mở chuyên xử lý, phân tích những hình ảnh từ photo và camera như nhận diện khuôn mặt, chữ số, hình học... OpenCV được phát hành dưới mã nguồn BSD license, do đó được sử dụng miễn phí trong việc nghiên cứu cũng như thương mại. Nó có những interface cho ngôn ngữ C++, C, Python và Java, do đó nó có thể chạy trên đa nền tảng như Windows, Linux, Mac OS, iOS và Android. Chi tiết các bạn có thể xem thêm trên trang của OpenCV.

Tài liệu hướng dẫn chi tiết những chức năng trong OpenCV các bạn có thể xem qua tại đây. Khi xem những hướng dẫn này các bạn cần phải chạy những đoạn code ví dụ mẫu của người ta viết để có thể hiểu rõ cách người ta thực thi công thức toán học đó thông qua code như thế nào và kết quả khi chạy ra sao thì các bạn phải build và run chương trình.

Bài này mình hướng dẫn các bạn cài thư viện OpenCV 3.1.0, build và chạy thử code ví dụ mẫu C++ từ Github OpenCV bằng terminal và XCode. Vì mình thấy trên mạng có hướng dẫn cài bản 3.0.0, nhưng mình cài thử máy tính cá nhân của mình thì gặp sự cố với ffmpeg, nếu các bạn cài bản này, nếu gặp lỗi như vậy có thể đọc tài liệu này để fix problem khi cài đặt OpenCV 3.0.0.

Friday, May 13, 2016

[Swift] Hướng dẫn kết nối server Perfect với MongoDB

Như bài ví dụ trước mình có hướng dẫn cách thiết lập căn bản để các bạn có thể viết 1 webservice đơn giản và kết nối với cơ sở dữ liệu là database bằng ngôn ngữ Swift. Các bạn có thể xem qua tại đây.

Bài này mình xin hướng dẫn các bạn thiết lập server hiện tại cho chạy với database MongoDB.

MongoDB là gì?

MongoDB là một cơ sở dữ liệu (database) theo dạng tài liệu (document), mã nguồn mở (open source), miễn phí, chạy trên nhiều nền tảng (cross-platform). Được phân loại như là NoSQL database.

MongoDB không sử dụng cấu trúc cơ sở dữ liệu quan hệ dựa theo dạng bảng (table) như truyền thống, mà dùng cơ chế lưu theo dạng document (JSON) với scheme động (MongoDB gọi đó là định dạng BSON) làm cho việc tích hợp các dữ liệu trong một số loại ứng dụng dễ dàng hơn và nhanh hơn.

Còn chần chờ gì nữa các bạn không thử xài MongoDB để cảm nhận công nghệ NoSql là như thế nào ^^.

Thursday, April 28, 2016

[Swift] Thiết lập thư viện Perfect để viết cho server-side

Perfect là gì ?

Perfect là một web-server và toolkit cho phép các nhà phát triển sử dụng ngôn ngữ lập trình Swift để xây dựng những ứng dụng và những REST service. Nó cho phép những developer có thể phát triển ứng dụng cả client-side và server-side trong cùng 1 workspace, cùng 1 ngôn ngữ lập trình Swift. Nó là một bộ khung hoàn hảo cho những kỹ thuật cloud và mobile.




Tại sao lại sử dụng Perfect?

- Hiện tại Swift đã được Open Source vì thế nó sẽ còn phát triển nhanh và mạnh, do đó Swift là ngôn ngữ của tương lai. Nếu bạn học và nắm bắt cơ hội này chắc bạn sẽ có nhiều cơ hội phát triển sự nghiệp của mình trong tương lai hơn nữa.

- Đa số những dân lập trình trên iOS chỉ biết về Objective-C hay Swift hoặc cả 2, vì thế nếu bạn muốn viết cho server-side thì bạn phải học thêm ngôn ngữ PHP hoặc Java để có thể viết cho server-side. Nếu bạn dùng thư viện Perfect thì bạn khỏi cần quan tâm đến việc học thêm ngôn ngữ khác cho công việc đó, bạn có thể dễ dàng debug cả bên client lẫn server đều được.

- Hiện tại Perfect cũng đang trong giai đoạn phát triển và đã có 1 phiên bản release là Perfect version 1.0. Code của thư viện Perfect cũng được open source trên GitHub, nếu các bạn muốn học thêm cách người ta viết library đó như thế nào thì cũng có thể tải về và đọc code.

- Swift và Perfect có thể chạy trên nền tảng Linux vì thế các bạn có thể viết để deploy trên Linux server. Hiện tại trên mạng cũng có nhiều hướng dẫn về việc này.

Làm thế nào thiết lập thư viện Perfect trên XCode?

Hiện tại mình chưa thấy đường link trên cocoapods cho thư viện này, vì thế cách mình hướng dẫn chỉ tải và dùng trên phiên bản release 1.0 như ở trên. Mình đang dùng OS X 10.11 và XCode 7.3 (7D175). Trên GitHub của Perfect nói phải như vậy mới build được thư viện của họ. Nên nếu ai đang xài phiên bản cũ hơn hãy update lên rồi mới chạy được nha.

Demo này mình viết 1 ứng dụng trên iOS truy suất REST api, có trả về dữ liệu là 1 chuỗi HelloWorld theo dạng GET và POST:

Wednesday, April 20, 2016

(Kinh nghiệm) Cách xử lý Exception trong Objective-C có Demo

Có nhiều người hỏi mình có nên sử dụng try/catch để xử lý exception khi lập trình trên iOS không? Theo kinh nghiệm mình làm trên Objective-C được 5 năm, thì mình xin trả lời là có thể có hoặc không có cũng được, miễn sao bạn bắt được hết những trường hợp exception đó bằng câu lệnh if, để có thể không xảy ra tình trạng crash ứng dụng và chạy theo đúng yêu cầu của khách hàng là được.


Tuesday, April 12, 2016

Phân biệt biến kiểu Property, Public, Protected, Private trong ngôn ngữ Objective C

- Theo kinh nghiệm làm việc của mình với các bạn trong nhóm khi lập trình Objective-C và cũng đọc qua code của những project cũ. Ít khi nào mọi người để ý và khai báo đúng với ý đồ của từng đối tượng, và vi phạm quy tắc tính đóng gói, tính bảo mật thông tin của đối tượng trong lập trình hướng đối tượng (Tham khảo lý thuyết Lập trình hướng đối tượng tại trang Wiki).

- Theo ngôn ngữ lập trình Java, người ta khuyến khích mỗi khi dùng biến kiểu public thì nên đặt 1 biến private và hỗ trợ những hàm getter/setter để truy suất biến private đó.
    + Nguyên nhân họ nói là đảm bảo tính đóng gói, và nếu sau này có thay đổi gì trên biến đó bạn có thể sửa được dễ dàng, chi tiết về vấn đề này ở đây.
    + Nói tóm tại thì nguyên nhân chính là có thể kiểm soát được truy xuất đến giá trị của 1 đối tượng từ bên ngoài, có thể dễ dàng mở rộng code bằng cách override lại những hàm getter/setter.

- Các bạn có thể áp dụng nguyên tắc đó từ bên Java qua ngôn ngữ lập trình Objective-C cũng được. Nhưng nên nhớ khi khai báo biến kiểu property system ObjC tự động sinh những hàm getter/setter và quản lý dùm bạn. Nếu bạn cần thêm những việc xử lý nào khác thì override lại phương thức getter/setter của property đó.

- Nếu cái gì public đều dùng property hay phương thức getter/setter hết thì những ngôn ngữ lập trình hướng đối tượng nên bỏ từ khoá public luôn đi cho rồi.

- Hiện tại mình vẫn chưa tìm ra tài liệu chính thống từ Apple nói nên dùng hay không nên dùng biến property cho biến public hay không. Vì thế chúng ta sẽ không bàn về vấn đề đó đúng hay sai. Tuỳ theo trường hợp mình áp dụng là được, hiện tại mình có những trường hợp như sau:
    + Các bạn mới học lập trình thì mình khuyên nên dùng property để khai báo biến public, để tránh những rủi ro mà bạn không lường trước được.
    + Dùng property để khai báo biến public để có 1 coding standard cho team và đảm bảo tính đóng gói trong lập trình hướng đối tượng.
    + Khi bạn cần tối ưu hoá code thì nên lưu ý vấn đề truy suất trực tiếp thông qua @public này, có thể giúp bạn được phần nào tốc độ xử lý.

- Vì thế mình viết bài này để phân tích khi nào thì cần dùng biến theo Property hay iVar (Public, Protected, Private) để các bạn tham khảo khi viết trên ngôn ngữ Objective-C (Swift mình sẽ nghiên cứu và phân tích sâu về nó sau). Các bạn có kiến thức tốt lập trình hướng đối tượng khi viết bằng các ngôn ngữ khác như Java, PHP,... có thể chuyển code đó qua Objective-C uyển chuyển và ngắn gọn. Thực chất ra cách khai báo những biến như vậy cũng rất giống những ngôn ngữ lập trình khác nhưng ít khi nào dân lập trình trên iOS bằng Objective-C dùng.

- Nếu bạn có 1 khách hàng khó và họ định nghĩa sẵn hệ thống của họ theo từng sơ đồ như class diagram đàng hoàng. Họ bắt bạn phải viết code theo đúng như thiết kế của họ thì chắc chắn bạn phải làm theo. Hiện tại mình thấy đa số dân lập trình toàn viết code làm sao chạy được, còn tính đúng đắn hay thiết kế như thế nào cho hợp lý thì thường bỏ qua. Thành ra code dư thừa rất nhiều và khó bảo trì sau này.

- Giả sử mình có 1 lớp tên là PCObject được định nghĩa như sau:

Monday, April 11, 2016

95% người dân không biết ý nghĩa của các con số dưới đáy chai, hộp nhựa

Ở phía dưới đáy chai hay hộp thường có hình tam giác với mũi tên và một con số nằm giữa. Có lẽ ít ai để ý đến ký hiệu vô cùng quan trọng này.

Một số gia đình và cửa hàng thực phẩm thấy sử dụng lại chai, hộp nhựa để đựng nước, dầu ăn, dấm... Nhiều người cho rằng, các chai, hộp nhựa này sau khi đã được rửa sạch thì an toàn mà không biết rằng độc tính vẫn có thể phát tác trong quá trình sử dụng.
Gần đây, câu chuyện về cô bé 12 tuổi sống tại Tiểu vương quốc Ả Rập Thống nhất liên tiếp dùng một chai nước khoáng để đựng nước uống và mắc bệnh ung thư, đang trở thành chủ đề nóng trên nhiều diễn đàn.
Nguyên nhân chính là do chai nước chứa chất liệu gây độc hại khi sử dụng quá nhiều lần và gây bệnh ung thư. Chai nước khoáng thông thường hoặc chai soda khi đến nhiệt độ 70 độ C sẽ dễ bị biến dạng và giải phóng ra các độc chất.
Phía dưới đáy chai nước, hộp đựng thuốc hay thức ăn thường có ký hiệu hình tam giác với các mũi tên. Ở giữa hình tam giác là một con số cụ thể.
Chẳng hạn, bình nước uống của học sinh hay có số 7; chai nước tinh khiết, chai sữa hoặc nước ép trái cây thường có số 1; các chai dầu ăn, các lọ mỹ phẩm hay có số 2; còn các hộp mỳ ăn liền bằng nhựa có số 5 dưới đáy...
Thế nhưng, ít ai quan tâm hay tìm hiểu đến ý nghĩa của hình tam giác và những con số này.
Số 1 có nghĩa là PET (nhựa polyethylene terephthalate). Các chai nhựa đựng đồ uống khi tái sử dụng nếu đựng nước nóng quá 70 độ C không chỉ biến dạng mà còn phân giải ra các chất có hại cho sức khỏe.
Các nhà khoa học cũng phát hiện ra rằng, chế phẩm nhựa này nếu sử dụng quá 10 tháng có thể sinh ra các chất gây ung thư.


Ký hiệu số trong hình tam giác dưới đáy chai nước khoáng

(iBeacon)Công nghệ iBeacon là gì?

iBeacon là nhãn hiệu hàng hoá của Apple cho một hệ thống định vị trong nhà, mà Apple gọi là "thế hệ mới của bộ phát chi phí thấp thấp được hỗ trợ có thể thông báo cho thiết bị iOS v7 về sự hiện diện của nó".Chúng cũng có thể được sử dụng bởi hệ điều hành Android. Công nghệ này cho phép một thiết bị iOS hoặc phần cứng khác để gửi các thông báo đẩy cho các thiết bị iOS gần đó.



Tuesday, April 5, 2016

[Certificates] Hướng dẫn cách tạo và quản lý certificate key khi lập trình trên iOS

Giới thiệu:

Apple bắt buộc những nhà phát triển ứng dụng trên iOS, mỗi khi chạy ứng dụng trên thiết bị để debug, export ra file cài đặt (.ipa), hoặc đưa ứng dụng lên App Store đều phải có tài khoản developer của Apple.
Đây là sơ đồ quy trình từ lúc bạn mua tài khoản đến khi bạn release ứng dụng đó trên AppStore:
Trong bài này mình chỉ mô tả về những key của Apple cần thiết để bạn có thể cài ứng dụng lên trên device trong giai đoạn phát triển ứng dụng (Develop). Và sử dụng key theo dạng cá nhân trên nhiều máy tính trong cùng team.
Bạn có thể xem thêm chi tiết phần Distribute tại trang của Apple.

Thursday, March 31, 2016

Hướng dẫn thiết lập Google Tag Manager với Google Analytic trên ứng dụng iOS

Google Tag Manager là gì?

Google Tag Manager (GTM) là bên trung gian giữa những ứng dụng của Google như: Google Analytics, Google AdWords, DoubleClick... Chỉ một vài động tác thiết lập bạn có thể liên kết những tài khoản đó lại với GTM. Sau khi bạn đã liên kết những tài khoản đó lại, mỗi khi ứng dụng của bạn gởi request lên GTM, GTM sẽ tự động gửi dữ liệu đó đến những dịch vụ tương ứng (Ví dụ như: Google Analytics để phân tích hành vi người dùng).
GTM cho phép bạn thay đổi những thiết lập đó tại bất kỳ thời điểm nào chỉ với vài động tác nhấn chuột mà không cần phải build lại ứng dụng. Vì thế bạn không phải sợ bỏ lỡ công việc đo lường  hoặc việc kinh doanh của mình.

Ưu điểm:
- Bạn có thể gởi 1 request lên GTM để GTM tự động gởi những thông tin đó đến những service khác như Google Analytics, Google AdWords, DoubleClick...
- Bạn có thể sửa mà không sợ ảnh hưởng đến ứng dụng đang chạy.

Nhược điểm:
- Khó thiết lập được hết những chức năng của service trong GA, AdWords, DoubleClick.
- Bạn muốn thiết lập như thế nào phải hiểu service mình đang dùng như GA có những tham số gì, có những loại report nào.

Thiết lập Google Tag Manager với Google Analytics:

Trong bài hướng dẫn này mình sẽ hướng dẫn các bạn cách thiết lập đơn giản để có thể gởi dữ liệu lên Google Analytics (GA) thông qua service của Google Tag Manager.

Bước 1: Lấy thông tin ID của ứng dụng trên tài khoản Google Analytics

1. Bạn phải có ứng dụng trên Google Analytics. Nếu bạn chưa có thì bạn có thể  tạo bằng cách vào trang https://www.google.com/analytics/ .
2. Đăng nhập theo tài khoản Google và tạo 1 ứng dụng trên GA.
3. Hãy để ý mã số ID của ứng dụng (Ví dụ như: UA-12121212-1 đằng sau tên ứng dụng) đó để khai báo khi thiết lập trên GTM. Như hình sau: