Home › Forums › Ask the Flomies › Difference between ACR35 and FloJack
-
AuthorPosts
-
December 17, 2014 at 4:45 am #33505
What is the difference between these two readers?
https://flomio.com/shop/nfc-readers/flojack-nfc-reader/December 17, 2014 at 5:45 am #33513This is a common question we get from customers so I’ll elaborate here. The FloJack (v2) and the ACR35 are the exact same hardware. They are both manufactured by Advanced Card Systems, a company specialized in smart card readers that we’ve been partners with for several years now.
The FloJack v1 was developed internally at Flomio for a Kickstarter campaign in 2012. After dealing with issues supporting the many mobile operating systems we abandoned this project for the FloBLE (now production ready). In June of 2014 we were approached by Advanced Card Systems to carry their newest reader the ACR35. We agreed to rebrand it FloJack with the understanding that we would build out the software stack similar to what we offered with the FloJack v1. This included connect/disconnect management, audio routed alerts, NDEF parsing, read/write data blocks, authentication routines, etc. These features are crucial to allowing the reader to perform plug and play very much like an Android NFC enabled phone would.
All FloJacks sold today are v2s since we’ve discontinued support for FloJack v1s. Both v1 and v2 are functional hardware but only v2 has an battle tested driver for iOS8. Again, the FloJack v2 is just a rebranded version of the ACR35. What’s different is that it carries the Flomio private keys. These keys enable operation of the Flomio SDK and suite of apps. These haven’t been released yet, but if you’re interested in getting an early preview, you can send us your iOS device UDID and we can send them to you.
In the meantime, you can download the ACR35 drivers for iOS and Android and build your own applications. We provide limited support for the ACR35 since our focus is on FloJack development, however. More on that on this thread.
March 19, 2015 at 5:45 am #49548NFC operates in acr35 usage model?
Error used as ISO14443 type A
Please tell us how to check!
Is there a video?NFC Action => Read Tag
March 19, 2015 at 1:22 pm #49610NFC Actions app on iTunes has still not been updated for FloJack version 2. We are working on that. In the meantime, for testing you can follow these instructions. Let me know if that helps you test your reader and ISO14443 Type A tags.
June 23, 2015 at 8:29 pm #53026Richard,
Thanks for the detailed explanation of the differences between the ACR35 an the FloJack v2.
I just have one additional question. Does the FloJack v2 SDK provide a delegate method so we know when an NFC card has been presented?
I have tested a number of NFC card readers manufactured by ACS and the ACR35 is the only one I’ve seen that doesn’t provide such a delegate/callback method.
Many thanks,
UzomaJune 24, 2015 at 9:26 am #53030@Uzoma, the Flomio SDK integrates the FloJack, FloBLE, and some other products we’re working on into a single interface library. Once an event occurs such as a NFC Tag scanned or an iBeacon detected, the SDK will call a delegate like so:
#pragma mark - ReaderDelegate - (void)didFindATag:(Tag *)tag withOperationState:(ReaderStateType)operationState withError:(NSError *) { // Your code here }
this makes it very easy to build an application using the Flomio SDK as opposed to the ACS driver. Here’s the README.txt file from the latest SDK release for more details on how to set it up with your project:
Flomio Software Development Kit
================================A turn-key middleware layer for Flomio’s line of NFC, BLE, and UHF RFID readers.
Contributors: grundyoso, bpolania, jchuck627
Tags: FloJack, FloBLE, FloMat, NFC, BLE, RFID
Requires at least: iOS8.0
Tested up to: iOS8.2
Stable tag: 1.4== Description ==
Flomio builds hardware and software solutions in the proximity ID space. With a focus on mobile platforms, Flomio makes it easy to integrate our readers into Apps for iOS, Android, and WindowsPhone.
== Installation ==
1. Unzip FlomioSDK.zip
2. Open your iOS project in Xcode and select the root project file from the navigator
3. Drag and drop the whole FlomioSDK folder on your project in the navigator
4. Include the FlomioSDK header files in your ViewController and inherit delegates:#import "ReaderManager.h" #import "Reader.h" #import "NDEFMessage.h" @interface ViewController : UIViewController <ReaderManagerDelegate, ReaderDelegate> @property (nonatomic, strong) ReaderManager *readerManager; @end
5. Instantiate the Reader manager in viewDidLoad:
_readerManager = [[ReaderManager alloc] init]; _readerManager.delegate = self;
6. Add notifications to manage reader for background/foreground in viewDidLoad:
// Stop reader scan when the app becomes inactive [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(inactive) name:UIApplicationDidEnterBackgroundNotification object:nil]; // Start reader scan when the app becomes active [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(active) name:UIApplicationDidBecomeActiveNotification object:nil];
7. Create active (config) and inactive methods to catch notifications in the ViewController:
- (void)active { NSLog(@"App Activated"); [_readerManager getAvailableReader]; _readerManager.deviceEnabled = [NSNumber numberWithBool:YES]; //enable the reader _readerManager.scanPeriod = [NSNumber numberWithInteger:500]; //in ms _readerManager.scanSound = [NSNumber numberWithBool:YES]; //play scan sound _readerManager.operationState = kReadUUID; //kReadDataBlocks or kWriteDataBlocks _readerManager.startBlock = [NSNumber numberWithInteger:8]; //start reading from 4th data block _readerManager.messageToWrite = @"https://flomio.com"; // set a default message to write } // - (void)inactive { [_readerManager.reader sleep]; }
8. Add a Switch control and link it to this callback to mannually reset the Reader:
- (IBAction)resetReader:(id)sender { UISwitch *onOffSwitch = (UISwitch *) sender; if (onOffSwitch.on) { [_readerManager.reader startScan]; // wake the reader } else { [_readerManager.reader sleep]; // sleep the reader dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 1 * NSEC_PER_SEC), dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0), ^{ // Need delay before suspendScan in order to let reader respond to sleep request. [_readerManager.reader suspendScan]; }); } }
9. Create ReaderManagerDelegate to catch plug/unplug events:
#pragma mark - ReaderManagerDelegate // - (void)ReaderManager:(Reader *)reader readerAlert:(UIImageView *)imageView { if (!reader.delegate) reader.delegate = self; // Set reader delagate once it's clear reader's connected imageView.hidden = NO; imageView.alpha = 1.0f; // Then fades away after 2 seconds (the cross-fade animation will take 0.5s) [UIView animateWithDuration:0.5 delay:2.0 options:0 animations:^{ // Animate the alpha value of your imageView from 1.0 to 0.0 here imageView.alpha = 0.0f; } completion:^(BOOL finished) { // Once the animation is completed and the alpha has gone to 0.0, hide the view for good imageView.hidden = YES; }]; imageView.center = [self.view convertPoint:self.view.center fromView:self.view.superview]; [self.view addSubview:imageView]; }
10. Create ReaderDelegate to catch scan events:
#pragma mark - ReaderDelegate // - (void)didFindATag:(Tag *)tag withOperationState:(ReaderStateType)operationState withError:(NSError *)error { dispatch_async(dispatch_get_main_queue(), ^{ // Second dispatch message to log tag and restore screen if (!error) { switch (operationState) { case kReadUUID: { NSLog(@"%@",tag.data); // Log the UUID break; } case kReadDataBlocks: { NSLog(@"%@",tag.data); // Log the Data NDEFMessage *newMessage = [[NDEFMessage alloc] initWithByteBuffer:tag.data]; NSLog(@"%@",newMessage); // Log the NDEF break; } case kWriteDataBlocks: { break; } default: break; } } else { NSLog(@"%@",error.userInfo); // Log the error } }); }
11. That’s it. Now build, run, and observe scans in the console!
== Future Plans ==
Need to add management for reading of extensive data blocks. Currently limited to 16 bytes read at a time. Data throughput limitation may have an impact on user experience.== Frequently Asked Questions ==
Q: I noticed Parse libraries are included in the bundle. Why?
A: We use Parse to track the licensing and usage of the Flomio SDK. This part of the Basic license and is removed for the Pro version. Contact info@flomio.com for more details on the Pro version of the Flomio SDK.
Q: Can the SDK run in the background?
A: We don’t expect Apps to ever be able operate readers in the background. The reader requires a heartbeat handshake in order to prevent it from going into sleep mode and it’s not possible to handle from background. The active/inactive methods in the ViewController are meant to wake/sleep the reader during foregounding/backgrounding. Sometimes, however, this can get the reader out of sync. The most common way to address this is by calling the Reader reset method from a relevant state change in your app as well. For instance, when you navigate to a “Scan Now” screen or when a “Start Scanning” button is pressed.
Q: I get *** Terminating app due to uncaught exception ‘NSInvalidArgumentException’, reason: ‘*** -[NSURL initFileURLWithPath:]: nil string parameter’ when running my app. What’s the problem?
A: You seem to have only partially imported the FlomioSDK. There are needed resources in the SDK package that will not allow the it to run otherwise. These include, but limmited to, ScanSound.caf, FloJackConnected150x150.png, and FloJackDisconnected150x150.png. Check to make sure those resources are in your project and added to your Build Bundle (look in Target->Build Phases->Copy Bundle Resources).== Changelog ==
= 1.4 =
* Added missing Parse libraries and support frameworks
* Removed i386 libraries as I couldn’t archive all Parse supporting libraries (no i386 support)
* Cleaned up the README.md to clean up some bugs introduced in last version.
= 1.3 =
* Adds instructions to properly suspend and reset the Reader from within your App.
* Inlcudes i386 and ARM libraries in the SDK bundle in order to support building for emulator.
* Note: FloJack operations won’t function in the emulator.
= 1.2 =
* Fixes several bugs, most notably the issue of the app crashing after backgrounding.
* Moves all the error codes into the library and issues a standard NSError object.
* Adds device ID check for SDK licensing.
* Adds NTAG203 support to the NDEF parser.
* Some minor refactoring of the SDK APIs to make more understandable.
= 1.1 =
* Added tag type filtering
* Added Start Block configuration to Read operation state.
= 1.0 =
* Created README.md to explain how to install and build the Flomio SDK
* Cleaned up code, bundled the headers and archived source into library
* Support for NDEF messages and records.
* Adds scanPeriod support to the SDK app.
= 0.5 =
* Adds start block and block count to getNfcData method.
* Adds code to init settings from ViewController
* Adds default scan sound. Fixes Ultralight read data blocks bug.
= 0.2 =
* Support for Mifare Ultralight along with Mifare Mini, Topaz, and Felica
* Updates to add read and write capability through hard coded strings.
* SDK test app includes Settings screen with all configuration entries: scanPeriod, scanSound, readUUID, readDataBlocks, and writeDataBlocks.
= 0.1 =
* Support for Mifare Classic uuid, authenticate, and read data blocks.
* SDK and test app to work with FloJack reader. audio routing, visual notifications, and UUID read all functional== Screenshots ==
June 24, 2015 at 11:27 am #53039@Richard,
Thanks for the detailed response. I will download the Android and iOS SDKs and test it once I receive the FloJack.
Or are there any special licenses I must acquire before doing so?
July 18, 2015 at 3:52 pm #53193Hey Richard,
I have recently received the FloJack but I would like to know what’s this business with
FloJack Plug-n-Play?I haven’t visited the site in the while, and I can’t find anything on this topic.
What applications can I use the FloJack with? Do I need to develop an app for it specifically or is there something that I can download and use?
Where’s the instruction manual for the FloJack? I only received the device itself.
Thanks.
July 22, 2015 at 3:20 am #53208Hello Richard,
where can i download the FlomioSDK. The projects on GitHub are very old and the only working project ist the SDK of ACS.
I hope you really have a working FlomioSDK.
Thanks.
August 6, 2015 at 7:32 pm #53266Hi Richard,
We bought the ACR35-A1, our intention is to build an app able to read/write NDEF messages, but unfortunately, it seems there is not enough info to create an app with such features, I have downloaded the iOS SDK from: http://www.acs.com.hk/en/driver/341/acr35-nfc-mobilemate-card-reader/
and the entire set from: https://github.com/flomio/flomio_ios, but I could not see even the class you mention(“NDEFMessage.h”)*I have read that FloJack V2 and ARC35 is the same thing(rebranded), therefore, I have tested also with the FloJack SDK(https://github.com/flomio/flomio_ios/tree/master/FloJack) but the result is the same.
Could you please guide me to the right way by telling me where can I find some information/documentation about reading and writing NDEF messages with a ACR35?
Thanks in advance.
November 7, 2015 at 9:51 am #53686Hi Christian, reading and writing NDEF messages is not a trivial function. This has a lot to do with the wide array of tags out in the market. We are integrating this support to the Flomio SDK for developers to leverage. We will be announcing more details about that once we are ready to release it.
-
AuthorPosts
You must be logged in to reply to this topic.