client_Hale
2018-12-21 1495afa1c2b0d80055988cd5f0e18aeaabdbc10f
UPDATE TAPTAPsdk相关资源提交
10个文件已添加
1138 ■■■■■ 已修改文件
ChannelDiff/Android/904100357/AndroidManifest.xml 268 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ChannelDiff/Android/904100357/libs/app-game_822055139-release.aar 补丁 | 查看 | 原始文档 | blame | 历史
ChannelDiff/Android/904100357/libs/app-game_904100357-release.aar 补丁 | 查看 | 原始文档 | blame | 历史
ChannelDiff/Android/904100357/libs/applog-release.aar 补丁 | 查看 | 原始文档 | blame | 历史
ChannelDiff/Android/904100357/libs/freesdk-release.aar 补丁 | 查看 | 原始文档 | blame | 历史
ChannelDiff/Android/904100357/libs/iapppay_plugin.aar 补丁 | 查看 | 原始文档 | blame | 历史
GradleDiff/904100357/mainTemplate.gradle 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Project/app/src/game_904100357/AndroidManifest.xml 238 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Project/app/src/game_904100357/java/com/secondworld/univeralsdk/FreePlatformUtil.java 155 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Project/app/src/game_904100357/java/com/secondworld/univeralsdk/H2EngineSDK.java 418 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ChannelDiff/Android/904100357/AndroidManifest.xml
New file
@@ -0,0 +1,268 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.secondworld.univeralsdk"
    android:installLocation="auto"
    android:versionCode="1"
    android:versionName="1.1.0" >
    <uses-sdk
        android:minSdkVersion="16"
        android:targetSdkVersion="22" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    <uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="android.permission.GET_TASKS" />
    <uses-permission android:name="android.permission.WRITE_SETTINGS" />
    <uses-permission android:name="android.permission.READ_LOGS" />
    <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
    <permission
        android:name="android.permission.INTERACT_ACROSS_USERS_FULL"
        android:protectionLevel="signature" />
    <!-- Required -->
    <permission android:name="com.ziyouyouxi08.djxxz.permission.JPUSH_MESSAGE" />
    <uses-permission android:name="com.ziyouyouxi08.djxxz.permission.JPUSH_MESSAGE" />
    <uses-permission android:name="android.permission.RECEIVE_USER_PRESENT" />
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
    <application
        android:allowBackup="true"
        android:hardwareAccelerated="false"
        android:icon="@drawable/app_icon"
        android:isGame="true"
        android:label="@string/app_name"
        android:theme="@android:style/Theme.Light.NoTitleBar.Fullscreen" >
        <activity
            android:name="com.secondworld.univeralsdk.MainActivity"
            android:configChanges="mcc|mnc|locale|touchscreen|keyboard|keyboardHidden|navigation|orientation|screenLayout|uiMode|screenSize|smallestScreenSize|fontScale|layoutDirection"
            android:label="@string/app_name"
            android:launchMode="singleTask"
            android:screenOrientation="sensorLandscape" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
                <category android:name="android.intent.category.LEANBACK_LAUNCHER" />
            </intent-filter>
            <meta-data
                android:name="unityplayer.UnityActivity"
                android:value="true" />
            <meta-data
                android:name="unityplayer.SkipPermissionsDialog"
                android:value="true" />
            <meta-data
                android:name="android.vendor.home_indicator"
                android:value="hide" />
            <meta-data
                android:name="android.max_aspect"
                android:value="1075419520.000000" />
            <meta-data
                android:name="com.samsung.android.keepalive.density"
                android:value="true" />
        </activity>
        <!-- 针对7.0以上的api开放的文件权限 -->
        <provider
            android:name="android.support.v4.content.FileProvider"
            android:authorities="com.ziyouyouxi08.djxxz.fileProvider"
            android:exported="false"
            android:grantUriPermissions="true" >
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/file_paths" />
        </provider>
        <meta-data
            android:name="yl_appid"
            android:value="904100357" />
        <meta-data
            android:name="yl_channelid"
            android:value="1000" />
        <meta-data
            android:name="yl_platform_id"
            android:value="1000" />
        <meta-data
            android:name="TrackAppID"
            android:value="${TrackAppID}" />
        <meta-data
            android:name="TrackChannelID"
            android:value="${TrackChannelID}" />
        <!-- 今日头条相关配置 -->
        <meta-data
            android:name="TouTiao_AppName"
            android:value="${TT_AppName}" />
        <meta-data
            android:name="TouTiao_AppID"
            android:value="${TT_AppID}" />
        <meta-data
            android:name="TouTiao_Chanel"
            android:value="${TT_Chanel}" />
        <!-- Required SDK 核心功能 -->
        <!-- 可配置android:process参数将PushService放在其他进程中 -->
        <service
            android:name="cn.jpush.android.service.PushService"
            android:exported="false"
            android:process=":mult" >
            <intent-filter>
                <action android:name="cn.jpush.android.intent.REGISTER" />
                <action android:name="cn.jpush.android.intent.REPORT" />
                <action android:name="cn.jpush.android.intent.PushService" />
                <action android:name="cn.jpush.android.intent.PUSH_TIME" />
            </intent-filter>
        </service>
        <!-- since 3.0.9 Required SDK 核心功能 -->
        <provider
            android:name="cn.jpush.android.service.DataProvider"
            android:authorities="com.ziyouyouxi08.djxxz.DataProvider"
            android:exported="true" />
        <!-- since 1.8.0 option 可选项。用于同一设备中不同应用的JPush服务相互拉起的功能。 -->
        <!-- 若不启用该功能可删除该组件,将不拉起其他应用也不能被其他应用拉起 -->
        <service
            android:name="cn.jpush.android.service.DaemonService"
            android:enabled="true"
            android:exported="true" >
            <intent-filter>
                <action android:name="cn.jpush.android.intent.DaemonService" />
                <category android:name="com.ziyouyouxi08.djxxz" />
            </intent-filter>
        </service>
        <!-- since 3.1.0 Required SDK 核心功能 -->
        <provider
            android:name="cn.jpush.android.service.DownloadProvider"
            android:authorities="com.ziyouyouxi08.djxxz.DownloadProvider"
            android:exported="true" />
        <!-- Required SDK核心功能 -->
        <receiver
            android:name="cn.jpush.android.service.PushReceiver"
            android:enabled="true" >
            <intent-filter android:priority="1000" >
                <action android:name="cn.jpush.android.intent.NOTIFICATION_RECEIVED_PROXY" />
                <category android:name="com.ziyouyouxi08.djxxz" />
            </intent-filter>
            <intent-filter>
                <action android:name="android.intent.action.USER_PRESENT" />
                <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
            </intent-filter>
            <!-- Optional -->
            <intent-filter>
                <action android:name="android.intent.action.PACKAGE_ADDED" />
                <action android:name="android.intent.action.PACKAGE_REMOVED" />
                <data android:scheme="package" />
            </intent-filter>
        </receiver>
        <!-- Required SDK核心功能 -->
        <activity
            android:name="cn.jpush.android.ui.PushActivity"
            android:configChanges="orientation|keyboardHidden"
            android:exported="false"
            android:theme="@android:style/Theme.NoTitleBar" >
            <intent-filter>
                <action android:name="cn.jpush.android.ui.PushActivity" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="com.ziyouyouxi08.djxxz" />
            </intent-filter>
        </activity>
        <!-- SDK核心功能 -->
        <activity
            android:name="cn.jpush.android.ui.PopWinActivity"
            android:configChanges="orientation|keyboardHidden"
            android:exported="false"
            android:theme="@style/MyDialogStyle" >
            <intent-filter>
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="com.ziyouyouxi08.djxxz" />
            </intent-filter>
        </activity>
        <!-- Required SDK核心功能 -->
        <service
            android:name="cn.jpush.android.service.DownloadService"
            android:enabled="true"
            android:exported="false" />
        <!-- Required SDK核心功能 -->
        <receiver android:name="cn.jpush.android.service.AlarmReceiver" />
        <!-- Required since 3.0.7 -->
        <!-- 新的tag/alias接口结果返回需要开发者配置一个自定的广播 -->
        <!-- 该广播需要继承JPush提供的JPushMessageReceiver类, 并如下新增一个 Intent-Filter -->
        <!-- <receiver -->
        <!-- android:name="自定义 Receiver" -->
        <!-- android:enabled="true" > -->
        <!-- <intent-filter> -->
        <!-- <action android:name="cn.jpush.android.intent.RECEIVE_MESSAGE" /> -->
        <!-- <category android:name="您应用的包名" /> -->
        <!-- </intent-filter> -->
        <!-- </receiver> -->
        <!-- &lt;!&ndash; User defined. 用户自定义的广播接收器&ndash;&gt; -->
        <receiver
            android:name="com.secondworld.univeralsdk.JPushReceiver"
            android:enabled="true" >
            <intent-filter>
                <!-- Required 用户注册SDK的intent -->
                <action android:name="cn.jpush.android.intent.REGISTRATION" />
                <!-- Required 用户接收SDK消息的intent -->
                <action android:name="cn.jpush.android.intent.MESSAGE_RECEIVED" />
                <!-- Required 用户接收SDK通知栏信息的intent -->
                <action android:name="cn.jpush.android.intent.NOTIFICATION_RECEIVED" />
                <!-- 接收网络变化 连接/断开 since 1.6.3 -->
                <action android:name="cn.jpush.android.intent.CONNECTION" />
                <category android:name="com.ziyouyouxi08.djxxz" />
            </intent-filter>
        </receiver>
        <!-- Required. For publish channel feature -->
        <!-- JPUSH_CHANNEL 是为了方便开发者统计APK分发渠道。 -->
        <!-- 例如: -->
        <!-- 发到 Google Play 的APK可以设置为 google-play; -->
        <!-- 发到其他市场的 APK 可以设置为 xxx-market。 -->
        <meta-data
            android:name="JPUSH_CHANNEL"
            android:value="developer-default" />
        <!-- Required. AppKey copied from Portal -->
        <meta-data
            android:name="JPUSH_APPKEY"
            android:value="bc1907c74128fdbd85018a83" />
        <meta-data
            android:name="android.max_aspect"
            android:value="1075838976.000000" />
        <meta-data
            android:name="com.samsung.android.keepalive.density"
            android:value="true" /> <!-- <meta-data -->
        <!-- android:name="android.notch_support" -->
        <!-- android:value="true" /> -->
        <meta-data
            android:name="notch.config"
            android:value="none" />
        <meta-data
            android:name="android.vendor.full_screen"
            android:value="true" />
    </application>
</manifest>
ChannelDiff/Android/904100357/libs/app-game_822055139-release.aar
Binary files differ
ChannelDiff/Android/904100357/libs/app-game_904100357-release.aar
Binary files differ
ChannelDiff/Android/904100357/libs/applog-release.aar
Binary files differ
ChannelDiff/Android/904100357/libs/freesdk-release.aar
Binary files differ
ChannelDiff/Android/904100357/libs/iapppay_plugin.aar
Binary files differ
GradleDiff/904100357/mainTemplate.gradle
New file
@@ -0,0 +1,59 @@
// GENERATED BY UNITY. REMOVE THIS COMMENT TO PREVENT OVERWRITING WHEN EXPORTING AGAIN
buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.1.0'
    }
}
allprojects {
   repositories {
      flatDir {
        dirs 'libs'
      }
   }
}
apply plugin: 'com.android.application'
dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
**DEPS**}
android {
    compileSdkVersion **APIVERSION**
    buildToolsVersion '**BUILDTOOLS**'
    defaultConfig {
        targetSdkVersion **TARGETSDKVERSION**
        applicationId '**APPLICATIONID**'
        ndk {
            abiFilters **ABIFILTERS**
        }
    }
    lintOptions {
        abortOnError false
    }
    aaptOptions {
        noCompress '.unity3d', '.ress', '.resource', '.obb'
    }
**SIGN**
    buildTypes {
        debug {
            jniDebuggable true
        }
        release {
            // Set minifyEnabled to true if you want to run ProGuard on your project
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-unity.txt'
            **SIGNCONFIG**
        }
    }
}
Project/app/src/game_904100357/AndroidManifest.xml
New file
@@ -0,0 +1,238 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.secondworld.univeralsdk"
    android:installLocation="auto"
    android:versionCode="1"
    android:versionName="1.1.0">
    <uses-sdk
        android:minSdkVersion="16"
        android:targetSdkVersion="22" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    <uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="android.permission.GET_TASKS" />
    <uses-permission android:name="android.permission.WRITE_SETTINGS" />
    <uses-permission android:name="android.permission.READ_LOGS" />
    <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>
    <permission android:name="android.permission.INTERACT_ACROSS_USERS_FULL" android:protectionLevel="signature"/>
    <!-- Required -->
    <permission android:name="${appId}.permission.JPUSH_MESSAGE" />
    <uses-permission android:name="${appId}.permission.JPUSH_MESSAGE" />
    <uses-permission android:name="android.permission.RECEIVE_USER_PRESENT" />
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
    <application
        android:allowBackup="true"
        android:icon="@drawable/app_icon"
        android:hardwareAccelerated="false"
        android:isGame="true"
        android:label="@string/app_name"
        android:theme="@android:style/Theme.Light.NoTitleBar.Fullscreen">
        <activity
            android:name="com.secondworld.univeralsdk.MainActivity"
            android:configChanges="mcc|mnc|locale|touchscreen|keyboard|keyboardHidden|navigation|orientation|screenLayout|uiMode|screenSize|smallestScreenSize|fontScale|layoutDirection"
            android:label="@string/app_name"
            android:launchMode="singleTask"
            android:screenOrientation="sensorLandscape">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
                <category android:name="android.intent.category.LEANBACK_LAUNCHER" />
            </intent-filter>
            <meta-data
                android:name="unityplayer.UnityActivity"
                android:value="true" />
            <meta-data
                android:name="unityplayer.SkipPermissionsDialog"
                android:value="true" />
        </activity>
        <!-- 针对7.0以上的api开放的文件权限 -->
        <provider
            android:name="android.support.v4.content.FileProvider"
            android:authorities="${appId}.fileProvider"
            android:grantUriPermissions="true"
            android:exported="false">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/file_paths" />
        </provider>
        <meta-data
            android:name="yl_appid"
            android:value="${FreeSDK_AppID}" />
        <meta-data
            android:name="yl_channelid"
            android:value="${FreeSDK_ChanelID}" />
        <meta-data
            android:name="yl_platform_id"
            android:value="${FreeSDK_PlatformID}" />
        <meta-data
            android:name="TrackAppID"
            android:value="${TrackAppID}" />
        <meta-data
            android:name="TrackChannelID"
            android:value="${TrackChannelID}" />
        <!-- 今日头条相关配置 -->
        <meta-data
            android:name="TouTiao_AppName"
            android:value="${TT_AppName}" />
        <meta-data
            android:name="TouTiao_AppID"
            android:value="${TT_AppID}" />
        <meta-data
            android:name="TouTiao_Chanel"
            android:value="${TT_Chanel}" />
        <!-- Required SDK 核心功能-->
        <!-- 可配置android:process参数将PushService放在其他进程中 -->
        <service
            android:name="cn.jpush.android.service.PushService"
            android:exported="false"
            android:process=":mult">
            <intent-filter>
                <action android:name="cn.jpush.android.intent.REGISTER" />
                <action android:name="cn.jpush.android.intent.REPORT" />
                <action android:name="cn.jpush.android.intent.PushService" />
                <action android:name="cn.jpush.android.intent.PUSH_TIME" />
            </intent-filter>
        </service>
        <!-- since 3.0.9 Required SDK 核心功能-->
        <provider
            android:name="cn.jpush.android.service.DataProvider"
            android:authorities="${appId}.DataProvider"
            android:exported="true" />
        <!-- since 1.8.0 option 可选项。用于同一设备中不同应用的JPush服务相互拉起的功能。 -->
        <!-- 若不启用该功能可删除该组件,将不拉起其他应用也不能被其他应用拉起 -->
        <service
            android:name="cn.jpush.android.service.DaemonService"
            android:enabled="true"
            android:exported="true">
            <intent-filter>
                <action android:name="cn.jpush.android.intent.DaemonService" />
                <category android:name="${appId}" />
            </intent-filter>
        </service>
        <!-- since 3.1.0 Required SDK 核心功能-->
        <provider
            android:name="cn.jpush.android.service.DownloadProvider"
            android:authorities="${appId}.DownloadProvider"
            android:exported="true" />
        <!-- Required SDK核心功能-->
        <receiver
            android:name="cn.jpush.android.service.PushReceiver"
            android:enabled="true">
            <intent-filter android:priority="1000">
                <action android:name="cn.jpush.android.intent.NOTIFICATION_RECEIVED_PROXY" />
                <category android:name="${appId}" />
            </intent-filter>
            <intent-filter>
                <action android:name="android.intent.action.USER_PRESENT" />
                <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
            </intent-filter>
            <!-- Optional -->
            <intent-filter>
                <action android:name="android.intent.action.PACKAGE_ADDED" />
                <action android:name="android.intent.action.PACKAGE_REMOVED" />
                <data android:scheme="package" />
            </intent-filter>
        </receiver>
        <!-- Required SDK核心功能-->
        <activity
            android:name="cn.jpush.android.ui.PushActivity"
            android:configChanges="orientation|keyboardHidden"
            android:exported="false"
            android:theme="@android:style/Theme.NoTitleBar">
            <intent-filter>
                <action android:name="cn.jpush.android.ui.PushActivity" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="${appId}" />
            </intent-filter>
        </activity>
        <!-- SDK核心功能-->
        <activity
            android:name="cn.jpush.android.ui.PopWinActivity"
            android:configChanges="orientation|keyboardHidden"
            android:exported="false"
            android:theme="@style/MyDialogStyle">
            <intent-filter>
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="${appId}" />
            </intent-filter>
        </activity>
        <!-- Required SDK核心功能-->
        <service
            android:name="cn.jpush.android.service.DownloadService"
            android:enabled="true"
            android:exported="false"></service>
        <!-- Required SDK核心功能-->
        <receiver android:name="cn.jpush.android.service.AlarmReceiver" />
        <!-- Required since 3.0.7 -->
        <!-- 新的tag/alias接口结果返回需要开发者配置一个自定的广播 -->
        <!-- 该广播需要继承JPush提供的JPushMessageReceiver类, 并如下新增一个 Intent-Filter -->
        <!--<receiver-->
        <!--android:name="自定义 Receiver"-->
        <!--android:enabled="true" >-->
        <!--<intent-filter>-->
        <!--<action android:name="cn.jpush.android.intent.RECEIVE_MESSAGE" />-->
        <!--<category android:name="您应用的包名" />-->
        <!--</intent-filter>-->
        <!--</receiver>-->
        <!--&lt;!&ndash; User defined. 用户自定义的广播接收器&ndash;&gt;-->
        <receiver
            android:name="com.secondworld.univeralsdk.JPushReceiver"
            android:enabled="true">
            <intent-filter>
                <!--Required 用户注册SDK的intent-->
                <action android:name="cn.jpush.android.intent.REGISTRATION" />
                <!--Required 用户接收SDK消息的intent-->
                <action android:name="cn.jpush.android.intent.MESSAGE_RECEIVED" />
                <!--Required 用户接收SDK通知栏信息的intent-->
                <action android:name="cn.jpush.android.intent.NOTIFICATION_RECEIVED" />
                <!-- 接收网络变化 连接/断开 since 1.6.3 -->
                <action android:name="cn.jpush.android.intent.CONNECTION" />
                <category android:name="${appId}" />
            </intent-filter>
        </receiver>
        <!-- Required. For publish channel feature -->
        <!-- JPUSH_CHANNEL 是为了方便开发者统计APK分发渠道。-->
        <!-- 例如: -->
        <!-- 发到 Google Play 的APK可以设置为 google-play; -->
        <!-- 发到其他市场的 APK 可以设置为 xxx-market。 -->
        <meta-data
            android:name="JPUSH_CHANNEL"
            android:value="developer-default" />
        <!-- Required. AppKey copied from Portal -->
        <meta-data
            android:name="JPUSH_APPKEY"
            android:value="${JpushAppKey}" />
    </application>
</manifest>
Project/app/src/game_904100357/java/com/secondworld/univeralsdk/FreePlatformUtil.java
New file
@@ -0,0 +1,155 @@
package com.secondworld.univeralsdk;
import android.app.Activity;
import com.allugame.freesdk.callback.FreeCallback;
import com.allugame.freesdk.callback.FreeCallbackCode;
import com.allugame.freesdk.callback.FreeRegisterCallback;
import com.allugame.freesdk.entities.FreeOrder;
import com.allugame.freesdk.port.FreePlatform;
import com.reyun.tracking.sdk.Tracking;
import com.ss.android.common.applog.TeaAgent;
import com.ss.android.common.lib.EventUtils;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.HashMap;
import java.util.Map;
/**
 * Created by Administrator on 2018/7/18 0018.
 */
public class FreePlatformUtil
{
    private static FreePlatformUtil s_Instance;
    private boolean m_Init = false;
    public boolean payProcessing = false;
    public static FreePlatformUtil getInstace()
    {
        if (s_Instance == null)
        {
            s_Instance = new FreePlatformUtil();
        }
        return s_Instance;
    }
    private Map<String, Object> m_Message = new HashMap<>();
    public void login(final Activity activity)
    {
        FreePlatform.getInstance().login(activity);
    }
    public void logout()
    {
        FreePlatform.getInstance().logout();
    }
    public void switchAccount(final Activity activity)
    {
        FreePlatform.getInstance().switchAccount(activity);
    }
    public void pay(Activity activity, String title, String orderId, float mount, String cpInfo)
    {
        FreeOrder _order = new FreeOrder(title, orderId, mount, cpInfo);
        FreePlatform.getInstance().pay(activity, _order);
    }
    public void init(final Activity activity)
    {
        if (m_Init)
        {
            return;
        }
        FreePlatform.getInstance().init(activity, new FreeCallback()
        {
            @Override
            public void onResult(int i, String s)
            {
                m_Message.clear();
                switch (i)
                {
                    case FreeCallbackCode.INIT_SUCCESS:
                        m_Init = true;
                        m_Message.put("code", CodeA2U.FreePlatformInitOk);
                        UniversalUtil.sendMessageToUnity(m_Message);
                        break;
                    case FreeCallbackCode.INIT_FAILURE:
                        m_Message.put("code", CodeA2U.FreePlatformInitFail);
                        UniversalUtil.sendMessageToUnity(m_Message);
                        break;
                    case FreeCallbackCode.LOGIN_SUCCESS:
                        FreePlatform.getInstance().auth();
                        try
                        {
                            JSONObject _info = new JSONObject(s);
                            m_Message.put("code", CodeA2U.FreePlatformLoginOk);
                            m_Message.put("info", _info);
                            UniversalUtil.sendMessageToUnity(m_Message);
                            Tracking.setLoginSuccessBusiness(_info.getString("account"));
                        } catch (JSONException e)
                        {
                            e.printStackTrace();
                        }
                        break;
                    case FreeCallbackCode.LOGIN_FAILURE:
                        m_Message.put("code", CodeA2U.FreePlatformLoginFail);
                        UniversalUtil.sendMessageToUnity(m_Message);
                        break;
                    case FreeCallbackCode.LOGOUT_SUCCESS:
                        m_Message.put("code", CodeA2U.FreePlatformLogoutOk);
                        UniversalUtil.sendMessageToUnity(m_Message);
                        EventUtils.setLogin("mobile",true);
                        break;
                    case FreeCallbackCode.LOGOUT_FAILURE:
                        m_Message.put("code", CodeA2U.FreePlatformLogoutFail);
                        UniversalUtil.sendMessageToUnity(m_Message);
                        break;
                    case FreeCallbackCode.SWITCH_SUCCESS:
                        m_Message.put("code", CodeA2U.FreePlatformSwitchAccountOk);
                        UniversalUtil.sendMessageToUnity(m_Message);
                        break;
                    case FreeCallbackCode.LOGIN_CANCEL:
                        m_Message.put("code", CodeA2U.FreePlatformLoginCancel);
                        UniversalUtil.sendMessageToUnity(m_Message);
                        break;
                    case FreeCallbackCode.PAY_SUCCESS:
                        m_Message.put("code", CodeA2U.FreePlatformPayOk);
                        UniversalUtil.sendMessageToUnity(m_Message);
                        payProcessing = false;
                        break;
                    case FreeCallbackCode.PAY_FAIL:
                        m_Message.put("code", CodeA2U.FreePlatformPayFail);
                        UniversalUtil.sendMessageToUnity(m_Message);
                        payProcessing = false;
                        break;
                    case FreeCallbackCode.PAY_CANCEL:
                        m_Message.put("code", CodeA2U.FreePlatformPayCancel);
                        UniversalUtil.sendMessageToUnity(m_Message);
                        payProcessing = false;
                        break;
                }
            }
        });
        FreePlatform.getInstance().setRegisterCallback(new FreeRegisterCallback()
        {
            @Override
            public void onResult(boolean b, String account)
            {
                Map<String, Object> _registerMsg = new HashMap<>();
                _registerMsg.put("code", CodeA2U.FreePlatformRegisterOk);
                _registerMsg.put("account", account);
                UniversalUtil.sendMessageToUnity(_registerMsg);
                Tracking.setRegisterWithAccountID(account);
                EventUtils.setRegister("mobile",true);
            }
        });
    }
}
Project/app/src/game_904100357/java/com/secondworld/univeralsdk/H2EngineSDK.java
New file
@@ -0,0 +1,418 @@
package com.secondworld.univeralsdk;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.res.Configuration;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.Settings;
import android.widget.Toast;
import com.allugame.freesdk.port.FreePlatform;
import com.reyun.tracking.sdk.Tracking;
import com.ss.android.common.applog.TeaAgent;
import com.ss.android.common.applog.TeaConfigBuilder;
import com.ss.android.common.lib.EventUtils;
import com.unity3d.player.UnityPlayer;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.File;
import java.util.HashMap;
import java.util.Map;
import cn.jpush.android.api.JPushInterface;
import cn.jpush.android.data.JPushLocalNotification;
public class H2EngineSDK
{
    private static final String TAG = "H2EngineSDK";
    public static void HandleUnityMessage(String json)
    {
        LogUtil.i(TAG, "收到Unity发来的信息: " + json);
        Activity _activity = UnityPlayer.currentActivity;
        try
        {
            JSONObject _json = new JSONObject(json);
            int _code = _json.getInt("code");
            switch (_code)
            {
                case CodeU2A.Init:
                    init(_activity);
                    break;
                case CodeU2A.AssetCopy:
                    FileUtil.copyAssets(_activity);
                    break;
                case CodeU2A.CopyOneAsset:
                    FileUtil.copy(_activity, _json.getString("fileName"));
                    break;
                case CodeU2A.BatteryListenStart:
                    BatteryUtil.getInstance().start(_activity);
                    break;
                case CodeU2A.BatteryListenStop:
                    BatteryUtil.getInstance().stop(_activity);
                    break;
                case CodeU2A.UniqueID:
                    break;
                case CodeU2A.CopyContent:
                    CopyContent(_activity, _json.getString("content"));
                    break;
                case CodeU2A.OpenWebView:
                    WebViewUtil.OpenWebView(_activity, _json.getString("url"));
                    break;
                case CodeU2A.RestartApp:
                    RestartApp(_activity);
                    break;
                case CodeU2A.InstallAPK:
                    InstallApp(_activity, _json.getString("path"));
                    break;
                case CodeU2A.ExteneralStorage:
                    GetExternalStorage();
                    break;
                case CodeU2A.RequestPermission:
                    break;
                case CodeU2A.RequestManifestPermissions:
                    break;
                case CodeU2A.FreePlatformInit:
                    FreePlatformUtil.getInstace().init(_activity);
                    break;
                case CodeU2A.FreePlatformLogin:
                    FreePlatformUtil.getInstace().login(_activity);
                    break;
                case CodeU2A.FreePlatformSwitchAccount:
                    FreePlatformUtil.getInstace().switchAccount(_activity);
                    break;
                case CodeU2A.FreePlatformLogout:
                    FreePlatformUtil.getInstace().logout();
                    break;
                case CodeU2A.FreePlatformPay:
                    FreePlatformUtil.getInstace().pay(_activity,
                                                      _json.getString("title"),
                                                      _json.getString("orderId"),
                                                      (float) _json.getDouble("mount"),
                                                      _json.getString("cpInfo"));
                    FreePlatformUtil.getInstace().payProcessing = true;
                    break;
                case CodeU2A.PayFinished:
                    Tracking.setPayment(_json.getString("orderID"),
                                        _json.getString("payType"),
                                        _json.getString("moneyType"),
                                        (float) _json.getDouble("money"));
                    int _money = (int) (_json.getDouble("money"));
                    EventUtils.setPurchase("",
                                           "",
                                           "",
                                           1,
                                           _json.getString("payType"),
                                           _json.getString("moneyType"),
                                           true,
                                           _money);
                    FreePlatformUtil.getInstace().payProcessing = false;
                    break;
                case CodeU2A.ClientPackage:
                    // 初始化热云
                    Tracking.initWithKeyAndChannelId(_activity,
                                                     UniversalUtil.getMetaString(_activity,
                                                                                 "TrackAppID"),
                                                     _json.getString("clientPkgID"));
                    break;
                case CodeU2A.JPushAddLocalMessage:
                    addLocalNotification(_activity,
                                         _json.getInt("id"),
                                         _json.getString("title"),
                                         _json.getString("content"),
                                         _json.getLong("fireTime"));
                    break;
                case CodeU2A.JPushRemoveLocalMessage:
                    removeNotification(_activity, _json.getInt("id"));
                    break;
            }
        } catch (JSONException e)
        {
            e.printStackTrace();
        }
    }
    // 本地推送
    public static void addLocalNotification(Activity activity, int id, String title, String content,
                                            long fireTime)
    {
        try
        {
            JPushLocalNotification ln = new JPushLocalNotification();
            ln.setBuilderId(0);// 设置样式
            ln.setNotificationId(id);// id
            ln.setTitle(title);// 标题
            ln.setContent(content);// 内容
            ln.setBroadcastTime(fireTime);// 等待时间
            JPushInterface.addLocalNotification(activity, ln);
        } catch (Exception e)
        {
            e.printStackTrace();
        }
    }
    public static void removeNotification(Activity activity, int id)
    {
        JPushInterface.removeLocalNotification(activity, id);
    }
    public static void GetExternalStorage()
    {
        Map<String, Object> _msg = new HashMap<>();
        _msg.put("code", CodeA2U.ExternalStorage);
        _msg.put("path", Environment.getExternalStorageDirectory().getAbsolutePath());
        UniversalUtil.sendMessageToUnity(_msg);
    }
    public static void InstallApp(Activity activity, String path)
    {
        File _file = new File(path);
        if (_file == null)
        {
            LogUtil.i(TAG, "找不到给定地址的apk: " + path);
            return;
        }
        try
        {
            Intent _intent = new Intent(Intent.ACTION_VIEW);
//            if (Build.VERSION.SDK_INT >= 23)
//            {
//                _intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
//                Uri _contentUri = FileProvider.getUriForFile(activity,
//                                                             "com.shandangceshi.snxxz.fileProvider",
//                                                             _file);
//                _intent.setDataAndType(_contentUri, "application/vnd.android.package-archive");
//
//            }
//            else
//            {
            _intent.setDataAndType(Uri.fromFile(_file),
                                   "application/vnd.android.package-archive");
            _intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//            }
            activity.startActivity(_intent);
        } catch (Exception e)
        {
            e.printStackTrace();
            Toast.makeText(activity, "没有找到打开此类文件的程序", Toast.LENGTH_SHORT).show();
        }
    }
    public static void CopyContent(final Activity activity, final String content)
    {
        activity.runOnUiThread(new Runnable()
        {
            @Override
            public void run()
            {
                ClipboardManager _mgr = (ClipboardManager) activity.getSystemService(
                        Context.CLIPBOARD_SERVICE);
                ClipData _data = ClipData.newPlainText("playerId", content);
                _mgr.setPrimaryClip(_data);
            }
        });
    }
    public static void RestartApp(final Activity activity)
    {
        activity.runOnUiThread(new Runnable()
        {
            @Override
            public void run()
            {
                new Thread()
                {
                    public void run()
                    {
                        String _pn = activity.getPackageName();
                        PackageManager _pm = activity.getPackageManager();
                        Intent _l = _pm.getLaunchIntentForPackage(_pn);
                        _l.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                        activity.startActivity(_l);
                        android.os.Process.killProcess(android.os.Process.myPid());
                    }
                }.start();
                activity.finish();
            }
        });
    }
    public static void init(final Activity activity)
    {
        final int _memoryTotal = (int) (UniversalUtil.getMemTotal() / 1024);
        if (_memoryTotal < 1024)
        {
            LogUtil.i(TAG, "检测设备内存不满足运行程序标准");
            AlertDialog.Builder _builder = new AlertDialog.Builder(activity);
            _builder.setIcon(R.drawable.app_icon);
            _builder.setTitle("警告");
            _builder.setMessage("您的手机内存不足,无法正常运行游戏");
            _builder.setPositiveButton("确定", new DialogInterface.OnClickListener()
            {
                @Override
                public void onClick(DialogInterface dialogInterface, int i)
                {
                    android.os.Process.killProcess(android.os.Process.myPid());
                }
            });
            _builder.show();
            return;
        }
        new Thread(new Runnable()
        {
            @Override
            public void run()
            {
                LogUtil.i(TAG, "开始执行初始化");
                GetExternalStorage();
                // ------------------------------- 设备信息 -------------------------------
                Map<String, Object> _msgStruct = new HashMap<>();
                _msgStruct.put("code", CodeA2U.DeviceInfo);
                _msgStruct.put("userAgent", System.getProperty("http.agent"));
                _msgStruct.put("mac", UniqueID.getLocalMac(activity));
                _msgStruct.put("imei", UniqueID.getDeviceId(activity));
                _msgStruct.put("android_id",
                               Settings.System.getString(activity.getContentResolver(),
                                                         Settings.System.ANDROID_ID));
                _msgStruct.put("unique_id", UniqueID.get(activity));
                _msgStruct.put("memoryTotal", _memoryTotal);
                UniversalUtil.sendMessageToUnity(_msgStruct);
                // ------------------------------- 自由SDK -------------------------------
                FreePlatformUtil.getInstace().init(activity);
                // ------------------------------- 极光推送 -------------------------------
                JPushInterface.setDebugMode(true);
                JPushInterface.init(activity);
                // ------------------------------- 今天头条 -----------------------
                TeaAgent.init(TeaConfigBuilder.create(activity)
                                      .setAppName(UniversalUtil.getMetaString(activity,
                                                                              "TouTiao_AppName"))
                                      .setChannel(UniversalUtil.getMetaString(activity,
                                                                              "TouTiao_Chanel"))
                                      .setAid(UniversalUtil.getMetaInt(activity, "TouTiao_AppID"))
                                      .createTeaConfig());
                TeaAgent.setDebug(true);
                final long _waitingTime = System.currentTimeMillis();
                while (true)
                {
                    // 等待获取极光registrationID
                    if (!JPushInterface.getRegistrationID(activity).equals(""))
                    {
                        break;
                    }
                    long _escapeTime = System.currentTimeMillis() - _waitingTime;
                    if (_escapeTime > 3000)
                    {
                        LogUtil.w(TAG, "等待获取极光推送registrationID超时: 3秒");
                        break;
                    }
                }
                _msgStruct.clear();
                _msgStruct.put("code", CodeA2U.PushClientID);
                _msgStruct.put("clientID", JPushInterface.getRegistrationID(activity));
                UniversalUtil.sendMessageToUnity(_msgStruct);
                _msgStruct.clear();
                _msgStruct.put("code", CodeA2U.SdkInitComplete);
                UniversalUtil.sendMessageToUnity(_msgStruct);
                LogUtil.i(TAG, "初始化执行完毕");
            }
        }).start();
    }
    public static void onCreate(Activity activity, Bundle savedInstanceState)
    {
        FreePlatform.getInstance().onCreate();
    }
    public static void onWindowFocusChanged(boolean b)
    {
    }
    public static void onNewIntent(final Activity activity, final Intent intent)
    {
    }
    public static void onActivityResult(int requestCode,
                                        int resultCode,
                                        final Intent data,
                                        final Activity activity)
    {
    }
    public static void onConfigurationChanged(final Configuration newConfig) {}
    public static void onRestart(final Activity activity)
    {
    }
    public static void onStart(final Activity activity)
    {
        FreePlatform.getInstance().onStart();
    }
    public static void onPause(final Activity activity)
    {
        FreePlatform.getInstance().onPause();
        TeaAgent.onPause(activity);
    }
    public static void onResume(final Activity activity)
    {
        FreePlatform.getInstance().onResume();
        TeaAgent.onResume(activity);
        if(FreePlatformUtil.getInstace().payProcessing)
        {
            Map<String, Object> _msgStruct = new HashMap<>();
            _msgStruct.put("code", CodeA2U.FreePlatformPayCancel);
            UniversalUtil.sendMessageToUnity(_msgStruct);
            FreePlatformUtil.getInstace().payProcessing = false;
        }
    }
    public static void onStop(final Activity activity)
    {
        FreePlatform.getInstance().onStop();
    }
    public static void onDestroy(final Activity activity)
    {
        FreePlatform.getInstance().onDestory();
        Tracking.exitSdk();
    }
}