Compare commits

...

4 Commits

Author SHA1 Message Date
胡宇飞 50c5627ac2 fix: 修复 Notification 授权在 iOS 上自动触发的 BUG。
Signed-off-by: huyufei <yufei.hu@castbox.fm>
2024-07-26 11:53:26 +08:00
胡宇飞 ef547caba9 fix: 优化 NetworkStatus代码
--story=1021014 --user=yufei.hu 【中台】【SDK】用户属性上报添加 Network 属性 https://www.tapd.cn/33527076/s/1159774

Signed-off-by: huyufei <yufei.hu@castbox.fm>
2024-07-26 11:40:43 +08:00
胡宇飞 345b4ac971 update: 用户属性上报添加 Network 属性
--story=1021014 --user=yufei.hu 【中台】【SDK】用户属性上报添加 Network 属性 https://www.tapd.cn/33527076/s/1159710

Signed-off-by: huyufei <yufei.hu@castbox.fm>
2024-07-26 11:08:18 +08:00
胡宇飞 ff5f2df4c4 update: 添加 Debug 模式打点保护
--story=1021118 --user=yufei.hu 【中台】【打点】打点初始化重构,添加日志缓存功能 https://www.tapd.cn/33527076/s/1159705

Signed-off-by: huyufei <yufei.hu@castbox.fm>
2024-07-26 09:21:48 +08:00
36 changed files with 992 additions and 10 deletions

View File

@ -235,7 +235,6 @@ namespace Guru
{ "type", type }
};
if(!string.IsNullOrEmpty(scene)) dict[ParameterItemName] = scene;
LogEvent(EventATTResult, dict);
}
/// <summary>

View File

@ -207,12 +207,12 @@ namespace Guru
private static void SetATTStatus()
{
string status = ATTManager.GetStatus();
GuruAnalytics.SetUserProperty(ParameterATTStatus, status);
GuruAnalytics.Instance.SetUserProperty(ParameterATTStatus, status);
}
private static void SetIDFV()
{
GuruAnalytics.SetIDFV(DeviceIDHelper.IDFV);
GuruAnalytics.Instance.SetIDFV(DeviceIDHelper.IDFV);
}
private static void SetIDFA()
@ -228,7 +228,7 @@ namespace Guru
if (!string.IsNullOrEmpty(IPMConfig.ADJUST_IDFA))
{
GuruAnalytics.SetIDFA(IPMConfig.ADJUST_IDFA);
GuruAnalytics.Instance.SetIDFA(IPMConfig.ADJUST_IDFA);
_hasGotIDFA = true;
}
}

View File

@ -187,14 +187,20 @@ namespace Guru
{
if (!_isInitOnce)
{
throw new Exception($"【SDK] Analytics did not initialized, Call <Analytics.{nameof(InitAnalytics)}()> first!");
throw new Exception($"[{TAG}][SDK] Analytics did not initialized, Call <Analytics.{nameof(InitAnalytics)}()> first!");
}
if (IsDebug && !EnableDebugAnalytics)
{
Debug.LogWarning($"[{TAG}][SDK] --- LogEvent [{eventName}] can not send int Debug mode. Set <InitConfig.EnableDebugAnalytics> with `true`");
return;
}
if (eventSetting == null) eventSetting = DefaultEventSetting;
var dataStr = "";
if (data != null) dataStr = JsonParser.ToJson(data);
Debug.Log($"{TAG} --- [SDK] TrackEvent: {eventName} | priority: {priority} | data:{dataStr} | eventSetting: {eventSetting}");
Debug.Log($"[{TAG}] --- [SDK] TrackEvent: {eventName} | priority: {priority} | data:{dataStr} | eventSetting: {eventSetting}");
try
{

View File

@ -8,14 +8,31 @@ namespace Guru
public static partial class FirebaseUtil
{
private static int _messageRetry = 5;
public static bool? IsInitMessage;
// public static bool? IsInitMessage;
private static bool _isAutoFetchFcmToken = true;
private static bool _isFetchOnce = false;
public static void SetAutoFetchFcmToken(bool value)
{
_isAutoFetchFcmToken = value;
}
public static void InitializeMessage()
{
if (_isAutoFetchFcmToken)
{
StartFetchFcmToken();
}
}
public static void StartFetchFcmToken()
{
if (_isFetchOnce) return;
_isFetchOnce = true;
FirebaseMessaging.TokenReceived += OnTokenReceived;
FirebaseMessaging.MessageReceived += OnMessageReceived;
GetFCMToken();
IsInitMessage = true;
}
private static void GetFCMToken()

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 10f8491dbf6264bc393cb7578397ec7f
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: bc0062a7d36f144beabfdea9e3a8e2c7
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 4725a71a48aec4a5083c37f5ff09a550
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,32 @@
fileFormatVersion: 2
guid: 05a3c5d94488c454ea77722fc8f0a80c
PluginImporter:
externalObjects: {}
serializedVersion: 2
iconMap: {}
executionOrder: {}
defineConstraints: []
isPreloaded: 0
isOverridable: 0
isExplicitlyReferenced: 0
validateReferences: 1
platformData:
- first:
Android: Android
second:
enabled: 1
settings: {}
- first:
Any:
second:
enabled: 0
settings: {}
- first:
Editor: Editor
second:
enabled: 0
settings:
DefaultValueInitialized: true
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,3 @@
-keep class com.facebook.unity.* { *; }
-keepattributes Signature
-keep class com.guru.unity.monitor.** { *; }

View File

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: d0ac28ef06c604f789bb32b31225c157
TextScriptImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: e5d09fde296334b46844a972d0289dcc
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,33 @@
fileFormatVersion: 2
guid: 18c322abb3a1e4d9eaea5e395dab1377
PluginImporter:
externalObjects: {}
serializedVersion: 2
iconMap: {}
executionOrder: {}
defineConstraints: []
isPreloaded: 0
isOverridable: 0
isExplicitlyReferenced: 0
validateReferences: 1
platformData:
- first:
Any:
second:
enabled: 0
settings: {}
- first:
Editor: Editor
second:
enabled: 0
settings:
DefaultValueInitialized: true
- first:
iPhone: iOS
second:
enabled: 1
settings:
AddToEmbeddedBinaries: true
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,337 @@
#if 0
#elif defined(__arm64__) && __arm64__
// Generated by Apple Swift version 5.9.2 (swiftlang-5.9.2.2.56 clang-1500.1.0.2.5)
#ifndef CONNECTIVITY_SWIFT_H
#define CONNECTIVITY_SWIFT_H
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wgcc-compat"
#if !defined(__has_include)
# define __has_include(x) 0
#endif
#if !defined(__has_attribute)
# define __has_attribute(x) 0
#endif
#if !defined(__has_feature)
# define __has_feature(x) 0
#endif
#if !defined(__has_warning)
# define __has_warning(x) 0
#endif
#if __has_include(<swift/objc-prologue.h>)
# include <swift/objc-prologue.h>
#endif
#pragma clang diagnostic ignored "-Wauto-import"
#if defined(__OBJC__)
#include <Foundation/Foundation.h>
#endif
#if defined(__cplusplus)
#include <cstdint>
#include <cstddef>
#include <cstdbool>
#include <cstring>
#include <stdlib.h>
#include <new>
#include <type_traits>
#else
#include <stdint.h>
#include <stddef.h>
#include <stdbool.h>
#include <string.h>
#endif
#if defined(__cplusplus)
#if defined(__arm64e__) && __has_include(<ptrauth.h>)
# include <ptrauth.h>
#else
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wreserved-macro-identifier"
# ifndef __ptrauth_swift_value_witness_function_pointer
# define __ptrauth_swift_value_witness_function_pointer(x)
# endif
# ifndef __ptrauth_swift_class_method_pointer
# define __ptrauth_swift_class_method_pointer(x)
# endif
#pragma clang diagnostic pop
#endif
#endif
#if !defined(SWIFT_TYPEDEFS)
# define SWIFT_TYPEDEFS 1
# if __has_include(<uchar.h>)
# include <uchar.h>
# elif !defined(__cplusplus)
typedef uint_least16_t char16_t;
typedef uint_least32_t char32_t;
# endif
typedef float swift_float2 __attribute__((__ext_vector_type__(2)));
typedef float swift_float3 __attribute__((__ext_vector_type__(3)));
typedef float swift_float4 __attribute__((__ext_vector_type__(4)));
typedef double swift_double2 __attribute__((__ext_vector_type__(2)));
typedef double swift_double3 __attribute__((__ext_vector_type__(3)));
typedef double swift_double4 __attribute__((__ext_vector_type__(4)));
typedef int swift_int2 __attribute__((__ext_vector_type__(2)));
typedef int swift_int3 __attribute__((__ext_vector_type__(3)));
typedef int swift_int4 __attribute__((__ext_vector_type__(4)));
typedef unsigned int swift_uint2 __attribute__((__ext_vector_type__(2)));
typedef unsigned int swift_uint3 __attribute__((__ext_vector_type__(3)));
typedef unsigned int swift_uint4 __attribute__((__ext_vector_type__(4)));
#endif
#if !defined(SWIFT_PASTE)
# define SWIFT_PASTE_HELPER(x, y) x##y
# define SWIFT_PASTE(x, y) SWIFT_PASTE_HELPER(x, y)
#endif
#if !defined(SWIFT_METATYPE)
# define SWIFT_METATYPE(X) Class
#endif
#if !defined(SWIFT_CLASS_PROPERTY)
# if __has_feature(objc_class_property)
# define SWIFT_CLASS_PROPERTY(...) __VA_ARGS__
# else
# define SWIFT_CLASS_PROPERTY(...)
# endif
#endif
#if !defined(SWIFT_RUNTIME_NAME)
# if __has_attribute(objc_runtime_name)
# define SWIFT_RUNTIME_NAME(X) __attribute__((objc_runtime_name(X)))
# else
# define SWIFT_RUNTIME_NAME(X)
# endif
#endif
#if !defined(SWIFT_COMPILE_NAME)
# if __has_attribute(swift_name)
# define SWIFT_COMPILE_NAME(X) __attribute__((swift_name(X)))
# else
# define SWIFT_COMPILE_NAME(X)
# endif
#endif
#if !defined(SWIFT_METHOD_FAMILY)
# if __has_attribute(objc_method_family)
# define SWIFT_METHOD_FAMILY(X) __attribute__((objc_method_family(X)))
# else
# define SWIFT_METHOD_FAMILY(X)
# endif
#endif
#if !defined(SWIFT_NOESCAPE)
# if __has_attribute(noescape)
# define SWIFT_NOESCAPE __attribute__((noescape))
# else
# define SWIFT_NOESCAPE
# endif
#endif
#if !defined(SWIFT_RELEASES_ARGUMENT)
# if __has_attribute(ns_consumed)
# define SWIFT_RELEASES_ARGUMENT __attribute__((ns_consumed))
# else
# define SWIFT_RELEASES_ARGUMENT
# endif
#endif
#if !defined(SWIFT_WARN_UNUSED_RESULT)
# if __has_attribute(warn_unused_result)
# define SWIFT_WARN_UNUSED_RESULT __attribute__((warn_unused_result))
# else
# define SWIFT_WARN_UNUSED_RESULT
# endif
#endif
#if !defined(SWIFT_NORETURN)
# if __has_attribute(noreturn)
# define SWIFT_NORETURN __attribute__((noreturn))
# else
# define SWIFT_NORETURN
# endif
#endif
#if !defined(SWIFT_CLASS_EXTRA)
# define SWIFT_CLASS_EXTRA
#endif
#if !defined(SWIFT_PROTOCOL_EXTRA)
# define SWIFT_PROTOCOL_EXTRA
#endif
#if !defined(SWIFT_ENUM_EXTRA)
# define SWIFT_ENUM_EXTRA
#endif
#if !defined(SWIFT_CLASS)
# if __has_attribute(objc_subclassing_restricted)
# define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) __attribute__((objc_subclassing_restricted)) SWIFT_CLASS_EXTRA
# define SWIFT_CLASS_NAMED(SWIFT_NAME) __attribute__((objc_subclassing_restricted)) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA
# else
# define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA
# define SWIFT_CLASS_NAMED(SWIFT_NAME) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA
# endif
#endif
#if !defined(SWIFT_RESILIENT_CLASS)
# if __has_attribute(objc_class_stub)
# define SWIFT_RESILIENT_CLASS(SWIFT_NAME) SWIFT_CLASS(SWIFT_NAME) __attribute__((objc_class_stub))
# define SWIFT_RESILIENT_CLASS_NAMED(SWIFT_NAME) __attribute__((objc_class_stub)) SWIFT_CLASS_NAMED(SWIFT_NAME)
# else
# define SWIFT_RESILIENT_CLASS(SWIFT_NAME) SWIFT_CLASS(SWIFT_NAME)
# define SWIFT_RESILIENT_CLASS_NAMED(SWIFT_NAME) SWIFT_CLASS_NAMED(SWIFT_NAME)
# endif
#endif
#if !defined(SWIFT_PROTOCOL)
# define SWIFT_PROTOCOL(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_PROTOCOL_EXTRA
# define SWIFT_PROTOCOL_NAMED(SWIFT_NAME) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_PROTOCOL_EXTRA
#endif
#if !defined(SWIFT_EXTENSION)
# define SWIFT_EXTENSION(M) SWIFT_PASTE(M##_Swift_, __LINE__)
#endif
#if !defined(OBJC_DESIGNATED_INITIALIZER)
# if __has_attribute(objc_designated_initializer)
# define OBJC_DESIGNATED_INITIALIZER __attribute__((objc_designated_initializer))
# else
# define OBJC_DESIGNATED_INITIALIZER
# endif
#endif
#if !defined(SWIFT_ENUM_ATTR)
# if __has_attribute(enum_extensibility)
# define SWIFT_ENUM_ATTR(_extensibility) __attribute__((enum_extensibility(_extensibility)))
# else
# define SWIFT_ENUM_ATTR(_extensibility)
# endif
#endif
#if !defined(SWIFT_ENUM)
# define SWIFT_ENUM(_type, _name, _extensibility) enum _name : _type _name; enum SWIFT_ENUM_ATTR(_extensibility) SWIFT_ENUM_EXTRA _name : _type
# if __has_feature(generalized_swift_name)
# define SWIFT_ENUM_NAMED(_type, _name, SWIFT_NAME, _extensibility) enum _name : _type _name SWIFT_COMPILE_NAME(SWIFT_NAME); enum SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_ENUM_ATTR(_extensibility) SWIFT_ENUM_EXTRA _name : _type
# else
# define SWIFT_ENUM_NAMED(_type, _name, SWIFT_NAME, _extensibility) SWIFT_ENUM(_type, _name, _extensibility)
# endif
#endif
#if !defined(SWIFT_UNAVAILABLE)
# define SWIFT_UNAVAILABLE __attribute__((unavailable))
#endif
#if !defined(SWIFT_UNAVAILABLE_MSG)
# define SWIFT_UNAVAILABLE_MSG(msg) __attribute__((unavailable(msg)))
#endif
#if !defined(SWIFT_AVAILABILITY)
# define SWIFT_AVAILABILITY(plat, ...) __attribute__((availability(plat, __VA_ARGS__)))
#endif
#if !defined(SWIFT_WEAK_IMPORT)
# define SWIFT_WEAK_IMPORT __attribute__((weak_import))
#endif
#if !defined(SWIFT_DEPRECATED)
# define SWIFT_DEPRECATED __attribute__((deprecated))
#endif
#if !defined(SWIFT_DEPRECATED_MSG)
# define SWIFT_DEPRECATED_MSG(...) __attribute__((deprecated(__VA_ARGS__)))
#endif
#if !defined(SWIFT_DEPRECATED_OBJC)
# if __has_feature(attribute_diagnose_if_objc)
# define SWIFT_DEPRECATED_OBJC(Msg) __attribute__((diagnose_if(1, Msg, "warning")))
# else
# define SWIFT_DEPRECATED_OBJC(Msg) SWIFT_DEPRECATED_MSG(Msg)
# endif
#endif
#if defined(__OBJC__)
#if !defined(IBSegueAction)
# define IBSegueAction
#endif
#endif
#if !defined(SWIFT_EXTERN)
# if defined(__cplusplus)
# define SWIFT_EXTERN extern "C"
# else
# define SWIFT_EXTERN extern
# endif
#endif
#if !defined(SWIFT_CALL)
# define SWIFT_CALL __attribute__((swiftcall))
#endif
#if !defined(SWIFT_INDIRECT_RESULT)
# define SWIFT_INDIRECT_RESULT __attribute__((swift_indirect_result))
#endif
#if !defined(SWIFT_CONTEXT)
# define SWIFT_CONTEXT __attribute__((swift_context))
#endif
#if !defined(SWIFT_ERROR_RESULT)
# define SWIFT_ERROR_RESULT __attribute__((swift_error_result))
#endif
#if defined(__cplusplus)
# define SWIFT_NOEXCEPT noexcept
#else
# define SWIFT_NOEXCEPT
#endif
#if !defined(SWIFT_C_INLINE_THUNK)
# if __has_attribute(always_inline)
# if __has_attribute(nodebug)
# define SWIFT_C_INLINE_THUNK inline __attribute__((always_inline)) __attribute__((nodebug))
# else
# define SWIFT_C_INLINE_THUNK inline __attribute__((always_inline))
# endif
# else
# define SWIFT_C_INLINE_THUNK inline
# endif
#endif
#if defined(_WIN32)
#if !defined(SWIFT_IMPORT_STDLIB_SYMBOL)
# define SWIFT_IMPORT_STDLIB_SYMBOL __declspec(dllimport)
#endif
#else
#if !defined(SWIFT_IMPORT_STDLIB_SYMBOL)
# define SWIFT_IMPORT_STDLIB_SYMBOL
#endif
#endif
#if defined(__OBJC__)
#if __has_feature(objc_modules)
#if __has_warning("-Watimport-in-framework-header")
#pragma clang diagnostic ignored "-Watimport-in-framework-header"
#endif
@import Foundation;
@import ObjectiveC;
#endif
#endif
#pragma clang diagnostic ignored "-Wproperty-attribute-mismatch"
#pragma clang diagnostic ignored "-Wduplicate-method-arg"
#if __has_warning("-Wpragma-clang-attribute")
# pragma clang diagnostic ignored "-Wpragma-clang-attribute"
#endif
#pragma clang diagnostic ignored "-Wunknown-pragmas"
#pragma clang diagnostic ignored "-Wnullability"
#pragma clang diagnostic ignored "-Wdollar-in-identifier-extension"
#if __has_attribute(external_source_symbol)
# pragma push_macro("any")
# undef any
# pragma clang attribute push(__attribute__((external_source_symbol(language="Swift", defined_in="Connectivity",generated_declaration))), apply_to=any(function,enum,objc_interface,objc_category,objc_protocol))
# pragma pop_macro("any")
#endif
#if defined(__OBJC__)
@class NSString;
SWIFT_CLASS("_TtC12Connectivity12Connectivity")
@interface Connectivity : NSObject
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, strong) Connectivity * _Nonnull shared;)
+ (Connectivity * _Nonnull)shared SWIFT_WARN_UNUSED_RESULT;
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, copy) NSString * _Nonnull CONNECTIVITY_NONE;)
+ (NSString * _Nonnull)CONNECTIVITY_NONE SWIFT_WARN_UNUSED_RESULT;
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, copy) NSString * _Nonnull CONNECTIVITY_WIFI;)
+ (NSString * _Nonnull)CONNECTIVITY_WIFI SWIFT_WARN_UNUSED_RESULT;
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, copy) NSString * _Nonnull CONNECTIVITY_MOBILE;)
+ (NSString * _Nonnull)CONNECTIVITY_MOBILE SWIFT_WARN_UNUSED_RESULT;
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, copy) NSString * _Nonnull CONNECTIVITY_ETHERNET;)
+ (NSString * _Nonnull)CONNECTIVITY_ETHERNET SWIFT_WARN_UNUSED_RESULT;
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, copy) NSString * _Nonnull CONNECTIVITY_VPN;)
+ (NSString * _Nonnull)CONNECTIVITY_VPN SWIFT_WARN_UNUSED_RESULT;
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, copy) NSString * _Nonnull CONNECTIVITY_OTHER;)
+ (NSString * _Nonnull)CONNECTIVITY_OTHER SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
- (void)initializeWithCompletion:(void (^ _Nonnull)(BOOL))completion;
- (NSArray<NSString *> * _Nonnull)checkConnectionType SWIFT_WARN_UNUSED_RESULT;
@end
#endif
#if __has_attribute(external_source_symbol)
# pragma clang attribute pop
#endif
#if defined(__cplusplus)
#endif
#pragma clang diagnostic pop
#endif
#else
#error unsupported Swift architecture
#endif

View File

@ -0,0 +1,9 @@
{
"ABIRoot": {
"kind": "Root",
"name": "TopLevel",
"printedName": "TopLevel",
"json_format_version": 8
},
"ConstValues": []
}

View File

@ -0,0 +1,4 @@
framework module Connectivity {
header "Connectivity-Swift.h"
requires objc
}

View File

@ -0,0 +1,168 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>files</key>
<dict>
<key>Headers/Connectivity-Swift.h</key>
<data>
yQkPWwZ2klcFBQT3c4PI/gTVVAE=
</data>
<key>Info.plist</key>
<data>
n4FM+14bzgCqiae7BEnOfj78dFA=
</data>
<key>Modules/Connectivity.swiftmodule/Project/arm64-apple-ios.swiftsourceinfo</key>
<data>
KGmpTymRqrX9y4GV/j+eFuhhTYM=
</data>
<key>Modules/Connectivity.swiftmodule/arm64-apple-ios.abi.json</key>
<data>
FSPnLbho3G+LL9smI3XgVOqBIQ4=
</data>
<key>Modules/Connectivity.swiftmodule/arm64-apple-ios.swiftdoc</key>
<data>
NaKg9acNtBzWngYfwx3Nt50tA5o=
</data>
<key>Modules/Connectivity.swiftmodule/arm64-apple-ios.swiftmodule</key>
<data>
TBHp8ndBz6+t9eK5i+Q7XONqD+w=
</data>
<key>Modules/module.modulemap</key>
<data>
JQ0IhYrWi46ysbcXxnNfARgJPro=
</data>
</dict>
<key>files2</key>
<dict>
<key>Headers/Connectivity-Swift.h</key>
<dict>
<key>hash2</key>
<data>
HIhSgITt+HNjHvu2O1pDvyjgx9HdyI801+Q9Bn92Suc=
</data>
</dict>
<key>Modules/Connectivity.swiftmodule/Project/arm64-apple-ios.swiftsourceinfo</key>
<dict>
<key>hash2</key>
<data>
HnYY+N0JWfujm6LckQtevFuYEFW4uYx4hcAkaFgCZp0=
</data>
</dict>
<key>Modules/Connectivity.swiftmodule/arm64-apple-ios.abi.json</key>
<dict>
<key>hash2</key>
<data>
KnRdWE4y6t4QM5zi5JDptPdHFgJy1Tku+7GLkZS2aNM=
</data>
</dict>
<key>Modules/Connectivity.swiftmodule/arm64-apple-ios.swiftdoc</key>
<dict>
<key>hash2</key>
<data>
sgsu9CnSXAG3fxoW1HBRLZ9lCTX38BR3y2eik7e37zU=
</data>
</dict>
<key>Modules/Connectivity.swiftmodule/arm64-apple-ios.swiftmodule</key>
<dict>
<key>hash2</key>
<data>
S73u4XvAyezKkKReZVBDl16w7MSeeI6FBXUJ9OirCI4=
</data>
</dict>
<key>Modules/module.modulemap</key>
<dict>
<key>hash2</key>
<data>
07XGBKw7w58ugYy09lbnsq9IhqStrsOHCKCfwm/MrpU=
</data>
</dict>
</dict>
<key>rules</key>
<dict>
<key>^.*</key>
<true/>
<key>^.*\.lproj/</key>
<dict>
<key>optional</key>
<true/>
<key>weight</key>
<real>1000</real>
</dict>
<key>^.*\.lproj/locversion.plist$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>1100</real>
</dict>
<key>^Base\.lproj/</key>
<dict>
<key>weight</key>
<real>1010</real>
</dict>
<key>^version.plist$</key>
<true/>
</dict>
<key>rules2</key>
<dict>
<key>.*\.dSYM($|/)</key>
<dict>
<key>weight</key>
<real>11</real>
</dict>
<key>^(.*/)?\.DS_Store$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>2000</real>
</dict>
<key>^.*</key>
<true/>
<key>^.*\.lproj/</key>
<dict>
<key>optional</key>
<true/>
<key>weight</key>
<real>1000</real>
</dict>
<key>^.*\.lproj/locversion.plist$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>1100</real>
</dict>
<key>^Base\.lproj/</key>
<dict>
<key>weight</key>
<real>1010</real>
</dict>
<key>^Info\.plist$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>20</real>
</dict>
<key>^PkgInfo$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>20</real>
</dict>
<key>^embedded\.provisionprofile$</key>
<dict>
<key>weight</key>
<real>20</real>
</dict>
<key>^version\.plist$</key>
<dict>
<key>weight</key>
<real>20</real>
</dict>
</dict>
</dict>
</plist>

View File

View File

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: a0a25c648675a494eb50f2dd3159ff81
TextScriptImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: d1121778023d64cafad6d7eb947140d0
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,111 @@
namespace Guru.Network
{
using System;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
public class NetworkStatusMonitor
{
private const string Tag = "[NET]";
private const string NETWORK_STATUS_NONE = "none";
private const string NETWORK_STATUS_MOBILE = "mobile";
private const string NETWORK_STATUS_WIFI = "wifi";
private const string NETWORK_STATUS_ETHERNET = "ethernet";
private const string NETWORK_STATUS_VPN = "vpn";
private const string NETWORK_STATUS_TETHER = "tether";
private bool _isReady = false;
private INetworkStatusProxy _proxy;
private INetworkStatusProxy Proxy
{
get
{
if (_proxy == null)
{
#if UNITY_EDITOR
_proxy = new NetworkStatusEditor();
#elif UNITY_ANDROID
_proxy = new NetworkStatusAndroid();
#elif UNITY_IOS
_proxy = new NetworkStatusIOS();
#endif
}
if (_proxy == null)
{
// 如果未实现则报异常
throw new NotImplementedException("Can't find NetworkStatusProxy instance!!");
}
return _proxy;
}
}
private List<string> _statusNameList = new List<string>()
{
NETWORK_STATUS_NONE,
NETWORK_STATUS_ETHERNET,
NETWORK_STATUS_WIFI,
NETWORK_STATUS_MOBILE,
NETWORK_STATUS_VPN,
NETWORK_STATUS_TETHER
};
public void Init(Action<bool> onInitComplete = null)
{
Proxy.Init(success =>
{
_isReady = success;
onInitComplete?.Invoke(success);
});
}
/// <summary>
/// 获取网络状态
/// </summary>
/// <returns></returns>
public string GetNetworkStatus()
{
if (_isReady)
{
var status = Proxy.GetNetworkStatus();
if (status != null && status.Length > 0)
{
string statusName = "";
for (int i = 0; i < _statusNameList.Count; i++)
{
// 根据名称优先级, 先获取到的优先上报
statusName = _statusNameList[i];
if (status.Contains(statusName))
{
Debug.Log($"{Tag} --- GetNetworkStatus : {statusName}");
return statusName;
}
}
}
}
Debug.LogWarning($"{Tag} --- Network Monitor is not ready!");
return NETWORK_STATUS_NONE;
}
// private void OnProxyInitComplete(bool success)
// {
// if (success)
// {
// Debug.Log($"{Tag} --- NetworkStatusMonitor init success");
// }
// else
// {
// Debug.LogError($"{Tag} --- NetworkStatusMonitor init failed");
// }
// }
}
}

View File

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 89389dfafc844651bb8f6a23865edca6
timeCreated: 1721958852

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 1981d1e0510af48ff81cbd4db201318f
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,16 @@
namespace Guru.Network
{
using System;
/// <summary>
/// 网络状态代理
/// </summary>
public interface INetworkStatusProxy
{
void Init(Action<bool> onInitComplete);
string[] GetNetworkStatus();
}
}

View File

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: aeba66b9f9e4413a8475bf5cc363fae1
timeCreated: 1721957685

View File

@ -0,0 +1,55 @@
namespace Guru.Network
{
using System;
using UnityEngine;
public class NetworkStatusAndroid: INetworkStatusProxy
{
private const string Tag = "[NET][AND]";
#if UNITY_ANDROID
private const string CONNECTIVITY_ANDROID_CLASS_NAME = "com.guru.unity.monitor.Connectivity";
private AndroidJavaObject _connectivity;
private bool _isReady = false;
#endif
/// <summary>
/// 初始化
/// </summary>
/// <param name="onInitComplete"></param>
public void Init(Action<bool> onInitComplete)
{
#if UNITY_ANDROID
AndroidJavaObject currentActivity = new AndroidJavaObject("com.unity3d.player.UnityPlayer").GetStatic<AndroidJavaObject>("currentActivity");
_connectivity = new AndroidJavaObject(CONNECTIVITY_ANDROID_CLASS_NAME).CallStatic<AndroidJavaObject>("getInstance");
_isReady = _connectivity.Call<bool>("initialize", currentActivity);
// Debug.LogWarning($"{Tag} --- Network status init result:{_isReady}");
// Debug.LogWarning($"{Tag} --- _connectivity:{_connectivity}");
onInitComplete?.Invoke(_isReady); // 调用初始化回调
#endif
}
/// <summary>
/// 获取网络状态
/// </summary>
/// <returns></returns>
public string[] GetNetworkStatus()
{
#if UNITY_ANDROID
if (!_isReady)
{
Debug.LogError($"{Tag} --- GetNetworkStatus :: initialized failed.");
}
else if(_connectivity != null)
{
return _connectivity.Call<string[]>("checkConnectionType");
}
#endif
return new string[] {"none"};
}
}
}

View File

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 1c5f41b5f3bc4aa2993e263f733deeb0
timeCreated: 1721957773

View File

@ -0,0 +1,50 @@
namespace Guru.Network
{
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using UnityEngine;
public class NetworkStatusEditor:INetworkStatusProxy
{
private const string Tag = "[NET][EDT]";
/// <summary>
/// 初始化
/// </summary>
/// <param name="onInitComplete"></param>
public async void Init(Action<bool> onInitComplete)
{
await Task.Delay(300);
Debug.Log($"{Tag} --- init NetworkStatusEditor success int Editor");
onInitComplete?.Invoke(true);
}
/// <summary>
/// 获取网络状态
/// </summary>
/// <returns></returns>
public string[] GetNetworkStatus()
{
List<string> status = new List<string>(4);
switch (Application.internetReachability)
{
case NetworkReachability.NotReachable:
status.Add("none");
break;
case NetworkReachability.ReachableViaCarrierDataNetwork:
status.Add("mobile");
break;
case NetworkReachability.ReachableViaLocalAreaNetwork:
status.Add("wifi");
break;
}
return status.ToArray();
}
}
}

View File

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 657ecf666aa14a7dacef1160591c8115
timeCreated: 1721958984

View File

@ -0,0 +1,65 @@
namespace Guru.Network
{
using System;
using System.Runtime.InteropServices;
using AOT;
using UnityEngine;
public class NetworkStatusIOS:INetworkStatusProxy
{
public const string Tag = "[NET][iOS]";
#if UNITY_IOS
[DllImport("__Internal")]
private static extern IntPtr checkNetworkConnection();
[DllImport("__Internal")]
private static extern void freeCheckNetworkConnectionResult(IntPtr result);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
private delegate void InitializationCallback(bool success);
[DllImport("__Internal")]
private static extern void initializeConnectivity(InitializationCallback callback);
private static Action<bool> _initCompleteCallback;
[MonoPInvokeCallback(typeof(InitializationCallback))]
private static void OnInitializationComplete(bool success)
{
_isReady = success;
_initCompleteCallback?.Invoke(success);
}
#endif
private static bool _isReady = false;
public void Init(Action<bool> onInitComplete)
{
#if UNITY_IOS
_initCompleteCallback = onInitComplete;
initializeConnectivity(OnInitializationComplete);
#endif
}
public string[] GetNetworkStatus()
{
#if UNITY_IOS
if(!_isReady)
{
Debug.LogError($"{Tag} --- GetNetworkStatus :: initialized failed.");
}
else
{
IntPtr ptr = checkNetworkConnection();
string result = Marshal.PtrToStringAnsi(ptr);
freeCheckNetworkConnectionResult(ptr);
return result.Split(',');
}
#endif
return new string[] {"none"};
}
}
}

View File

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: f51ea25e1ecf41c18d7fcd9951d61aeb
timeCreated: 1721958507