2016-07-12 6 views
12

좋아요. 처음 시작했을 때 몇 가지 환영받는 슬라이드를 통해 응용 프로그램을 가져 와서 로그인/등록 페이지로 이동 한 다음 MainActivity으로 이동합니다.Firebase FCM 토큰 - 서버로 보낼시기?

것은 그냥 FCM 구현과 서비스를 생성 token 해당 페이지의는 사용자가 볼 수있다 전에 . 서비스가 실행되도록하려면 어떻게해야합니까 다음에 MainActivity에 도착합니까?

해당 사용자 계정에 MySQL DB으로 새로 고침 되 자마자 토큰을 보내려고하지만 사용자가 아직 로그인하지 않았으므로 해당 토큰이 null이고 서버에 대한 내 메시지입니다. 실패합니다. 이것을 설계하는 좋은 방법은 무엇입니까? 나는 토큰을 SharedPreferences에 저장하고 사용자가 로그인 한 후에 서버로 전송한다고 생각했지만 토큰이 나중에 새로 고쳐지면 많은 문제가 발생합니다.

가능한 해결 :

나는 완전히이 개 서비스를 실행하는 방법을 이해하지만, 난 그냥 SharedPreferences에 토큰을 저장하고 MainActivity에 내가 SP에서 값을 얻을 onTokenRefresh에 말을 잘 모르겠어요 그리고 난 보내 그것은 서버에. 이 경우 토큰이 새로 고쳐지면 새 값이 즉시 SharedPreferences으로 다시 이동합니다. 하지만 SP의 새로운 값인지 확인한 다음 서버에 다시 업로드해야합니다. 이것은 혼란 스럽다!

+0

http://engineering.letsnurture.com/firebase-cloud-messaging/ –

답변

8

예 FCM 토큰이 자동으로 생성됩니다. 그러나 이것을 다른 각도에서 보도록하십시오.

이렇게 처리했습니다.

앱이 시작 되 자마자 FCM에서 토큰을 생성합니다. OnTokenRefresh가 호출되고 기본 설정에 다음과 같이 저장하면됩니다.

@Override 
public void onTokenRefresh() { 
    // Get updated InstanceID token. 
    String refreshedToken = FirebaseInstanceId.getInstance().getToken(); 
    Log.d(TAG, "Refreshed token: " + refreshedToken); 

    sendRegistrationToServer(refreshedToken); 
} 

private void sendRegistrationToServer(String token) { 
    // Add custom implementation, as needed. 
    SharedPreferenceUtils.getInstance(this).setValue(getString(R.string.firebase_cloud_messaging_token), token); 

    // To implement: Only if user is registered, i.e. UserId is available in preference, update token on server. 
    int userId = SharedPreferenceUtils.getInstance(this).getIntValue(getString(R.string.user_id), 0); 
    if(userId != 0){ 
     // Implement code to update registration token to server 
    } 
} 

희망적입니다. 그것에 대한 정리가 필요한지 물어보십시오.

+0

그래서 내가 처음 응용 프로그램을 사용하는 유일한 방법은 등록하는 것입니다 때문에 서버에 토큰을 보내려면 내 MainActivity에서 동일한 일을 할 수 처음 서비스가 시작되면 사용자 ID가 없어 서버에 전송되지 않습니다. 내 해결책이라고 생각해. 토큰을 처음받을 때 서버에 보내지 않습니까? 아니면 나중에 코드를 포함시키지 않았습니까? – iBobb

5

우리는이처럼 처리 :

  1. 우리의 서버는 사용자 ID에 대한 토큰 값을 업데이트/(기본 키)
  2. 사용이 된 SharedPreferences
    1. 문자열 생성 - 토큰 문자열을
    2. Boolean (updated) - 서버에서 토큰이 업데이트되는지 여부입니다.

토큰 갱신의 경우에 우리는 토큰 문자열을 업데이트하고 false로 부울을 설정합니다. 나중에 boolean (업데이트 됨)을 확인할 때마다 사용자가 로그인 할 때마다 그 값이 false 인 경우 현재 ID를 ID에 첨부하고 서버로 보내고 true로 업데이트합니다.당신은 항상 함께 토큰을 검색 할 수 있습니다

+1

은 사용자의 이메일을 사용하여 토큰을 얻는 방법입니다 (모두 서버 측). – Andrea

11

참고 :이 생성 된 경우 토큰이 아직 생성 또는 토큰되지 않은 경우이 null를 반환합니다

FirebaseInstanceID.getInstance().getToken(); 

. 귀하의 경우에는 사용자가 로그인 한 시점까지 토큰이 생성 될 가능성이 매우 높습니다. 따라서 사용자가 로그인 한 즉시 앱 서버로 보낼 수 있어야합니다. 사용할 수없는 경우 Chintan Soni가 언급 한대로 onTokenRefresh 콜백에서이를 보냅니다.

관련 문제