admin
2021-08-07 2b53a01ef7275e3bd708529ed64042ff480a9f73
推送移除
60个文件已删除
1个文件已修改
4个文件已添加
7358 ■■■■■ 已修改文件
pom.xml 88 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/huawei/push/android/AndroidNotification.java 735 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/huawei/push/android/BadgeNotification.java 98 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/huawei/push/android/Button.java 121 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/huawei/push/android/ClickAction.java 151 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/huawei/push/android/Color.java 105 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/huawei/push/android/LightSettings.java 101 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/huawei/push/apns/Alert.java 186 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/huawei/push/apns/ApnsHeaders.java 146 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/huawei/push/apns/ApnsHmsOptions.java 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/huawei/push/apns/Aps.java 129 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/huawei/push/examples/SendApnsMessage.java 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/huawei/push/examples/SendConditionMessage.java 105 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/huawei/push/examples/SendDataMessage.java 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/huawei/push/examples/SendInstanceAppMessage.java 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/huawei/push/examples/SendNotifyMessage.java 110 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/huawei/push/examples/SendTestMessage.java 98 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/huawei/push/examples/SendTopicMessage.java 103 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/huawei/push/examples/SendWebpushMessage.java 80 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/huawei/push/exception/HuaweiException.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/huawei/push/exception/HuaweiMesssagingException.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/huawei/push/message/AndroidConfig.java 201 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/huawei/push/message/ApnsConfig.java 127 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/huawei/push/message/Message.java 215 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/huawei/push/message/Notification.java 122 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/huawei/push/message/TokenMessage.java 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/huawei/push/message/TopicMessage.java 96 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/huawei/push/message/WebPushConfig.java 111 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/huawei/push/messaging/HuaweiApp.java 260 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/huawei/push/messaging/HuaweiCredential.java 169 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/huawei/push/messaging/HuaweiMessageClient.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/huawei/push/messaging/HuaweiMessageClientImpl.java 218 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/huawei/push/messaging/HuaweiMessaging.java 182 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/huawei/push/messaging/HuaweiOption.java 111 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/huawei/push/messaging/HuaweiScheduledExecutor.java 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/huawei/push/messaging/HuaweiService.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/huawei/push/messaging/HuaweiThreadManager.java 94 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/huawei/push/messaging/ImplHuaweiTrampolines.java 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/huawei/push/messaging/ThreadManager.java 81 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/huawei/push/messaging/TokenRefresher.java 96 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/huawei/push/model/Importance.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/huawei/push/model/TopicOperation.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/huawei/push/model/Urgency.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/huawei/push/model/Visibility.java 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/huawei/push/reponse/SendResponse.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/huawei/push/reponse/TopicListResponse.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/huawei/push/reponse/TopicSendResponse.java 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/huawei/push/util/CollectionUtils.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/huawei/push/util/IgnoreSSLUtils.java 79 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/huawei/push/util/InitAppUtils.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/huawei/push/util/ResponceCodeProcesser.java 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/huawei/push/util/ValidatorUtils.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/huawei/push/webpush/WebActions.java 84 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/huawei/push/webpush/WebHmsOptions.java 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/huawei/push/webpush/WebNotification.java 273 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/huawei/push/webpush/WebpushHeaders.java 95 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/yeshi/utils/ios/pay/IOSPayVerifyUtil.java 111 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/yeshi/utils/ios/pay/vo/IOSAPPBuyVerifyResult.java 162 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/yeshi/utils/log/KafkaAppender.java 144 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/yeshi/utils/log/KafkaUtil.java 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/yeshi/utils/push/HuaWeiPushUtil.java 165 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/yeshi/utils/push/MeiZuPushUtil.java 109 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/yeshi/utils/push/OppoPushUtil.java 176 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/yeshi/utils/push/VIVOPushUtil.java 202 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/yeshi/utils/push/XiaoMiPushUtil.java 146 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pom.xml
@@ -12,6 +12,7 @@
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <org.springframework-version>4.3.0.RELEASE</org.springframework-version>
        <spring.mongodb.version>1.10.10.RELEASE</spring.mongodb.version>
        <kafka.client.version>0.10.1.1</kafka.client.version>
    </properties>
    <dependencies>
@@ -274,26 +275,6 @@
            <version>${org.springframework-version}</version>
        </dependency>
        <dependency>
            <groupId>vpush</groupId>
            <artifactId>vpush-server-sdk</artifactId>
            <version>2.2</version>
        </dependency>
        <dependency>
            <groupId>opush</groupId>
            <artifactId>opush-server-sdk</artifactId>
            <version>1.0.6</version>
        </dependency>
        <dependency>
            <groupId>mipush</groupId>
            <artifactId>MiPush_SDK_Server_Http</artifactId>
            <version>1.0.11</version>
        </dependency>
        <dependency>
            <groupId>ok-http</groupId>
            <artifactId>okhttp</artifactId>
@@ -304,6 +285,58 @@
            <groupId>okio</groupId>
            <artifactId>okio</artifactId>
            <version>1.17.2</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/ch.qos.logback/logback-core -->
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-core</artifactId>
            <version>1.2.3</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/ch.qos.logback/logback-classic -->
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.2.3</version>
        </dependency>
        <!-- kafka -->
        <dependency>
            <groupId>org.apache.kafka</groupId>
            <artifactId>kafka-clients</artifactId>
            <version>${kafka.client.version}</version>
            <scope>compile</scope>
            <exclusions>
                <exclusion>
                    <artifactId>slf4j-api</artifactId>
                    <groupId>org.slf4j</groupId>
                </exclusion>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.apache.kafka</groupId>
            <artifactId>kafka_2.11</artifactId>
            <version>${kafka.client.version}</version>
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
@@ -351,6 +384,21 @@
                <version>2.5.2</version>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-source-plugin</artifactId>
                <version>2.4</version>
                <executions>
                    <execution>
                        <id>attach-sources</id>
                        <phase>verify</phase><!--  要绑定到的生命周期的阶段 在verify之后,install之前执行下面指定的goal -->
                        <goals>
                            <goal>jar-no-fork</goal><!-- 类似执行mvn source:jar -->
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
        <resources>
src/main/java/com/huawei/push/android/AndroidNotification.java
File was deleted
src/main/java/com/huawei/push/android/BadgeNotification.java
File was deleted
src/main/java/com/huawei/push/android/Button.java
File was deleted
src/main/java/com/huawei/push/android/ClickAction.java
File was deleted
src/main/java/com/huawei/push/android/Color.java
File was deleted
src/main/java/com/huawei/push/android/LightSettings.java
File was deleted
src/main/java/com/huawei/push/apns/Alert.java
File was deleted
src/main/java/com/huawei/push/apns/ApnsHeaders.java
File was deleted
src/main/java/com/huawei/push/apns/ApnsHmsOptions.java
File was deleted
src/main/java/com/huawei/push/apns/Aps.java
File was deleted
src/main/java/com/huawei/push/examples/SendApnsMessage.java
File was deleted
src/main/java/com/huawei/push/examples/SendConditionMessage.java
File was deleted
src/main/java/com/huawei/push/examples/SendDataMessage.java
File was deleted
src/main/java/com/huawei/push/examples/SendInstanceAppMessage.java
File was deleted
src/main/java/com/huawei/push/examples/SendNotifyMessage.java
File was deleted
src/main/java/com/huawei/push/examples/SendTestMessage.java
File was deleted
src/main/java/com/huawei/push/examples/SendTopicMessage.java
File was deleted
src/main/java/com/huawei/push/examples/SendWebpushMessage.java
File was deleted
src/main/java/com/huawei/push/exception/HuaweiException.java
File was deleted
src/main/java/com/huawei/push/exception/HuaweiMesssagingException.java
File was deleted
src/main/java/com/huawei/push/message/AndroidConfig.java
File was deleted
src/main/java/com/huawei/push/message/ApnsConfig.java
File was deleted
src/main/java/com/huawei/push/message/Message.java
File was deleted
src/main/java/com/huawei/push/message/Notification.java
File was deleted
src/main/java/com/huawei/push/message/TokenMessage.java
File was deleted
src/main/java/com/huawei/push/message/TopicMessage.java
File was deleted
src/main/java/com/huawei/push/message/WebPushConfig.java
File was deleted
src/main/java/com/huawei/push/messaging/HuaweiApp.java
File was deleted
src/main/java/com/huawei/push/messaging/HuaweiCredential.java
File was deleted
src/main/java/com/huawei/push/messaging/HuaweiMessageClient.java
File was deleted
src/main/java/com/huawei/push/messaging/HuaweiMessageClientImpl.java
File was deleted
src/main/java/com/huawei/push/messaging/HuaweiMessaging.java
File was deleted
src/main/java/com/huawei/push/messaging/HuaweiOption.java
File was deleted
src/main/java/com/huawei/push/messaging/HuaweiScheduledExecutor.java
File was deleted
src/main/java/com/huawei/push/messaging/HuaweiService.java
File was deleted
src/main/java/com/huawei/push/messaging/HuaweiThreadManager.java
File was deleted
src/main/java/com/huawei/push/messaging/ImplHuaweiTrampolines.java
File was deleted
src/main/java/com/huawei/push/messaging/ThreadManager.java
File was deleted
src/main/java/com/huawei/push/messaging/TokenRefresher.java
File was deleted
src/main/java/com/huawei/push/model/Importance.java
File was deleted
src/main/java/com/huawei/push/model/TopicOperation.java
File was deleted
src/main/java/com/huawei/push/model/Urgency.java
File was deleted
src/main/java/com/huawei/push/model/Visibility.java
File was deleted
src/main/java/com/huawei/push/reponse/SendResponse.java
File was deleted
src/main/java/com/huawei/push/reponse/TopicListResponse.java
File was deleted
src/main/java/com/huawei/push/reponse/TopicSendResponse.java
File was deleted
src/main/java/com/huawei/push/util/CollectionUtils.java
File was deleted
src/main/java/com/huawei/push/util/IgnoreSSLUtils.java
File was deleted
src/main/java/com/huawei/push/util/InitAppUtils.java
File was deleted
src/main/java/com/huawei/push/util/ResponceCodeProcesser.java
File was deleted
src/main/java/com/huawei/push/util/ValidatorUtils.java
File was deleted
src/main/java/com/huawei/push/webpush/WebActions.java
File was deleted
src/main/java/com/huawei/push/webpush/WebHmsOptions.java
File was deleted
src/main/java/com/huawei/push/webpush/WebNotification.java
File was deleted
src/main/java/com/huawei/push/webpush/WebpushHeaders.java
File was deleted
src/main/java/org/yeshi/utils/ios/pay/IOSPayVerifyUtil.java
New file
@@ -0,0 +1,111 @@
package org.yeshi.utils.ios.pay;
import com.google.gson.Gson;
import net.sf.json.JSONObject;
import org.yeshi.utils.HttpUtil;
import org.yeshi.utils.ios.pay.vo.IOSAPPBuyVerifyResult;
import javax.net.ssl.*;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.util.Locale;
public class IOSPayVerifyUtil {
    private static class TrustAnyTrustManager implements X509TrustManager {
        public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
        }
        public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
        }
        public X509Certificate[] getAcceptedIssuers() {
            return new X509Certificate[]{};
        }
    }
    private static class TrustAnyHostnameVerifier implements HostnameVerifier {
        public boolean verify(String hostname, SSLSession session) {
            return true;
        }
    }
    private static final String url_sandbox = "https://sandbox.itunes.apple.com/verifyReceipt";
    private static final String url_verify = "https://buy.itunes.apple.com/verifyReceipt";
    /**
     * 应用内购验证
     *
     * @param receipt
     * @param sandbox
     * @return
     */
    public static IOSAPPBuyVerifyResult buyAppVerify(String receipt, String password, boolean sandbox) throws Exception {
        //环境判断 线上/开发环境用不同的请求链接
        String url = "";
        if (sandbox) {
            url = url_sandbox; //沙盒测试
        } else {
            url = url_verify; //线上测试
        }
        try {
            SSLContext sc = SSLContext.getInstance("SSL");
            sc.init(null, new TrustManager[]{new TrustAnyTrustManager()}, new java.security.SecureRandom());
            URL console = new URL(url);
            HttpsURLConnection conn = (HttpsURLConnection) console.openConnection();
            conn.setSSLSocketFactory(sc.getSocketFactory());
            conn.setHostnameVerifier(new TrustAnyHostnameVerifier());
            conn.setRequestMethod("POST");
            conn.setRequestProperty("Content-Type", "application/json");
            conn.setRequestProperty("Proxy-Connection", "Keep-Alive");
            conn.setDoInput(true);
            conn.setDoOutput(true);
            BufferedOutputStream hurlBufOus = new BufferedOutputStream(conn.getOutputStream());
            JSONObject data = new JSONObject();
            data.put("receipt-data", receipt);
            if (password != null)
                data.put("password", password);
            String str = String.format(Locale.CHINA, data.toString());//拼成固定的格式传给平台
            hurlBufOus.write(str.getBytes());
            hurlBufOus.flush();
            InputStream is = conn.getInputStream();
            BufferedReader reader = new BufferedReader(new InputStreamReader(is));
            String line = null;
            StringBuffer sb = new StringBuffer();
            while ((line = reader.readLine()) != null) {
                sb.append(line);
            }
            System.out.println(sb.toString());
            JSONObject root = JSONObject.fromObject(sb.toString());
            if (root.optInt("status") != 0) {
                throw new Exception("苹果服务器返回的状态出错:" + sb.toString());
            }
            JSONObject receiptNew = root.optJSONObject("receipt");
            Gson gson = new Gson();
            IOSAPPBuyVerifyResult verifyResult = gson.fromJson(receiptNew.toString(), IOSAPPBuyVerifyResult.class);
            return verifyResult;
        } catch (Exception ex) {
            ex.printStackTrace();
            throw new Exception("苹果服务器异常:" + ex.getMessage());
        }
    }
    public static void main(String[] args) {
        String receiptData = "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";
        try {
            IOSAPPBuyVerifyResult result=    buyAppVerify(receiptData, "28ca52e358b94c4eba3de41dfa7dd023", true);
            System.out.println(result);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
src/main/java/org/yeshi/utils/ios/pay/vo/IOSAPPBuyVerifyResult.java
New file
@@ -0,0 +1,162 @@
package org.yeshi.utils.ios.pay.vo;
import com.google.gson.annotations.SerializedName;
import java.util.Date;
import java.util.List;
public class IOSAPPBuyVerifyResult {
    @SerializedName("bundle_id")
    private String bundleId;
    @SerializedName("application_version")
    private String applicationVersion;
    @SerializedName("receipt_creation_date_ms")
    private Long receiptCreationDateMs;
    @SerializedName("receipt_creation_date")
    private Date receiptCreationDate;
    @SerializedName("request_date")
    private Date requestDate;
    @SerializedName("request_date_ms")
    private Long requestDateMs;
    @SerializedName("in_app")
    private List<OrderInfo> inApps;
    public String getBundleId() {
        return bundleId;
    }
    public void setBundleId(String bundleId) {
        this.bundleId = bundleId;
    }
    public String getApplicationVersion() {
        return applicationVersion;
    }
    public void setApplicationVersion(String applicationVersion) {
        this.applicationVersion = applicationVersion;
    }
    public Long getReceiptCreationDateMs() {
        return receiptCreationDateMs;
    }
    public void setReceiptCreationDateMs(Long receiptCreationDateMs) {
        this.receiptCreationDateMs = receiptCreationDateMs;
    }
    public Date getReceiptCreationDate() {
        return receiptCreationDate;
    }
    public void setReceiptCreationDate(Date receiptCreationDate) {
        this.receiptCreationDate = receiptCreationDate;
    }
    public Date getRequestDate() {
        return requestDate;
    }
    public void setRequestDate(Date requestDate) {
        this.requestDate = requestDate;
    }
    public Long getRequestDateMs() {
        return requestDateMs;
    }
    public void setRequestDateMs(Long requestDateMs) {
        this.requestDateMs = requestDateMs;
    }
    public List<OrderInfo> getInApps() {
        return inApps;
    }
    public void setInApps(List<OrderInfo> inApps) {
        this.inApps = inApps;
    }
    public static class OrderInfo {
        private int quantity;//数量
        @SerializedName("product_id")
        private String product_id;//商品编号
        @SerializedName("transaction_id")
        private String transactionId;//订单号
        @SerializedName("original_transaction_id")
        private String originalTransactionId;//原始订单号
        @SerializedName("purchase_date")
        private Date purchaseDate;//付款日期
        @SerializedName("purchase_date_ms")
        private long purchaseDateMs;
        @SerializedName("original_purchase_date")
        private Date originalPurchaseDate;//原始付款日期
        @SerializedName("original_purchase_date_ms")
        private Long originalPurchaseDateMs;
        public int getQuantity() {
            return quantity;
        }
        public void setQuantity(int quantity) {
            this.quantity = quantity;
        }
        public String getProduct_id() {
            return product_id;
        }
        public void setProduct_id(String product_id) {
            this.product_id = product_id;
        }
        public String getTransactionId() {
            return transactionId;
        }
        public void setTransactionId(String transactionId) {
            this.transactionId = transactionId;
        }
        public String getOriginalTransactionId() {
            return originalTransactionId;
        }
        public void setOriginalTransactionId(String originalTransactionId) {
            this.originalTransactionId = originalTransactionId;
        }
        public Date getPurchaseDate() {
            return purchaseDate;
        }
        public void setPurchaseDate(Date purchaseDate) {
            this.purchaseDate = purchaseDate;
        }
        public long getPurchaseDateMs() {
            return purchaseDateMs;
        }
        public void setPurchaseDateMs(long purchaseDateMs) {
            this.purchaseDateMs = purchaseDateMs;
        }
        public Date getOriginalPurchaseDate() {
            return originalPurchaseDate;
        }
        public void setOriginalPurchaseDate(Date originalPurchaseDate) {
            this.originalPurchaseDate = originalPurchaseDate;
        }
        public Long getOriginalPurchaseDateMs() {
            return originalPurchaseDateMs;
        }
        public void setOriginalPurchaseDateMs(Long originalPurchaseDateMs) {
            this.originalPurchaseDateMs = originalPurchaseDateMs;
        }
    }
}
src/main/java/org/yeshi/utils/log/KafkaAppender.java
New file
@@ -0,0 +1,144 @@
package org.yeshi.utils.log;
import ch.qos.logback.classic.spi.ILoggingEvent;
import ch.qos.logback.core.ConsoleAppender;
import org.apache.kafka.clients.producer.Callback;
import org.apache.kafka.clients.producer.Producer;
import org.apache.kafka.clients.producer.ProducerRecord;
import org.apache.kafka.clients.producer.RecordMetadata;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class KafkaAppender extends ConsoleAppender<ILoggingEvent> {
    public static final Logger LOGGER = LoggerFactory.getLogger(KafkaAppender.class);
    private String bootstrapServers;
    private String topic;
    private String batchSize;
    private String lingerMs;
    private String compressionType;
    private String retries;
    private String maxRequestSize;
    private String isSend;
    private Producer<String, String> producer;
    public KafkaAppender(){
    }
    @Override
    public void start() {
        super.start();
        if ("true".equals(this.isSend)) {
            if (producer == null) {
                producer = KafkaUtil.createProducer(this.bootstrapServers, this.batchSize,
                        this.lingerMs, this.compressionType, this.retries, this.maxRequestSize, "", "");
            }
        }
    }
    @Override
    public void stop() {
        super.stop();
        if ("true".equals(this.isSend)) {
            this.producer.close();
        }
        LOGGER.info("Stopping kafkaAppender...");
    }
    @Override
    protected void append(ILoggingEvent eventObject) {
        byte[] byteArray;
        String log;
        // 对日志格式进行解码
        byteArray = this.encoder.encode(eventObject);
        log = new String(byteArray);
        ProducerRecord<String, String> record = new ProducerRecord<>(this.topic, log);
        if (eventObject.getMarker() == null && "true".equals(this.isSend)) {
            //如果需要进行分析日志,可以对record进行数据结构重构下
            producer.send(record, new Callback() {
                @Override
                public void onCompletion(RecordMetadata metadata, Exception exception) {
                    if (exception != null) {
                        LOGGER.error("Send log to kafka failed: [{}]", log);
                    }
                }
            });
        }
    }
    public String getBootstrapServers() {
        return bootstrapServers;
    }
    public void setBootstrapServers(String bootstrapServers) {
        this.bootstrapServers = bootstrapServers;
    }
    public String getTopic() {
        return topic;
    }
    public void setTopic(String topic) {
        this.topic = topic;
    }
    public String getBatchSize() {
        return batchSize;
    }
    public void setBatchSize(String batchSize) {
        this.batchSize = batchSize;
    }
    public String getLingerMs() {
        return lingerMs;
    }
    public void setLingerMs(String lingerMs) {
        this.lingerMs = lingerMs;
    }
    public String getCompressionType() {
        return compressionType;
    }
    public void setCompressionType(String compressionType) {
        this.compressionType = compressionType;
    }
    public String getRetries() {
        return retries;
    }
    public void setRetries(String retries) {
        this.retries = retries;
    }
    public String getMaxRequestSize() {
        return maxRequestSize;
    }
    public void setMaxRequestSize(String maxRequestSize) {
        this.maxRequestSize = maxRequestSize;
    }
    public String getIsSend() {
        return isSend;
    }
    public void setIsSend(String isSend) {
        this.isSend = isSend;
    }
    public Producer<String, String> getProducer() {
        return producer;
    }
    public void setProducer(Producer<String, String> producer) {
        this.producer = producer;
    }
}
src/main/java/org/yeshi/utils/log/KafkaUtil.java
New file
@@ -0,0 +1,66 @@
package org.yeshi.utils.log;
import org.apache.kafka.clients.producer.KafkaProducer;
import org.apache.kafka.clients.producer.Producer;
import org.apache.kafka.clients.producer.ProducerConfig;
import java.util.Properties;
public class KafkaUtil {
    public static Producer<String, String> createProducer(
            String bootstrapServers, String batchSize, String lingerMs,
            String compressionType, String retries, String maxRequestSize, String username, String password) {
        // 当配置项为IS_UNDEFINED时,使用默认值
        if (bootstrapServers == null) {
            bootstrapServers = "kafka地址";
        }
        if (batchSize.contains("IS_UNDEFINED")) {
            batchSize = "50000";
        }
        if (lingerMs.contains("IS_UNDEFINED")) {
            lingerMs = "60000";
        }
        if (retries.contains("IS_UNDEFINED")) {
            retries = "3";
        }
        if (maxRequestSize.contains("IS_UNDEFINED")) {
            maxRequestSize = "5242880";
        }
        Properties properties = new Properties();
        // kafka地址,集群用逗号分隔开
        properties.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapServers);
        // acks取值:
        // 0: kafka不返回确认信息,不保证record是否被收到,因为没有返回所以重试机制不会生效
        // 1: partition leader确认record写入到日志中,但不保证信息是否被正确复制
        // all: leader会等待所有信息被同步后返回确认信息
        properties.put(ProducerConfig.ACKS_CONFIG, "1");
        properties.put(ProducerConfig.RETRIES_CONFIG, Integer.valueOf(retries));
        // 批量发送,当达到batch size最大值触发发送机制(10.0后支持批量发送)
        properties.put(ProducerConfig.BATCH_SIZE_CONFIG, Integer.valueOf(batchSize));
        // 该配置是指在batch.size数量未达到时,指定时间内也会推送数据
        properties.put(ProducerConfig.LINGER_MS_CONFIG, Integer.valueOf(lingerMs));
        // 配置缓存
        properties.put(ProducerConfig.BUFFER_MEMORY_CONFIG, 33554432);
        if (!compressionType.contains("IS_UNDEFINED")) {
            // 指定压缩算法
            properties.put(ProducerConfig.COMPRESSION_TYPE_CONFIG, compressionType);
        }
        // 每个请求的消息大小
        properties.put(ProducerConfig.MAX_REQUEST_SIZE_CONFIG, Integer.valueOf(maxRequestSize));
        properties.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG,
                "org.apache.kafka.common.serialization.StringSerializer");
        properties.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG,
                "org.apache.kafka.common.serialization.StringSerializer");
        if (!"".equals(username)) {
            properties.put("security.protocol", "SASL_PLAINTEXT");
            properties.put("sasl.mechanism", "PLAIN");
            properties.put("sasl.jaas.config",
                    "org.apache.kafka.common.security.scram.ScramLoginModule required username=\"" + "用戶名" + "\" password=\"" + "密碼" + "\";");
        }
        return new KafkaProducer<String, String>(properties);
    }
}
src/main/java/org/yeshi/utils/push/HuaWeiPushUtil.java
File was deleted
src/main/java/org/yeshi/utils/push/MeiZuPushUtil.java
File was deleted
src/main/java/org/yeshi/utils/push/OppoPushUtil.java
File was deleted
src/main/java/org/yeshi/utils/push/VIVOPushUtil.java
File was deleted
src/main/java/org/yeshi/utils/push/XiaoMiPushUtil.java
File was deleted