Using App Invites with the Tapstream Android SDK
First, integrate the latest Android SDK.
Integration instructions for Android
Tapstream App Invites give you the ability to reward users for sharing your app with a friend.
Try creating a Word of Mouth campaign to get a feel for how App Invites offers are designed and presented.
First, implement the latest Tapstream Android SDK. Once you've done so, come back here and follow the instructions below.
The following examples assume that the Tapstream SDK has been initialized in the usual manner before any App Invites functionality is used.
About App Invites
An App Invites offer is a customizable modal that asks your user to share the app with another user in exchange for a reward, like this:
When the user clicks the call to action, Tapstream shows a share card that allows the user to share a unique link via iMessage/SMS, email, Facebook, or Twitter.
All details of each offer are controlled from within the Tapstream dashboard - you don't need to define its style, images, messaging, or reward during integration.
Showing offers
Your app probably has several locations at which you might want to show an offer. These locations are called "insertion points". Each insertion point should be uniquely identified with a string name that you entered in your Tapstream dashboard. At each insertion point in your code, you'll need to ask the SDK for eligible offers.
Here's how to query and display an offer at an insertion point called "launch":
import com.tapstream.sdk.ApiFuture; import com.tapstream.sdk.Callback; import com.tapstream.sdk.Tapstream; import com.tapstream.sdk.wordofmouth.Offer; import com.tapstream.sdk.wordofmouth.OfferApiResponse; import com.tapstream.sdk.wordofmouth.WordOfMouth; public class MyMainActivity extends Activity { // ... @Override protected void showOffer(String insertionPoint) { // You probably have a uiHandler in your activity already. final Handler uiHandler = new Handler(Looper.getMainLooper()); final Activity mainActivity = this; String insertionPoint = "launch"; ApiFuture<OfferApiResponse> resp = Tapstream.getInstance().getWordOfMouthOffer(insertionPoint); // Offers may take time to fetch; you are encouraged not to block your main thread on this retrieval. resp.setCallback(new Callback<OfferApiResponse>() { @Override public void success(OfferApiResponse result) { final Offer o = result.getOffer(); // Bounce back to UI thread to show WOM offer. uiHandler.post(new Runnable() { @Override public void run() { statusView.setText("Success. Displaying offer."); WordOfMouth wom = Tapstream.getInstance().getWordOfMouth(); View parent = findViewById(R.id.main_layout); wom.showOffer(mainActivity, parent, o); } }); } @Override public void error(Throwable reason) { // Handle a failure to retrieve an offer } }); // You may also simply resp.get() to block the current thread. } }
Notes:
-
The
getWordOfMouthOffer
method will not always return an offer. The rules that decide whether an offer is eligible to be shown at a particular insertion point, at a particular time, are managed in your Tapstream dashboard. -
The
showOffer
method should be called with your main activity and main layout view. In the above example,this
refers to the main activity.
Checking for rewards
When one of your users accepts an offer and successfully refers friends to your app, they may become eligible to receive a reward. Rewards are defined in your Tapstream dashboard.
At least once per session (but ideally, periodically over the course of a user session), your code should check for available rewards. If there are available rewards, your code should deliver the reward to the user and then tell the SDK that the reward has been consumed so that it will not be delivered again.
Here's how you might check for and consume available rewards:
import com.tapstream.sdk.ApiFuture; import com.tapstream.sdk.Callback; import com.tapstream.sdk.Tapstream; import com.tapstream.sdk.wordofmouth.Reward; import com.tapstream.sdk.wordofmouth.RewardApiResponse; import com.tapstream.sdk.wordofmouth.WordOfMouth; // ... ApiFuture<RewardApiResponse> resp = Tapstream.getInstance().getWordOfMouthRewardList(); // Again, try not to block on retrieving this future. resp.setCallback(new Callback<RewardApiResponse>() { @Override public void success(RewardApiResponse result) { WordOfMouth wom = Tapstream.getInstance().getWordOfMouth(); for(Reward reward: result.getRewards()){ // Check reward.getRewardSku() and deliver that reward to your user. // If the reward was successfully delivered, then consume it so it // will not show up when we query rewards in the future: while(!wom.isConsumed(reward)){ deliverReward(reward.getRewardSku()); wom.consumeReward(reward); } } } @Override public void error(Throwable reason) { // Handle a failure to retrieve an offer } }); // ...