Skip to content

Commit 973bbce

Browse files
committedDec 16, 2016
Now properly persists Firebase tokens.
1 parent a38768e commit 973bbce

File tree

6 files changed

+116
-29
lines changed

6 files changed

+116
-29
lines changed
 

‎app/build.gradle

+4
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ dependencies {
6262

6363
// Game utils
6464
compile project(':BaseGameUtils')
65+
compile 'com.google.android.gms:play-services:10.0.1'
6566
compile 'com.google.android.gms:play-services-games:10.0.1'
6667
compile 'com.google.android.gms:play-services-plus:10.0.1'
6768

@@ -83,8 +84,11 @@ dependencies {
8384
compile 'com.jakewharton.retrofit:retrofit2-rxjava2-adapter:1.0.0'
8485

8586
//firebase
87+
compile 'com.google.firebase:firebase-core:10.0.1'
8688
compile 'com.google.firebase:firebase-messaging:10.0.1'
8789

8890
// mappssss
8991
compile 'com.google.android.gms:play-services-maps:10.0.1'
9092
}
93+
94+
apply plugin: 'com.google.gms.google-services'

‎app/google-services.json

+47
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
{
2+
"project_info": {
3+
"project_number": "1092178901155",
4+
"firebase_url": "https://bloop-58901426.firebaseio.com",
5+
"project_id": "bloop-58901426",
6+
"storage_bucket": "bloop-58901426.appspot.com"
7+
},
8+
"client": [
9+
{
10+
"client_info": {
11+
"mobilesdk_app_id": "1:1092178901155:android:a14576910ffcefe7",
12+
"android_client_info": {
13+
"package_name": "website.bloop.app"
14+
}
15+
},
16+
"oauth_client": [
17+
{
18+
"client_id": "1092178901155-bjui9td6v34a0n66og8befcsppm0tg2d.apps.googleusercontent.com",
19+
"client_type": 3
20+
}
21+
],
22+
"api_key": [
23+
{
24+
"current_key": "AIzaSyD3NRwOKS8LxnvBpp06TddL0aLzgiG1HVI"
25+
}
26+
],
27+
"services": {
28+
"analytics_service": {
29+
"status": 1
30+
},
31+
"appinvite_service": {
32+
"status": 2,
33+
"other_platform_oauth_client": [
34+
{
35+
"client_id": "1092178901155-bjui9td6v34a0n66og8befcsppm0tg2d.apps.googleusercontent.com",
36+
"client_type": 3
37+
}
38+
]
39+
},
40+
"ads_service": {
41+
"status": 2
42+
}
43+
}
44+
}
45+
],
46+
"configuration_version": "1"
47+
}

‎app/src/main/java/website/bloop/app/BloopApplication.java

+20
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,28 @@
11
package website.bloop.app;
22

33
import android.app.Application;
4+
import android.content.Context;
5+
import android.content.SharedPreferences;
6+
import android.util.Log;
47

58
import com.google.android.gms.common.api.GoogleApiClient;
9+
import com.google.firebase.iid.FirebaseInstanceId;
610
import com.jakewharton.retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;
711

12+
import io.reactivex.android.schedulers.AndroidSchedulers;
13+
import io.reactivex.schedulers.Schedulers;
814
import retrofit2.Retrofit;
915
import retrofit2.converter.jackson.JacksonConverterFactory;
1016
import website.bloop.app.api.APIPath;
1117
import website.bloop.app.api.BloopAPIService;
18+
import website.bloop.app.api.Player;
1219

1320
/**
1421
*
1522
*/
1623
public class BloopApplication extends Application {
1724
private static BloopApplication mInstance = null;
25+
private static final String TAG = "BloopApplicationClass";
1826
public static final String BLOOP_PREFERENCE_FILE = "BloopPrefs";
1927

2028
private GoogleApiClient mGoogleApiClient;
@@ -72,4 +80,16 @@ public BloopAPIService getService() {
7280
}
7381
return mService;
7482
}
83+
84+
public void sendFirebaseRegistrationToServer(String token) {
85+
Player player = new Player(null, getPlayerId(), token);
86+
87+
getService().updateFirebaseToken(player)
88+
.subscribeOn(Schedulers.newThread())
89+
.observeOn(AndroidSchedulers.mainThread())
90+
.subscribe(
91+
responseBody -> {},
92+
throwable -> Log.e(TAG, throwable.getMessage())
93+
);
94+
}
7595
}
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,36 @@
11
package website.bloop.app;
22

3-
import android.util.Log;
3+
import android.content.Context;
4+
import android.content.SharedPreferences;
45

56
import com.google.firebase.iid.FirebaseInstanceId;
67
import com.google.firebase.iid.FirebaseInstanceIdService;
78

8-
import io.reactivex.android.schedulers.AndroidSchedulers;
9-
import io.reactivex.schedulers.Schedulers;
10-
import website.bloop.app.api.Player;
9+
import static website.bloop.app.BloopApplication.BLOOP_PREFERENCE_FILE;
1110

1211
public class BloopFirebaseInstanceIDService extends FirebaseInstanceIdService {
1312

1413
private static final String TAG = "BloopFirebaseIIDService";
14+
public static final String PREF_FIREBASE_TOKEN = "firebase_token";
1515

1616
@Override
1717
public void onTokenRefresh() {
1818
String refreshedToken = FirebaseInstanceId.getInstance().getToken();
19-
sendRegistrationToServer(refreshedToken);
19+
BloopApplication application = BloopApplication.getInstance();
20+
if (application.getPlayerId() != null) {
21+
application.sendFirebaseRegistrationToServer(refreshedToken);
22+
} else {
23+
storeToken(refreshedToken);
24+
}
25+
2026
}
2127

22-
private void sendRegistrationToServer(String token) {
23-
BloopApplication application = BloopApplication.getInstance();
24-
Player player = new Player(null, application.getPlayerId(), token);
25-
26-
application.getService().updateFirebaseToken(player)
27-
.subscribeOn(Schedulers.newThread())
28-
.observeOn(AndroidSchedulers.mainThread())
29-
.subscribe(
30-
responseBody -> {},
31-
throwable -> Log.e(TAG, throwable.getMessage())
32-
);
28+
private void storeToken(String token) {
29+
SharedPreferences sharedPrefs = getApplicationContext()
30+
.getSharedPreferences(BLOOP_PREFERENCE_FILE, Context.MODE_PRIVATE);
31+
SharedPreferences.Editor editor = sharedPrefs.edit();
32+
editor.putString(PREF_FIREBASE_TOKEN, token);
33+
editor.commit();
3334
}
3435
}
36+

‎app/src/main/java/website/bloop/app/activities/PlayLoginActivity.java

+26-13
Original file line numberDiff line numberDiff line change
@@ -17,16 +17,20 @@
1717
import com.google.android.gms.games.Games;
1818
import com.google.android.gms.games.Player;
1919
import com.google.example.games.basegameutils.BaseGameUtils;
20+
import com.google.firebase.iid.FirebaseInstanceId;
2021

2122
import butterknife.BindView;
2223
import butterknife.ButterKnife;
2324
import io.reactivex.android.schedulers.AndroidSchedulers;
2425
import io.reactivex.schedulers.Schedulers;
2526
import website.bloop.app.BloopApplication;
27+
import website.bloop.app.BloopFirebaseInstanceIDService;
2628
import website.bloop.app.R;
2729
import website.bloop.app.api.BloopAPIService;
2830
import website.bloop.app.views.SonarView;
2931

32+
import static website.bloop.app.BloopApplication.BLOOP_PREFERENCE_FILE;
33+
3034
/**
3135
* Login authentication through Google Play Games
3236
* Reference: https://developers.google.com/games/services/training/signin
@@ -46,7 +50,7 @@ public class PlayLoginActivity extends AppCompatActivity
4650
private boolean mSignInClicked = false;
4751

4852
private GoogleApiClient mGoogleApiClient;
49-
private BloopAPIService mService;
53+
private BloopApplication mApplication;
5054

5155
@BindView(R.id.signInName)
5256
TextView loginText;
@@ -80,7 +84,7 @@ protected void onCreate(Bundle savedInstanceState) {
8084
// set to application (like singleton) so we can re-call it
8185
BloopApplication.getInstance().setGoogleApiClient(mGoogleApiClient);
8286

83-
mService = BloopApplication.getInstance().getService();
87+
mApplication = BloopApplication.getInstance();
8488
SharedPreferences loginPref = getSharedPreferences(PREF_LOGIN, Context.MODE_PRIVATE);
8589
boolean loggedIn = loginPref.getBoolean(PREF_LOGIN_VAL, false);
8690

@@ -107,19 +111,11 @@ public void onConnected(@Nullable Bundle bundle) {
107111

108112
playerId = Games.Players.getCurrentPlayerId(mGoogleApiClient);
109113

110-
BloopApplication.getInstance().setPlayerName(displayName);
111-
BloopApplication.getInstance().setPlayerId(playerId);
114+
mApplication.setPlayerName(displayName);
115+
mApplication.setPlayerId(playerId);
112116

113117
website.bloop.app.api.Player player = new website.bloop.app.api.Player(displayName, playerId, null);
114-
115-
// TODO: move this to another class?
116-
mService.addPlayer(player)
117-
.subscribeOn(Schedulers.newThread())
118-
.observeOn(AndroidSchedulers.mainThread())
119-
.subscribe(
120-
responseBody -> {},
121-
throwable -> Log.e(TAG, throwable.getMessage())
122-
);
118+
addUser(player);
123119
}
124120

125121
// hide button on login
@@ -139,6 +135,23 @@ public void onConnected(@Nullable Bundle bundle) {
139135
finish();
140136
}
141137

138+
private void addUser(website.bloop.app.api.Player player) {
139+
SharedPreferences prefs = getSharedPreferences(BLOOP_PREFERENCE_FILE, Context.MODE_PRIVATE);
140+
mApplication.getService().addPlayer(player)
141+
.subscribeOn(Schedulers.newThread())
142+
.observeOn(AndroidSchedulers.mainThread())
143+
.subscribe(
144+
responseBody -> {
145+
String token = prefs.getString(BloopFirebaseInstanceIDService.PREF_FIREBASE_TOKEN, "");
146+
if (token.equals("")) {
147+
token = FirebaseInstanceId.getInstance().getToken();
148+
}
149+
mApplication.sendFirebaseRegistrationToServer(token);
150+
},
151+
throwable -> Log.e(TAG, throwable.getMessage())
152+
);
153+
}
154+
142155
@Override
143156
public void onConnectionSuspended(int i) {
144157
// Attempt to reconnect

‎build.gradle

+1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ buildscript {
66
mavenCentral()
77
}
88
dependencies {
9+
classpath 'com.google.gms:google-services:3.0.0'
910
classpath 'com.android.tools.build:gradle:2.2.3'
1011

1112
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'

0 commit comments

Comments
 (0)
Please sign in to comment.