URL中的Firebase令牌



我已经按照这个方法在URL中发送了我的fcm令牌。

以下是我的自定义启动器活动

public class LauncherActivity
extends com.google.androidbrowserhelper.trusted.LauncherActivity {
private String fcmToken;
@Override
protected Uri getLaunchingUrl() {
Uri uri = super.getLaunchingUrl();
return uri
.buildUpon()
.appendQueryParameter("fcmToken", fcmToken)
.build();
}
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
FirebaseMessaging.getInstance().getToken()
.addOnCompleteListener(new OnCompleteListener<String>() {
@Override
public void onComplete(@NonNull Task<String> task) {
if (!task.isSuccessful()) {
return;
}
fcmToken = task.getResult();
launchTwa();
}
});
}
@Override
protected boolean shouldLaunchImmediately() {
return false;
}

问题是当我第一次运行应用程序时,它会卡在启动屏幕上。然后在杀死应用程序后,第二次它就工作了。

这里也讨论了这些问题,但运气不好。任何帮助都将不胜感激。

由于我没有找到并解决这个问题,下面是我找到的解决这个问题的方法。现在,我没有卡在初始步骤中,并且已经将令牌传递给了我的服务器。

LauncherActivity.java

public class LauncherActivity
extends com.google.androidbrowserhelper.trusted.LauncherActivity {
private String fcmToken;
@Override
protected Uri getLaunchingUrl() {
uri = super.getLaunchingUrl();

return uri
.buildUpon()
.appendQueryParameter("fcmToken", fcmToken)
.build();
}

@Override
protected boolean shouldLaunchImmediately() {
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
fcmToken = preferences.getString("fcmTokenNew", "");
Boolean res = false;
if(fcmToken != null && !fcmToken.trim().isEmpty()) {
res = true;
}
return res;
}

}

自定义FirebaseMessagingService.java

public class CustomFirebaseMessagingService extends FirebaseMessagingService {

@Override
public void onNewToken(String token) {
sendToSariroti(token);
}

protected void sendToServer(String fcmToken) {

try {

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor editor = preferences.edit();
editor.putString("fcmTokenNew",fcmToken);
editor.apply();

Intent intent = getBaseContext().getPackageManager().getLaunchIntentForPackage(
getBaseContext().getPackageName() );
intent .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);

} catch (Exception e) {
e.printStackTrace();
}
}
}

发生的事情是当你第一次启动应用程序时

  • 它检查参数(fcmToken(是否在shouldLaunch内部不为null/可用如果可用,没有问题,继续启动应用程序
  • 如果令牌不可用,请停止启动应用程序
  • 在onNewToken中,它会一直监视,直到从Firebase接收到令牌
  • 收到后,它将调用sendToServer
  • 在sendToServer中,它将fcmToken存储在共享的首选项中,然后再次启动应用程序

希望这能对某人有所帮助。

此问题已在2.2.2版本的android浏览器助手中处理。对于之前的版本,可以在调用launchTwa()之后再调用onEnterAnimationComplete()。你可以在这里找到更多关于这个解决方法的信息

最新更新