ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

海外统计与推送-----Firebase

2021-05-30 12:01:22  阅读:583  来源: 互联网

标签:category String firebaseAnalytics logEvent bundle token Firebase ----- 推送


最近一直在做海外项目。涉及到推送功能。于是使用到了firebase.

firebase是Google推出的一个云端服务,并且它完全免费。

官方:https://firebase.google.com/features/ 。当然,由于是涉及海外的,所以,你懂的,要搬***。

firebase的功能有很多种,包含,推送通知,云存储,活动监视,远程部署等等。请注意:

手机中的Google Play Service的版本信息需要>=FireBase SDK的版本,否则FireBase将无效。

在firebase上可以看到用户weizhi位置:如下图(公司app)

同时你也可以使用FireBase进行LogEvent追踪,可以看到用户的偏好操作行为

具体代码:

public class Firebase {

    private static Firebase instance;
    private Context context;
    private FirebaseAnalytics mFireInstance;

    public Firebase(Context context) {
        this.context = context;
    }

    public static Firebase getInstance(Context context) {
        if (instance == null) {
            instance = new Firebase(context);
        }
        return instance;
    }

    private FirebaseAnalytics getFirebaseAnalytics() {
        if (mFireInstance == null) {
            try {
                mFireInstance = FirebaseAnalytics.getInstance(context);
            } catch (Exception e) {

            }
        }
        return mFireInstance;
    }

    public void logEvent(String category, String action) {
        FirebaseAnalytics firebaseAnalytics = instance.getFirebaseAnalytics();
        Bundle bundle = new Bundle();
        bundle.putString("action", cutStringIfNecessary(action));
        firebaseAnalytics.logEvent(validateKey(category), bundle);
    }

    public void logEvent(String category, String action, String label) {
        FirebaseAnalytics firebaseAnalytics = instance.getFirebaseAnalytics();
        Bundle bundle = new Bundle();
        bundle.putString(validateKey(action), cutStringIfNecessary(label));
        firebaseAnalytics.logEvent(validateKey(category), bundle);
    }

    public void logEvent(String category, String action, long value) {
        FirebaseAnalytics firebaseAnalytics = instance.getFirebaseAnalytics();
        Bundle bundle = new Bundle();
        bundle.putLong(validateKey(action), value);
        firebaseAnalytics.logEvent(validateKey(category), bundle);
    }

    public void logEvent(String category, String action, double value) {
        FirebaseAnalytics firebaseAnalytics = instance.getFirebaseAnalytics();
        Bundle bundle = new Bundle();
        bundle.putDouble(validateKey(action), value);
        firebaseAnalytics.logEvent(validateKey(category), bundle);
    }

    public void logEvent(String category, long value) {
        FirebaseAnalytics firebaseAnalytics = instance.getFirebaseAnalytics();
        Bundle bundle = new Bundle();
        bundle.putLong("value", value);
        firebaseAnalytics.logEvent(validateKey(category), bundle);
    }

    public void logEvent(String category, double value) {
        FirebaseAnalytics firebaseAnalytics = instance.getFirebaseAnalytics();
        Bundle bundle = new Bundle();
        bundle.putDouble("value", value);
        firebaseAnalytics.logEvent(validateKey(category), bundle);
    }

    public void logEvent(String category, Bundle values) {
        FirebaseAnalytics firebaseAnalytics = instance.getFirebaseAnalytics();
        firebaseAnalytics.logEvent(validateKey(category), values);
    }

    private String cutStringIfNecessary(String v) {
        if (!TextUtils.isEmpty(v) && v.length() > 100) {
            return v.substring(0, 100);
        }
        return v;
    }

    private String validateKey(String key) {
        if (!TextUtils.isEmpty(key)) {
            if (!Character.isLetter(key.charAt(0))) {
                key = "K" + key;
            }
            if (key.length() > 40) {
                key = key.substring(0, 40);
            }
            for (int i = 0; i < key.length(); i++) {
                if (!Character.isLetterOrDigit(key.charAt(i)) && key.charAt(i) != '_') {
                    key = key.replace(key.charAt(i), '_');
                }
            }
        }
        return key;
    }

    //设置是否开启数据收集功能
    public void setAnalyticsCollectionEnabled(boolean enabled) {
        instance.getFirebaseAnalytics().setAnalyticsCollectionEnabled(enabled);
    }

    public void setMinimumSessionDuration(long milliseconds) {
        instance.getFirebaseAnalytics().setMinimumSessionDuration(milliseconds);
    }

    public void setUserId(String userId) {
        instance.getFirebaseAnalytics().setUserId(userId);
    }

    public void setSessionTimeoutDuration(long milliseconds) {
        instance.getFirebaseAnalytics().setSessionTimeoutDuration(milliseconds);
    }

    public void setUserProperty(String name, String value) {
        instance.getFirebaseAnalytics().setUserProperty(name, value);
    }



    /*获取Appinsranceid 参数*/
    public void getAppInstanceId(final getAppInstanceIdListener appInstanceIdListener) {
        instance.getFirebaseAnalytics().getAppInstanceId().addOnCompleteListener(new OnCompleteListener() {
            @Override
            public void onComplete(@NonNull Tasktask) {
                if (appInstanceIdListener != null) {
                    try {
                        appInstanceIdListener.setAppInstanceId(task.getResult());
                    } catch (RuntimeExecutionException e) {
                        appInstanceIdListener.setAppInstanceId("");
                    }

                }

            }
        });
    }

    public interface getAppInstanceIdListener {
        void setAppInstanceId(String appInstanceId);
    }

 在需要的时候,直接调用:Firebase.getInstance(getApplicationContext()).logEvent("xxx", "xxx");

使用Firebase进行推送。

首先需要再Firebase后台添加一个应用,然后下载Google-service.json文件,添加到应用中。如图

最后一步,运行项目,就可以看到firebase的统计了。

FireBase云推送是完全免费的,它的配置信息如下图所示:

其中打?是可选项。 值得注意的是下图:

自定义的数据是key-value   。 这两个值配置好后,会在应用用获取,具体实现:

       1.需要使用两个service分别继承  :FirebaseMessagingService和FirebaseInstanceIdService

    FirebaseMessagingService

dataMap就是我们在Firebase云推送上配置的key-value的值。得到值后就可以进行相应的处理了

FirebaseInstanceIdService:

public class MyFirebaseInstanceIDService extends FirebaseInstanceIdService {

    private static final String TAG = "MyFirebaseIIDService";

    @Override
    public void onCreate() {
        super.onCreate();
        FirebaseMessaging.getInstance().subscribeToTopic("xxx");
    }

    /**
     * Called if InstanceID token is updated. This may occur if the security of
     * the previous token had been compromised. Note that this is called when the InstanceID token
     * is initially generated so this is where you would retrieve the token.
     */
    // [START refresh_token]
    @Override
    public void onTokenRefresh() {
        // Get updated InstanceID token.
        String refreshedToken = FirebaseInstanceId.getInstance().getToken();
        Log.d(TAG, "Refreshed token: " + refreshedToken);

        // If you want to send messages to this application instance or
        // manage this apps subscriptions on the server side, send the
        // Instance ID token to your app server.

        sendRegistrationToServer(refreshedToken);
    }
    // [END refresh_token]

    /**
     * Persist token to third-party servers.
     ** Modify this method to associate the user's FCM InstanceID token with any server-side account
     * maintained by your application.
     *
     * @param token The new token.
     */
    private void sendRegistrationToServer(String token) {
        // TODO: Implement this method to send token to your app server.
        Log.e("id", token);
        Log.e("id===========", token);
    }
}

FirebaseMessaging.getInstance().subscribeToTopic("xxx")  xxx这个值可以自定义,通过这个值可以在后台配置curl命令,然后在自己后台实现实时推送。

好了,关于推送就说到这了。下篇会讲到remoteConfig.谢谢!!

 

标签:category,String,firebaseAnalytics,logEvent,bundle,token,Firebase,-----,推送
来源: https://blog.51cto.com/u_12682483/2833041

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有