使用旧身份验证令牌将用户迁移到新应用程序 - InstallReferrer 自定义参数
User migration to a new app using old auth token - InstallReferrer custom parameter
我在 Google Play 上有两个应用程序。旧的和新的。而且我想对新应用程序使用旧的身份验证令牌,以便用户更轻松。
- 在旧应用上,用户会弹出一个提示,要求用户在 Google Play 上安装新应用。
- 我想将参数中的身份验证令牌传递给 Google 播放。
- 安装新应用后,我想在新应用中保存令牌。
我尝试使用 Play Install Referrer Library 但没有成功。
另一种方法是使用 SharedPreferences
,但 MODE_WORLD_READABLE
已被弃用。
旧APP:
try {
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=com.<PACKAGENAME>&token=pokpok&refresh_token=lolol"));
startActivity(intent);
} catch (Exception e) {
e.printStackTrace();
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=com.<PACKAGENAME>?token=pokpok&refresh_token=lolol")));
}
新APP代码:
private fun shouldGetTokenFromOldApp() {
mReferrerClient = InstallReferrerClient.newBuilder(this).build()
mReferrerClient.startConnection(object : InstallReferrerStateListener {
override fun onInstallReferrerSetupFinished(responseCode: Int) {
when (responseCode) {
InstallReferrerClient.InstallReferrerResponse.OK -> {
// Connection established
val response: ReferrerDetails = mReferrerClient.installReferrer
val url = "https://play.google.com/store?${response.installReferrer}"
Log.d("APP", "Token old app 1 : $url")
val uri: Uri = Uri.parse(url)
val token = uri.getQueryParameter("token")
val refreshToken = uri.getQueryParameter("refresh_token")
Log.d("APP", "Token old app 2 : $token - $refreshToken")
mReferrerClient.endConnection()
}
InstallReferrerClient.InstallReferrerResponse.FEATURE_NOT_SUPPORTED -> {
// API not available on the current Play Store app
}
InstallReferrerClient.InstallReferrerResponse.SERVICE_UNAVAILABLE -> {
// Connection could not be established
}
}
}
override fun onInstallReferrerServiceDisconnected() {
// Try to restart the connection on the next request to
// Google Play by calling the startConnection() method.
}
})
}
这对用户来说听起来是件好事,但似乎非常危险。您正在发送一个 Auth 令牌 - 如果有人拥有它,则可以允许他们通过不受信任的系统(如世界可读文件或 URL 中的引用参数)以该用户身份登录任何地方。
如果您确实需要这样做,我建议您在安装应用后使用某种形式的应用间 RPC (IPC) 来传递令牌。一种选择是 a binder 到提供授权的服务。
我在 Google Play 上有两个应用程序。旧的和新的。而且我想对新应用程序使用旧的身份验证令牌,以便用户更轻松。
- 在旧应用上,用户会弹出一个提示,要求用户在 Google Play 上安装新应用。
- 我想将参数中的身份验证令牌传递给 Google 播放。
- 安装新应用后,我想在新应用中保存令牌。
我尝试使用 Play Install Referrer Library 但没有成功。
另一种方法是使用 SharedPreferences
,但 MODE_WORLD_READABLE
已被弃用。
旧APP:
try {
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=com.<PACKAGENAME>&token=pokpok&refresh_token=lolol"));
startActivity(intent);
} catch (Exception e) {
e.printStackTrace();
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=com.<PACKAGENAME>?token=pokpok&refresh_token=lolol")));
}
新APP代码:
private fun shouldGetTokenFromOldApp() {
mReferrerClient = InstallReferrerClient.newBuilder(this).build()
mReferrerClient.startConnection(object : InstallReferrerStateListener {
override fun onInstallReferrerSetupFinished(responseCode: Int) {
when (responseCode) {
InstallReferrerClient.InstallReferrerResponse.OK -> {
// Connection established
val response: ReferrerDetails = mReferrerClient.installReferrer
val url = "https://play.google.com/store?${response.installReferrer}"
Log.d("APP", "Token old app 1 : $url")
val uri: Uri = Uri.parse(url)
val token = uri.getQueryParameter("token")
val refreshToken = uri.getQueryParameter("refresh_token")
Log.d("APP", "Token old app 2 : $token - $refreshToken")
mReferrerClient.endConnection()
}
InstallReferrerClient.InstallReferrerResponse.FEATURE_NOT_SUPPORTED -> {
// API not available on the current Play Store app
}
InstallReferrerClient.InstallReferrerResponse.SERVICE_UNAVAILABLE -> {
// Connection could not be established
}
}
}
override fun onInstallReferrerServiceDisconnected() {
// Try to restart the connection on the next request to
// Google Play by calling the startConnection() method.
}
})
}
这对用户来说听起来是件好事,但似乎非常危险。您正在发送一个 Auth 令牌 - 如果有人拥有它,则可以允许他们通过不受信任的系统(如世界可读文件或 URL 中的引用参数)以该用户身份登录任何地方。
如果您确实需要这样做,我建议您在安装应用后使用某种形式的应用间 RPC (IPC) 来传递令牌。一种选择是 a binder 到提供授权的服务。