diff --git a/plugin.xml b/plugin.xml
index f463aaf..feb85ad 100644
--- a/plugin.xml
+++ b/plugin.xml
@@ -22,6 +22,7 @@
+
diff --git a/src/ios/ShutoApi.h b/src/ios/ShutoApi.h
new file mode 100644
index 0000000..d93a296
--- /dev/null
+++ b/src/ios/ShutoApi.h
@@ -0,0 +1,24 @@
+#import
+#import
+
+@protocol ShutoApiProtocol
+- (void)fireEvent:(NSString*)type parameters:(NSDictionary*)parameters;
+- (void)fireEventWithCallback:(NSString*)eventName parameters:(NSDictionary*)parameters callback:(void (^)(NSDictionary* result, NSError* error))callback;
+@end
+
+@interface ShutoApi : CDVPlugin
+@property (nonatomic, copy) NSString* eventCallbackId;
+@property (nonatomic, strong) NSDictionary* userInfo;
+@property (nonatomic, strong) NSMutableDictionary* eventCallbacks;
+@property (nonatomic, assign) BOOL isIonicReady;
+
+- (void)close:(CDVInvokedUrlCommand*)command;
+- (void)registerEvent:(CDVInvokedUrlCommand*)command;
+- (void)getUserInfo:(CDVInvokedUrlCommand*)command;
+- (void)setUserInfo:(NSDictionary*)userInfo;
+- (void)navigateToRoute:(NSString*)route parameters:(NSDictionary*)parameters;
+- (void)fireEvent:(NSString*)type parameters:(NSDictionary*)parameters;
+- (void)fireEventWithCallback:(NSString*)eventName parameters:(NSDictionary*)parameters callback:(void (^)(NSDictionary* result, NSError* error))callback;
+- (void)eventCallback:(CDVInvokedUrlCommand*)command;
+- (void)ionicReady:(CDVInvokedUrlCommand*)command;
+@end
diff --git a/src/ios/ShutoApi.m b/src/ios/ShutoApi.m
index 926b8ac..3a77041 100644
--- a/src/ios/ShutoApi.m
+++ b/src/ios/ShutoApi.m
@@ -1,42 +1,13 @@
/********* ShutoApi.m Cordova Plugin Implementation *******/
-#import
-#import
+#import "ShutoApi.h"
#import "SGGC_Log.h"
#import "ShutoEventManager.h"
-@protocol ShutoApiProtocol
-- (void)fireEvent:(NSString*)type parameters:(NSDictionary*)parameters;
-- (void)fireEventWithCallback:(NSString*)eventName parameters:(NSDictionary*)parameters callback:(void (^)(NSDictionary* result, NSError* error))callback;
-@end
-
-@interface ShutoApi : CDVPlugin {
- // 保存事件回调ID
- NSString* _eventCallbackId;
- // 保存用户信息
- NSDictionary* _userInfo;
- // 保存带回调的事件回调ID映射
- NSMutableDictionary* _eventCallbacks;
- // 标识前端是否就绪
- BOOL _isIonicReady;
-}
-
-- (void)close:(CDVInvokedUrlCommand*)command;
-- (void)registerEvent:(CDVInvokedUrlCommand*)command;
-- (void)getUserInfo:(CDVInvokedUrlCommand*)command;
-- (void)setUserInfo:(CDVInvokedUrlCommand*)command;
-- (void)navigateToRoute:(NSString*)route parameters:(NSDictionary*)parameters;
-- (void)fireEvent:(NSString*)type parameters:(NSDictionary*)parameters;
-- (void)fireEventWithCallback:(NSString*)eventName parameters:(NSDictionary*)parameters callback:(void (^)(NSDictionary* result, NSError* error))callback;
-- (void)eventCallback:(CDVInvokedUrlCommand*)command;
-- (void)ionicReady:(CDVInvokedUrlCommand*)command;
-- (BOOL)isIonicReady;
-@end
-
@implementation ShutoApi
- (void)pluginInitialize {
- _eventCallbacks = [[NSMutableDictionary alloc] init];
+ self.eventCallbacks = [[NSMutableDictionary alloc] init];
}
- (void)close:(CDVInvokedUrlCommand*)command
@@ -81,7 +52,7 @@
- (void)registerEvent:(CDVInvokedUrlCommand*)command
{
// 保存事件回调ID,以便后续发送事件
- _eventCallbackId = command.callbackId;
+ self.eventCallbackId = command.callbackId;
// 返回插件结果,但保持回调通道打开
CDVPluginResult* pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
@@ -93,8 +64,8 @@
{
// 返回存储的用户信息
CDVPluginResult* pluginResult;
- if (_userInfo) {
- pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:_userInfo];
+ if (self.userInfo) {
+ pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:self.userInfo];
} else {
// 用户信息为空时返回空对象
pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:nil];
@@ -106,7 +77,7 @@
{
// 设置用户信息
if (userInfo) {
- _userInfo = userInfo;
+ self.userInfo = userInfo;
[SGGC_Log log:@"SGGC_CDVFile" message:(@"ShutoApi: User info set successfully: %@", userInfo)];
} else {
[SGGC_Log log:@"SGGC_CDVFile" message:(@"ShutoApi: Invalid user info provided")];
@@ -127,7 +98,7 @@
// 触发通用事件
- (void)fireEvent:(NSString*)type parameters:(NSDictionary*)parameters {
- if (!_eventCallbackId) {
+ if (!self.eventCallbackId) {
[SGGC_Log log:@"SGGC_CDVFile" message:(@"ShutoApi: No event callback registered")];
return;
}
@@ -144,14 +115,14 @@
// 发送事件到前端
CDVPluginResult* pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:eventData];
[pluginResult setKeepCallbackAsBool:YES];
- [self.commandDelegate sendPluginResult:pluginResult callbackId:_eventCallbackId];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:self.eventCallbackId];
}
// 触发带回调的事件
- (void)fireEventWithCallback:(NSString*)eventName parameters:(NSDictionary*)parameters callback:(void (^)(NSDictionary* result, NSError* error))callback {
[SGGC_Log log:@"SGGC_CDVFile" message:[NSString stringWithFormat:@"ShutoApi: fireEventWithCallback called, eventName=%@, parameters=%@", eventName, parameters]];
- if (!_eventCallbackId) {
+ if (!self.eventCallbackId) {
[SGGC_Log log:@"SGGC_CDVFile" message:@"ShutoApi: No event callback registered"];
if (callback) callback(nil, [NSError errorWithDomain:@"ShutoApi" code:-1 userInfo:@{NSLocalizedDescriptionKey:@"No event callback registered"}]);
return;
@@ -161,8 +132,8 @@
[SGGC_Log log:@"SGGC_CDVFile" message:[NSString stringWithFormat:@"ShutoApi: Generated callbackId=%@", callbackId]];
if (callback) {
- _eventCallbacks[callbackId] = callback;
- [SGGC_Log log:@"SGGC_CDVFile" message:[NSString stringWithFormat:@"ShutoApi: Callback saved, _eventCallbacks count=%lu", (unsigned long)_eventCallbacks.count]];
+ self.eventCallbacks[callbackId] = callback;
+ [SGGC_Log log:@"SGGC_CDVFile" message:[NSString stringWithFormat:@"ShutoApi: Callback saved, eventCallbacks count=%lu", (unsigned long)self.eventCallbacks.count]];
}
NSMutableDictionary* eventData = [NSMutableDictionary dictionary];
@@ -177,7 +148,7 @@
CDVPluginResult* pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:eventData];
[pluginResult setKeepCallbackAsBool:YES];
- [self.commandDelegate sendPluginResult:pluginResult callbackId:_eventCallbackId];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:self.eventCallbackId];
}
// 处理前端回调
@@ -189,9 +160,9 @@
NSString* errorMessage = command.arguments[2];
[SGGC_Log log:@"SGGC_CDVFile" message:[NSString stringWithFormat:@"ShutoApi: callbackId=%@, result=%@, errorMessage=%@", callbackId, result, errorMessage]];
- [SGGC_Log log:@"SGGC_CDVFile" message:[NSString stringWithFormat:@"ShutoApi: _eventCallbacks count=%lu", (unsigned long)_eventCallbacks.count]];
+ [SGGC_Log log:@"SGGC_CDVFile" message:[NSString stringWithFormat:@"ShutoApi: eventCallbacks count=%lu", (unsigned long)self.eventCallbacks.count]];
- void (^callback)(NSDictionary* result, NSError* error) = _eventCallbacks[callbackId];
+ void (^callback)(NSDictionary* result, NSError* error) = self.eventCallbacks[callbackId];
if (callback) {
[SGGC_Log log:@"SGGC_CDVFile" message:[NSString stringWithFormat:@"ShutoApi: Found callback for callbackId=%@", callbackId]];
@@ -203,7 +174,7 @@
callback(result, error);
- [_eventCallbacks removeObjectForKey:callbackId];
+ [self.eventCallbacks removeObjectForKey:callbackId];
[SGGC_Log log:@"SGGC_CDVFile" message:@"ShutoApi: Callback executed and removed"];
} else {
@@ -216,7 +187,7 @@
- (void)ionicReady:(CDVInvokedUrlCommand*)command
{
- _isIonicReady = YES;
+ self.isIonicReady = YES;
[SGGC_Log log:@"SGGC_CDVFile" message:@"ShutoApi: Ionic is ready"];
[[ShutoEventManager sharedInstance] fireEvent:@"ionicReady" data:nil];
@@ -225,9 +196,4 @@
[self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
}
-- (BOOL)isIonicReady
-{
- return _isIonicReady;
-}
-
@end