如何在某个事件上获取Firebase令牌

时间:2017-01-07 10:46:51

标签: android android-fragments firebase firebase-cloud-messaging

我在项目中添加了Firebase Notification,现在当我启动应用程序时,它点击Firebase server并获得Token。我希望它能够保存请求,并在事件中点击firebase服务器。

这就是我所做的,我没有创建任何Firebase实例,它自己被调用。

<service android:name=".FirebaseCloudMessaging.FirebaseMessagingService">
        <intent-filter>
            <action android:name="com.google.firebase.MESSAGING_EVENT"/>
        </intent-filter>
    </service>


    <service android:name=".FirebaseCloudMessaging.FirebaseInstanceIDService">
        <intent-filter>
            <action android:name="com.google.firebase.INSTANCE_ID_EVENT"/>
        </intent-filter>
    </service>

FirebaseInstanceIDService类

public class FirebaseInstanceIDService extends FirebaseInstanceIdService {

    private final String SHARD_PREF = "com.tixsee.mavs.gcmcloudmessaging";
    private final String GCM_TOKEN = "gcmtoken";
    private final String TAG = FirebaseInstanceIDService.class.getSimpleName();
    String token;
    private Context mContext;
    public FirebaseInstanceIDService() {

    }

 @Override
    public void onTokenRefresh() {

        SharedPreferences appPrefs = getSharedPreferences(SHARD_PREF, Context.MODE_PRIVATE);
        token = appPrefs.getString(GCM_TOKEN, "");
        if (token.isEmpty()) {

            token = FirebaseInstanceId.getInstance().getToken();
            sendTokenToService(token);
            Log.d(TAG, "New Token Created" + token);

            SharedPreferences notificationPreference = getSharedPreferences(SHARD_PREF, Context.MODE_PRIVATE);
            SharedPreferences.Editor notificationPrefsEditor = notificationPreference.edit();
            notificationPrefsEditor.putString("NOTIFICATION_ENABLED", "true");
            notificationPrefsEditor.apply();
}

请指导我如何保存Firebase请求,并在任何特定事件上触发它。

1 个答案:

答案 0 :(得分:1)

只需在共享首选项中存储用户接受通知的标记

SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPref.edit();
editor.putBoolean("notification", true);
editor.commit();

然后检查onTokenRefresh()

中的标志
SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
boolean value = sharedPref.getBoolean("notification", false);

if(value)
   {
     \\ Send to token(FirebaseInstanceId.getInstance().getToken()) to server 
  } 

如果设置了标志,则将令牌发送到服务器。

如果在用户接受屏幕之前自动调用onTokenRefresh,也会输入。然后检查FirebaseInstanceId.getInstance().getToken();是否为空。

if(FirebaseInstanceId.getInstance().getToken()!=null)
{
 \\ Send to token(FirebaseInstanceId.getInstance().getToken()) to server 
}

如果它不为null,则将该令牌发送到服务器。

希望这能解决你的问题。