【问题标题】:Firebase token in URL网址中的 Firebase 令牌
【发布时间】:2021-07-27 03:03:14
【问题描述】:

我已按照this 方法在 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;
}

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

here 也讨论了这个问题,但没有运气。任何帮助将不胜感激。

【问题讨论】:

    标签: android firebase google-chrome firebase-cloud-messaging trusted-web-activity


    【解决方案1】:

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

    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;
        }
    
    
    }
    

    CustomFirebaseMessagingService.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();
                }
            }
        }
    

    当您第一次启动应用程序时,会发生什么,

    • 在shouldLaunchImmediately中检查参数(fcmToken)是否不为空/可用,如果可用,没问题,继续启动应用程序
    • 如果令牌不可用,请停止启动应用程序
    • 在 onNewToken 内部,它会一直观察直到从 Firebase 收到令牌。
    • 收到后会调用 sendToServer。
    • 在 sendToServer 内部,它将 fcmToken 存储在共享首选项中,然后再次重新启动应用程序。

    希望这对某人有所帮助。

    【讨论】:

      【解决方案2】:

      此问题已在 android-browser-helper 的 2.2.2 版本中得到处理。对于之前的版本,您可以在调用launchTwa() 后调用onEnterAnimationComplete()。您可以找到有关此解决方法的更多信息here

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-01-02
        • 1970-01-01
        • 1970-01-01
        • 2017-06-24
        • 2017-03-28
        • 2016-09-24
        • 2016-10-16
        相关资源
        最近更新 更多