我已经按照这个方法在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()
。你可以在这里找到更多关于这个解决方法的信息