如何在 Android 和 iPhone 的移动应用程序中实现推荐程序

我们有一个移动应用程序,可在谷歌播放商店和苹果应用程序商店,我们希望实现一个推荐程序,让更多的用户安装和使用我们的应用程序。

下面是用户故事:

  • 每个新用户(例如约翰)都有一个独特的推荐链接,在那里他/她可以分享到 FB/TW/Email 或 SMS。
  • 当 John friend 单击该链接时,它们被指向各自设备上的 AppStore。
  • 一旦约翰的朋友安装了应用程序并打开了应用程序,我们的服务器应该得到通知,我们应该知道推荐是从约翰,约翰将得到相应的奖励。

我们已经评估了许多移动应用程序安装跟踪工具,其中大多数工具是最好的使用在发布者/移动广告。

感谢你的意见和建议

干杯 詹姆斯

72474 次浏览

We are doing a similar type of referral system in our app which provides certain amount of Reward Points to the referrer (one who actually shared the link to app) on successful install of the app by new user (one who received the link).

I will try to explain our implementation using your scenario: So according to your user story:

  • Every new user (E.g John) is given a unique referral link, which he/she can share it to his friends using FB/TW/Email or SMS.

  • When John's friend clicks on the link, he is re-directed first to a Servlet which eventually redirects him to respective AppStore based on his platform (Android/iPhone) to download the app.

  • Note that we can find out the IP address, user agent and device model of the user who clicked the link using a Servlet.

  • We already know that the referral link belongs to John and hence the servlet maps the IP address,user agent and/or device model of John's friend to John's entry in database.

  • The moment John's friend installs the app, and opens the app, the application sends the IP address, user agent and/or device model to the server.

  • The server checks the entry against all the user to find the referrer and if it finds him, in our case John, John gets rewarded accordingly..

Thats it. We implemented this in the last month itself and it does increased our downloads. Let me know if that's helpful.

It can be done using Google Campaign Measurement where in the utm_source just give unique number/string for each user which you will receive when user's friend installs the app as Google Play store will broadcast it after the installation. Refer to this question.

Android

On android you can create an install broadcast listener, where you can get and save the referrer part of the link to SharedPreferences

https://play.google.com/store/apps/details?id=com.example.app&referrer=example_referral_code_here

For this check
Android - Is it possible to get install referrer programmatically
and
Get referrer after installing app from Android Market

and

https://developer.android.com/google/play/installreferrer/library.html

iOS

For now (Jan 2016) It is not possible to get the install referrer code in your app, like with android.

Options i had for ios were:

  1. user frameworks/3rd party services like alau.me
  2. a workaround with fingerprinting, similar to what Puru Pawar suggests
  3. just make the user enter the referral code inside your app

An alternative is to let your current users make a unique code, for example, David123 or HenryABC. They share their code (which is easy to remember as it's personal). Within your app you provide a referral box that a new user enters the code to unlock additional features. This way you can track and don't have to worry about a fingerprint. The big issue with a fingerprint method is iOS is not unique enough and mobile networks share IP addresses. So someone with an iPhone 6s in London on EE is likely to have the same fingerprint as 100s of other people.

If anyone is still looking for solution to this question. I read a lot of blogs and documents for the same problem, and arrived at following conclusion:-

IP Address + User Agent + Device Model is not enough to identify a device uniquely. So, I think it will be better to use dynamic links. You can create dynamic links containing a unique id. And that data will survive url redirection to app store and even after installation your app can get the unique id from dynamic link.Google's firebase can be used for creating dynamic links :-

https://firebase.google.com/docs/dynamic-links/

Or if you want to use a ready to use solution then you can refer branch.io

Gradle File

 implementation 'com.android.installreferrer:installreferrer:1.0'

PUT CODE IN ACTIVITY WHERE IT NEED TO RECIEVE REFFERAL CODE

 InstallReferrerClient mReferrerClient;


mReferrerClient = InstallReferrerClient.newBuilder(this).build();


mReferrerClient.startConnection(new InstallReferrerStateListener() {
@Override
public void onInstallReferrerSetupFinished(int responseCode) {
switch (responseCode) {
case InstallReferrerClient.InstallReferrerResponse.OK:
// Connection established
try {
ReferrerDetails response =
mReferrerClient.getInstallReferrer();
if (!response.getInstallReferrer().contains("utm_source"))
edtPRferelCode.setText("" +
response.getInstallReferrer());
} catch (Exception e) {
e.printStackTrace();
}
mReferrerClient.endConnection();
break;
case
InstallReferrerClient.InstallReferrerResponse.FEATURE_NOT_SUPPORTED:
// API not available on the current Play Store app
break;
case
InstallReferrerClient.InstallReferrerResponse.SERVICE_UNAVAILABLE:
// Connection could not be established
break;
}
}


@Override
public void onInstallReferrerServiceDisconnected() {
// Try to restart the connection on the next request to
// Google Play by calling the startConnection() method.
}
});

SHARE LINK EXAMPLE

https://play.google.com/store/apps/details?id=com.yourpackage&referrer=9BE46300

Disclaimer: not being satisfied with the original accepted answer, I'm providing an alternative solution back to this "popular" thread.

On Android, this is not an issue at all. Google will let you access the referrer param sent at install time by registering a receiver, you can also leverage their install referrer API.

For iOS it is a bit trickier as it's not officially supported. As proposed here you can do fingerprinting but that's cumbersome and comes with a high degree of inaccuracy. There are two more elegant solutions I came across:

  1. Cookie based tracking that is explained in details here
  2. URL copied to clipboard (Firebase seems to do both clipboard and cookie approach but that's based on personal observation - no official source).
    • When user visits your webpage (ie: example.com/invite/123), display a web page before redirecting to the App Store.
    • In that page make the user push a button so that you can copy a string to the clipboard/pasteboard with document.execCommand('copy') after having selected some string residing in an hidden input via focus() and setSelectionRange()
    • After install, when the user lands in the app you can do two things:
      1. Catch clipboard/pasteboard content via UIPasteboard.general.string (swift) and do some parsing or API calls
      2. Redirect the user back (via its default browser to avoid Cookies not present) on a page on the same domain as in the initial link (ie: mydomain.com/retrieve) so that the page will receive the initially set cookies (in step 1.) gently shared by the browser upon visit. You can then redirect the user back to your original link as the app is now installed and Universal Linking will now work as intended.