Google Nearby API - NearbyManager.java
One of the coolest things I have worked on is the Nearby API.
Here's a couple of resources for you to checkout before you begin!!
- Google Nearby - https://developers.google.com/nearby/
- Android KT - Nearby API - http://androidkt.com/nearby-connections-api-2-0/
- Best Practices - Nearby Communications - https://developer.android.com/distribute/best-practices/engage/nearby-interations
- Android Bluetooth Overview - https://developer.android.com/guide/topics/connectivity/bluetooth
- Monzo Nearby Friends - https://monzo.com/blog/2018/05/08/nearby-friends/
- LinkedIn Nearby (Search or open your LinkedIn on your phone to try with someone!)
Custom made GIF -> Just for you! Download and use. FREE! (Right-Click => Save as)
Custom made Nearby GIF (Download FREE) |
Approaches/Tips
- Start by deciding how you want to use this API!
- The support for Messages is both Android and IOS, though some apps are having trouble trying to get through Apple's stricter policies when requiring microphone permissions.
- The support for Connections API is limited to Android only at this point.
- Make a mental model on how you want to build your application. Like shown below.
- You will need to create an API key with Google Cloud Console and enable access to Nearby API specifically.
- Plus at first application launch, you would have to check for the required permissions as well!
- To generate an API key, you would need your SHA1 Android Debug Fingerprint, which is super easy to get BTW. Steps below ->
- Next put together all the resources such as animations, images, layouts and strings! (cheap trick for strings: After you type the text inside a layout file, wait Android Studio to highlight it, then just press Alt+Enter and choose "Extract String resource" and voila, your life is set!)
- Be sure to add all the dependencies like shown below.
- Be sure to configure and add all the API keys and Activities to your Android Manifest as shown below!
- And that it you'all!!!!!!!! Now you can begin building that next cool app!
Android Manifest
Manifest pt 1 |
Manifest pt 2 |
Dependencies Setup
Gradle app config |
It doesn't matter if some of the dependencies are not the latest version. Here I chose 4.2.0 because I wasn't able to compile it with 4.8.0 and whatever functionality I required from Glide is working just as fine!
Basic Directory Structure
Directory Structure |
Getting your Fingerprint
To get your fingerprint, just run or Double-Click on the Gradle task signingReport and it should run and show you the Fingerprint right in your Console/Debugger/Run task messages window!
Gradle Task to get Fingerprint |
The Glorious supporting class
I have made a supporting class to help the new comers engage and better experiment with this API, without needing to get their hands dirty coding the nitty-gritty details!This is a prerequisite I put together to help people get started with the Nearby API! We don't have a supporting class as such and I figured this would help anyone starting out! This could also help you to find missing pieces in your puzzle! Good luck!
[Class] NearbyManager.java (Just as promised!)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 | import android.app.Activity; import android.content.Context; import android.content.SharedPreferences; import android.util.Log; import android.widget.Toast; import com.google.android.gms.nearby.Nearby; import com.google.android.gms.nearby.messages.Message; import com.google.android.gms.nearby.messages.MessageListener; import com.google.android.gms.nearby.messages.MessagesClient; import com.google.android.gms.nearby.messages.PublishCallback; import com.google.android.gms.nearby.messages.PublishOptions; import com.google.android.gms.nearby.messages.Strategy; import com.google.android.gms.nearby.messages.SubscribeCallback; import com.google.android.gms.nearby.messages.SubscribeOptions; import com.google.android.gms.tasks.OnSuccessListener; public class NearbyManager { private boolean isSubscribing = false; private boolean isPublishing = false; private Activity current; private MessagesClient mMessageClient; private MessageListener mMessageListener; private static final Strategy PUB_STRATEGY = new Strategy.Builder() .setTtlSeconds(Strategy.TTL_SECONDS_DEFAULT).build(); private static final Strategy SUB_STRATEGY = new Strategy.Builder() .setTtlSeconds(Strategy.TTL_SECONDS_MAX).build(); private String mPubMessage; public boolean isSubscribing() { return isSubscribing; } public boolean isPublishing() { return isPublishing; } public NearbyManager(Activity activity){ current = activity; PermissionManager.checkPerms(current); mMessageClient = Nearby.getMessagesClient(current); mMessageListener = new MessageListener(){ @Override public void onFound(Message message) { if(message != null){ //DO SOMETHING } } } @Override public void onLost(Message message) { Toast.makeText(current, "Device is lost", Toast.LENGTH_SHORT).show(); } }; } public void publish(final String message){ mPubMessage = message; PublishOptions options = new PublishOptions .Builder() .setStrategy(PUB_STRATEGY) .setCallback(new PublishCallback(){ @Override public void onExpired() { super.onExpired(); current.runOnUiThread(new Runnable() { @Override public void run() { isPublishing = false; } }); } }) //.setStrategy(Strategy.BLE_ONLY) <-- removed this .build(); mMessageClient.publish(new Message(message.getBytes()), options).addOnSuccessListener(current, new OnSuccessListener<Void>() { @Override public void onSuccess(Void aVoid) { Toast.makeText(current, "Publishing! Message:" + message, Toast.LENGTH_SHORT).show(); } }); isPublishing = true; } public void subscribe(){ SubscribeOptions options = new SubscribeOptions.Builder() .setStrategy(SUB_STRATEGY) .setCallback(new SubscribeCallback(){ @Override public void onExpired() { super.onExpired(); Toast.makeText(current, "No longer Subscribing!", Toast.LENGTH_SHORT).show(); current.runOnUiThread(new Runnable() { @Override public void run() { isSubscribing = false; } }); } }) //.setStrategy(Strategy.BLE_ONLY) <-- removed this .build(); mMessageClient.subscribe(mMessageListener, options).addOnSuccessListener(current, new OnSuccessListener<Void>() { @Override public void onSuccess(Void aVoid) { Toast.makeText(current, "Subscribing!", Toast.LENGTH_SHORT).show(); } }); isSubscribing = true; } public void unsubscribe(){ if(isSubscribing && mMessageClient != null) mMessageClient.unsubscribe(mMessageListener); isSubscribing = false; } public void unpublish(){ if(isPublishing && mMessageClient != null) mMessageClient.unpublish(new Message(mPubMessage.getBytes())); isPublishing = false; } } |
So that's that guys! Until next, time, have fun coding!
Hopefully coming soon live demos..Unless NDA 😝
No comments:
Post a Comment