From c74d8648fd7a270cb6bab3765640c1dc3de4d8a8 Mon Sep 17 00:00:00 2001 From: JianMiau Date: Fri, 26 Aug 2022 16:04:07 +0800 Subject: [PATCH] [add] FCM --- .../proj.ios_mac/GoogleService-Info.plist | 34 +++++ .../proj.ios_mac/JMKA-mobile.entitlements | 8 + .../JMKA.xcodeproj/project.pbxproj | 139 ++++++++++++++++-- .../xcshareddata/swiftpm/Package.resolved | 113 ++++++++++++++ .../UserInterfaceState.xcuserstate | Bin 30343 -> 94696 bytes .../xcschemes/xcschememanagement.plist | 23 ++- .../proj.ios_mac/ios/AppController.h | 4 + .../proj.ios_mac/ios/AppController.mm | 92 +++++++++++- .../proj.ios_mac/ios/Firebase_OC.h | 24 +++ .../proj.ios_mac/ios/Firebase_OC.m | 121 +++++++++++++++ 10 files changed, 547 insertions(+), 11 deletions(-) create mode 100755 build-templates/jsb-default/frameworks/runtime-src/proj.ios_mac/GoogleService-Info.plist create mode 100644 build-templates/jsb-default/frameworks/runtime-src/proj.ios_mac/JMKA-mobile.entitlements create mode 100644 build-templates/jsb-default/frameworks/runtime-src/proj.ios_mac/JMKA.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved create mode 100644 build-templates/jsb-default/frameworks/runtime-src/proj.ios_mac/ios/Firebase_OC.h create mode 100644 build-templates/jsb-default/frameworks/runtime-src/proj.ios_mac/ios/Firebase_OC.m diff --git a/build-templates/jsb-default/frameworks/runtime-src/proj.ios_mac/GoogleService-Info.plist b/build-templates/jsb-default/frameworks/runtime-src/proj.ios_mac/GoogleService-Info.plist new file mode 100755 index 0000000..f94c558 --- /dev/null +++ b/build-templates/jsb-default/frameworks/runtime-src/proj.ios_mac/GoogleService-Info.plist @@ -0,0 +1,34 @@ + + + + + CLIENT_ID + 407474781989-oj00t4rdam3scpnaoohm2dii1c7tti5c.apps.googleusercontent.com + REVERSED_CLIENT_ID + com.googleusercontent.apps.407474781989-oj00t4rdam3scpnaoohm2dii1c7tti5c + API_KEY + AIzaSyBwhNhVYqErLAwU5SMmkDiN6NOVrhpykOQ + GCM_SENDER_ID + 407474781989 + PLIST_VERSION + 1 + BUNDLE_ID + org.jianmiau.jmka + PROJECT_ID + jmka-baa31 + STORAGE_BUCKET + jmka-baa31.appspot.com + IS_ADS_ENABLED + + IS_ANALYTICS_ENABLED + + IS_APPINVITE_ENABLED + + IS_GCM_ENABLED + + IS_SIGNIN_ENABLED + + GOOGLE_APP_ID + 1:407474781989:ios:0bcba35c2e54c67a25a4cc + + \ No newline at end of file diff --git a/build-templates/jsb-default/frameworks/runtime-src/proj.ios_mac/JMKA-mobile.entitlements b/build-templates/jsb-default/frameworks/runtime-src/proj.ios_mac/JMKA-mobile.entitlements new file mode 100644 index 0000000..903def2 --- /dev/null +++ b/build-templates/jsb-default/frameworks/runtime-src/proj.ios_mac/JMKA-mobile.entitlements @@ -0,0 +1,8 @@ + + + + + aps-environment + development + + diff --git a/build-templates/jsb-default/frameworks/runtime-src/proj.ios_mac/JMKA.xcodeproj/project.pbxproj b/build-templates/jsb-default/frameworks/runtime-src/proj.ios_mac/JMKA.xcodeproj/project.pbxproj index dc84262..1d0e54a 100755 --- a/build-templates/jsb-default/frameworks/runtime-src/proj.ios_mac/JMKA.xcodeproj/project.pbxproj +++ b/build-templates/jsb-default/frameworks/runtime-src/proj.ios_mac/JMKA.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 46; + objectVersion = 52; objects = { /* Begin PBXBuildFile section */ @@ -81,6 +81,11 @@ FE7A3B0128641588008DDC0D /* Sound_S.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE7A3B0028641588008DDC0D /* Sound_S.swift */; }; FEBFDF542864382300EF0BF8 /* Kirby01.wav in Resources */ = {isa = PBXBuildFile; fileRef = FEBFDF522864382300EF0BF8 /* Kirby01.wav */; }; FEBFDF552864382300EF0BF8 /* Kirby02.wav in Resources */ = {isa = PBXBuildFile; fileRef = FEBFDF532864382300EF0BF8 /* Kirby02.wav */; }; + FEC511AD28B894CF00ED3051 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = FEC511AC28B894CE00ED3051 /* GoogleService-Info.plist */; }; + FEC511B028B8972800ED3051 /* FirebaseAnalytics in Frameworks */ = {isa = PBXBuildFile; productRef = FEC511AF28B8972800ED3051 /* FirebaseAnalytics */; }; + FEC511B228B8972800ED3051 /* FirebaseMessaging in Frameworks */ = {isa = PBXBuildFile; productRef = FEC511B128B8972800ED3051 /* FirebaseMessaging */; }; + FEC511B528B8977400ED3051 /* Firebase_S.swift in Sources */ = {isa = PBXBuildFile; fileRef = FEC511B428B8977400ED3051 /* Firebase_S.swift */; }; + FEC511BA28B8A75000ED3051 /* Firebase_OC.m in Sources */ = {isa = PBXBuildFile; fileRef = FEC511B928B8A75000ED3051 /* Firebase_OC.m */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -196,6 +201,11 @@ FE7A3B0028641588008DDC0D /* Sound_S.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = Sound_S.swift; path = ios/Sound_S.swift; sourceTree = ""; }; FEBFDF522864382300EF0BF8 /* Kirby01.wav */ = {isa = PBXFileReference; lastKnownFileType = audio.wav; path = Kirby01.wav; sourceTree = ""; }; FEBFDF532864382300EF0BF8 /* Kirby02.wav */ = {isa = PBXFileReference; lastKnownFileType = audio.wav; path = Kirby02.wav; sourceTree = ""; }; + FEC511AC28B894CE00ED3051 /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = "GoogleService-Info.plist"; path = "../../../../../build-templates/jsb-default/frameworks/runtime-src/proj.ios_mac/GoogleService-Info.plist"; sourceTree = ""; }; + FEC511B328B8974500ED3051 /* JMKA-mobile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = "JMKA-mobile.entitlements"; sourceTree = ""; }; + FEC511B428B8977400ED3051 /* Firebase_S.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = Firebase_S.swift; path = ios/Firebase_S.swift; sourceTree = ""; }; + FEC511B828B8A75000ED3051 /* Firebase_OC.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Firebase_OC.h; path = ios/Firebase_OC.h; sourceTree = ""; }; + FEC511B928B8A75000ED3051 /* Firebase_OC.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = Firebase_OC.m; path = ios/Firebase_OC.m; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -246,7 +256,9 @@ BA3A85EC1A724AE900924D24 /* Security.framework in Frameworks */, 1A676839180E9C1E0076BC67 /* libcocos2d iOS.a in Frameworks */, D6B061241803AB9F0077942B /* CoreMotion.framework in Frameworks */, + FEC511B228B8972800ED3051 /* FirebaseMessaging in Frameworks */, 1A82F5FB169AC92500C4B13A /* libsqlite3.dylib in Frameworks */, + FEC511B028B8972800ED3051 /* FirebaseAnalytics in Frameworks */, D454520C156E22BD00887EB5 /* libz.dylib in Frameworks */, A92275421517C094001B78AA /* QuartzCore.framework in Frameworks */, A92275441517C094001B78AA /* OpenGLES.framework in Frameworks */, @@ -309,6 +321,7 @@ A92275321517C094001B78AA = { isa = PBXGroup; children = ( + FEC511B328B8974500ED3051 /* JMKA-mobile.entitlements */, FE7A3AFA286413DF008DDC0D /* Sound */, 288D4372225B43BE0075FBAB /* assets */, 1AC6FB34180E9ACB004C840B /* cocos2d_libs.xcodeproj */, @@ -385,6 +398,7 @@ 22CC756321BA527F00FBF2F7 /* service */, 1AFFCD841F7A5DCD00628F2C /* Images.xcassets */, 40CEC424212BDAB0004BCE66 /* LaunchScreen.storyboard */, + FEC511AC28B894CE00ED3051 /* GoogleService-Info.plist */, 1AFFCD831F7A5DCD00628F2C /* LaunchScreenBackground.png */, 509D4AAB17EBB2AB00697056 /* AppController.h */, 509D4AAC17EBB2AB00697056 /* AppController.mm */, @@ -398,6 +412,9 @@ FE7A3B0028641588008DDC0D /* Sound_S.swift */, FE7A3AFF28641588008DDC0D /* JMKA_mobile-Bridging-Header.h */, FE50BD3F28B740C300F0E114 /* TTS_S.swift */, + FEC511B428B8977400ED3051 /* Firebase_S.swift */, + FEC511B828B8A75000ED3051 /* Firebase_OC.h */, + FEC511B928B8A75000ED3051 /* Firebase_OC.m */, ); name = ios; sourceTree = ""; @@ -459,6 +476,10 @@ 1A67682F180E9C110076BC67 /* PBXTargetDependency */, ); name = "JMKA-mobile"; + packageProductDependencies = ( + FEC511AF28B8972800ED3051 /* FirebaseAnalytics */, + FEC511B128B8972800ED3051 /* FirebaseMessaging */, + ); productName = JMKA; productReference = A922753D1517C094001B78AA /* JMKA-mobile.app */; productType = "com.apple.product-type.application"; @@ -488,6 +509,9 @@ "zh-Hans", ); mainGroup = A92275321517C094001B78AA; + packageReferences = ( + FEC511AE28B8972800ED3051 /* XCRemoteSwiftPackageReference "firebase-ios-sdk" */, + ); productRefGroup = A922753E1517C094001B78AA /* Products */; projectDirPath = ""; projectReferences = ( @@ -544,6 +568,7 @@ FEBFDF552864382300EF0BF8 /* Kirby02.wav in Resources */, 1AFFCD871F7A5DCF00628F2C /* LaunchScreenBackground.png in Resources */, 1AE159EC18C9DF3600FCA372 /* project.json in Resources */, + FEC511AD28B894CF00ED3051 /* GoogleService-Info.plist in Resources */, 1AD7E0A818C9DB93004817A6 /* main.js in Resources */, 40CEC429212BDB03004BCE66 /* Localizable.strings in Resources */, 1AFFCD851F7A5DCF00628F2C /* Images.xcassets in Resources */, @@ -570,6 +595,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + FEC511BA28B8A75000ED3051 /* Firebase_OC.m in Sources */, FE7A3B0128641588008DDC0D /* Sound_S.swift in Sources */, 509D4AC917EBB2AB00697056 /* RootViewController.mm in Sources */, D4545227156E28EF00887EB5 /* AppDelegate.cpp in Sources */, @@ -577,6 +603,7 @@ 22CC756521BA528000FBF2F7 /* SDKWrapper.m in Sources */, 509D4AC817EBB2AB00697056 /* main.m in Sources */, 4D3EB2581F8F4A6C007DA644 /* jsb_module_register.cpp in Sources */, + FEC511B528B8977400ED3051 /* Firebase_S.swift in Sources */, 509D4ABC17EBB2AB00697056 /* AppController.mm in Sources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -640,7 +667,13 @@ LIBRARY_SEARCH_PATHS = "$(SRCROOT)/../../cocos2d-x/external/mac/libs"; OTHER_LDFLAGS = ""; SDKROOT = macosx; - USER_HEADER_SEARCH_PATHS = "$(inherited) $(SRCROOT)/../../cocos2d-x/cocos/platform/mac $(SRCROOT)/../../cocos2d-x/external/glfw3/include/mac $(SRCROOT)/../../cocos2d-x/external/mac/include/ $(SRCROOT)/../../cocos2d-x/external/mac/include/spidermonkey"; + USER_HEADER_SEARCH_PATHS = ( + "$(inherited)", + "$(SRCROOT)/../../cocos2d-x/cocos/platform/mac", + "$(SRCROOT)/../../cocos2d-x/external/glfw3/include/mac", + "$(SRCROOT)/../../cocos2d-x/external/mac/include/", + "$(SRCROOT)/../../cocos2d-x/external/mac/include/spidermonkey", + ); }; name = Debug; }; @@ -665,7 +698,13 @@ LIBRARY_SEARCH_PATHS = "$(SRCROOT)/../../cocos2d-x/external/mac/libs"; OTHER_LDFLAGS = ""; SDKROOT = macosx; - USER_HEADER_SEARCH_PATHS = "$(inherited) $(SRCROOT)/../../cocos2d-x/cocos/platform/mac $(SRCROOT)/../../cocos2d-x/external/glfw3/include/mac $(SRCROOT)/../../cocos2d-x/external/mac/include/ $(SRCROOT)/../../cocos2d-x/external/mac/include/spidermonkey"; + USER_HEADER_SEARCH_PATHS = ( + "$(inherited)", + "$(SRCROOT)/../../cocos2d-x/cocos/platform/mac", + "$(SRCROOT)/../../cocos2d-x/external/glfw3/include/mac", + "$(SRCROOT)/../../cocos2d-x/external/mac/include/", + "$(SRCROOT)/../../cocos2d-x/external/mac/include/spidermonkey", + ); }; name = Release; }; @@ -691,7 +730,25 @@ MACOSX_DEPLOYMENT_TARGET = 10.9; ONLY_ACTIVE_ARCH = YES; PRODUCT_NAME = "$(TARGET_NAME)"; - USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../cocos2d-x $(SRCROOT)/../../cocos2d-x/cocos $(SRCROOT)/../../cocos2d-x/cocos/base $(SRCROOT)/../../cocos2d-x/cocos/physics $(SRCROOT)/../../cocos2d-x/cocos/math/kazmath $(SRCROOT)/../../cocos2d-x/cocos/2d $(SRCROOT)/../../cocos2d-x/cocos/gui $(SRCROOT)/../../cocos2d-x/cocos/network $(SRCROOT)/../../cocos2d-x/cocos/audio/include $(SRCROOT)/../../cocos2d-x/cocos/editor-support $(SRCROOT)/../../cocos2d-x/extensions $(SRCROOT)/../../cocos2d-x/external $(SRCROOT)/../../cocos2d-x/external/sources $(SRCROOT)/../../cocos2d-x/external/chipmunk/include/chipmunk $(SRCROOT)/../../cocos2d-x/cocos/scripting/js-bindings/auto $(SRCROOT)/../../cocos2d-x/cocos/scripting/js-bindings/manual $(SRCROOT)/../../cocos2d-x/external/mac/include/v8"; + USER_HEADER_SEARCH_PATHS = ( + "$(SRCROOT)/../../cocos2d-x", + "$(SRCROOT)/../../cocos2d-x/cocos", + "$(SRCROOT)/../../cocos2d-x/cocos/base", + "$(SRCROOT)/../../cocos2d-x/cocos/physics", + "$(SRCROOT)/../../cocos2d-x/cocos/math/kazmath", + "$(SRCROOT)/../../cocos2d-x/cocos/2d", + "$(SRCROOT)/../../cocos2d-x/cocos/gui", + "$(SRCROOT)/../../cocos2d-x/cocos/network", + "$(SRCROOT)/../../cocos2d-x/cocos/audio/include", + "$(SRCROOT)/../../cocos2d-x/cocos/editor-support", + "$(SRCROOT)/../../cocos2d-x/extensions", + "$(SRCROOT)/../../cocos2d-x/external", + "$(SRCROOT)/../../cocos2d-x/external/sources", + "$(SRCROOT)/../../cocos2d-x/external/chipmunk/include/chipmunk", + "$(SRCROOT)/../../cocos2d-x/cocos/scripting/js-bindings/auto", + "$(SRCROOT)/../../cocos2d-x/cocos/scripting/js-bindings/manual", + "$(SRCROOT)/../../cocos2d-x/external/mac/include/v8", + ); }; name = Debug; }; @@ -714,7 +771,25 @@ MACOSX_DEPLOYMENT_TARGET = 10.9; OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1"; PRODUCT_NAME = "$(TARGET_NAME)"; - USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../cocos2d-x $(SRCROOT)/../../cocos2d-x/cocos $(SRCROOT)/../../cocos2d-x/cocos/base $(SRCROOT)/../../cocos2d-x/cocos/physics $(SRCROOT)/../../cocos2d-x/cocos/math/kazmath $(SRCROOT)/../../cocos2d-x/cocos/2d $(SRCROOT)/../../cocos2d-x/cocos/gui $(SRCROOT)/../../cocos2d-x/cocos/network $(SRCROOT)/../../cocos2d-x/cocos/audio/include $(SRCROOT)/../../cocos2d-x/cocos/editor-support $(SRCROOT)/../../cocos2d-x/extensions $(SRCROOT)/../../cocos2d-x/external $(SRCROOT)/../../cocos2d-x/external/sources $(SRCROOT)/../../cocos2d-x/external/chipmunk/include/chipmunk $(SRCROOT)/../../cocos2d-x/cocos/scripting/js-bindings/auto $(SRCROOT)/../../cocos2d-x/cocos/scripting/js-bindings/manual $(SRCROOT)/../../cocos2d-x/external/mac/include/v8"; + USER_HEADER_SEARCH_PATHS = ( + "$(SRCROOT)/../../cocos2d-x", + "$(SRCROOT)/../../cocos2d-x/cocos", + "$(SRCROOT)/../../cocos2d-x/cocos/base", + "$(SRCROOT)/../../cocos2d-x/cocos/physics", + "$(SRCROOT)/../../cocos2d-x/cocos/math/kazmath", + "$(SRCROOT)/../../cocos2d-x/cocos/2d", + "$(SRCROOT)/../../cocos2d-x/cocos/gui", + "$(SRCROOT)/../../cocos2d-x/cocos/network", + "$(SRCROOT)/../../cocos2d-x/cocos/audio/include", + "$(SRCROOT)/../../cocos2d-x/cocos/editor-support", + "$(SRCROOT)/../../cocos2d-x/extensions", + "$(SRCROOT)/../../cocos2d-x/external", + "$(SRCROOT)/../../cocos2d-x/external/sources", + "$(SRCROOT)/../../cocos2d-x/external/chipmunk/include/chipmunk", + "$(SRCROOT)/../../cocos2d-x/cocos/scripting/js-bindings/auto", + "$(SRCROOT)/../../cocos2d-x/cocos/scripting/js-bindings/manual", + "$(SRCROOT)/../../cocos2d-x/external/mac/include/v8", + ); VALIDATE_PRODUCT = YES; }; name = Release; @@ -726,6 +801,7 @@ ALWAYS_SEARCH_USER_PATHS = YES; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = "JMKA-mobile.entitlements"; CODE_SIGN_IDENTITY = "iPhone Developer"; COMPRESS_PNG_FILES = NO; DEVELOPMENT_TEAM = 6L2252GUFG; @@ -742,7 +818,10 @@ HEADER_SEARCH_PATHS = ""; INFOPLIST_FILE = ios/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 12.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); LIBRARY_SEARCH_PATHS = "$(SRCROOT)/../../cocos2d-x/external/ios/libs"; MARKETING_VERSION = 2.0; OTHER_LDFLAGS = ( @@ -755,7 +834,14 @@ SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; - USER_HEADER_SEARCH_PATHS = "$(inherited) $(SRCROOT)/../../cocos2d-x/cocos/platform/ios $(SRCROOT)/../../cocos2d-x/plugin/jsbindings/auto $(SRCROOT)/../../cocos2d-x/plugin/jsbindings/manual $(SRCROOT)/../../cocos2d-x/external/ios/include $(SRCROOT)/../../cocos2d-x/external/ios/include/spidermonkey"; + USER_HEADER_SEARCH_PATHS = ( + "$(inherited)", + "$(SRCROOT)/../../cocos2d-x/cocos/platform/ios", + "$(SRCROOT)/../../cocos2d-x/plugin/jsbindings/auto", + "$(SRCROOT)/../../cocos2d-x/plugin/jsbindings/manual", + "$(SRCROOT)/../../cocos2d-x/external/ios/include", + "$(SRCROOT)/../../cocos2d-x/external/ios/include/spidermonkey", + ); }; name = Debug; }; @@ -766,6 +852,7 @@ ALWAYS_SEARCH_USER_PATHS = YES; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = "JMKA-mobile.entitlements"; CODE_SIGN_IDENTITY = "iPhone Developer"; COMPRESS_PNG_FILES = NO; DEVELOPMENT_TEAM = 6L2252GUFG; @@ -781,7 +868,10 @@ HEADER_SEARCH_PATHS = ""; INFOPLIST_FILE = ios/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 12.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); LIBRARY_SEARCH_PATHS = "$(SRCROOT)/../../cocos2d-x/external/ios/libs"; MARKETING_VERSION = 2.0; OTHER_LDFLAGS = ( @@ -793,7 +883,14 @@ SWIFT_OBJC_BRIDGING_HEADER = "JMKA_mobile-Bridging-Header.h"; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; - USER_HEADER_SEARCH_PATHS = "$(inherited) $(SRCROOT)/../../cocos2d-x/cocos/platform/ios $(SRCROOT)/../../cocos2d-x/plugin/jsbindings/auto $(SRCROOT)/../../cocos2d-x/plugin/jsbindings/manual $(SRCROOT)/../../cocos2d-x/external/ios/include $(SRCROOT)/../../cocos2d-x/external/ios/include/spidermonkey"; + USER_HEADER_SEARCH_PATHS = ( + "$(inherited)", + "$(SRCROOT)/../../cocos2d-x/cocos/platform/ios", + "$(SRCROOT)/../../cocos2d-x/plugin/jsbindings/auto", + "$(SRCROOT)/../../cocos2d-x/plugin/jsbindings/manual", + "$(SRCROOT)/../../cocos2d-x/external/ios/include", + "$(SRCROOT)/../../cocos2d-x/external/ios/include/spidermonkey", + ); }; name = Release; }; @@ -828,6 +925,30 @@ defaultConfigurationName = Release; }; /* End XCConfigurationList section */ + +/* Begin XCRemoteSwiftPackageReference section */ + FEC511AE28B8972800ED3051 /* XCRemoteSwiftPackageReference "firebase-ios-sdk" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/firebase/firebase-ios-sdk"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 9.0.0; + }; + }; +/* End XCRemoteSwiftPackageReference section */ + +/* Begin XCSwiftPackageProductDependency section */ + FEC511AF28B8972800ED3051 /* FirebaseAnalytics */ = { + isa = XCSwiftPackageProductDependency; + package = FEC511AE28B8972800ED3051 /* XCRemoteSwiftPackageReference "firebase-ios-sdk" */; + productName = FirebaseAnalytics; + }; + FEC511B128B8972800ED3051 /* FirebaseMessaging */ = { + isa = XCSwiftPackageProductDependency; + package = FEC511AE28B8972800ED3051 /* XCRemoteSwiftPackageReference "firebase-ios-sdk" */; + productName = FirebaseMessaging; + }; +/* End XCSwiftPackageProductDependency section */ }; rootObject = A92275341517C094001B78AA /* Project object */; } diff --git a/build-templates/jsb-default/frameworks/runtime-src/proj.ios_mac/JMKA.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/build-templates/jsb-default/frameworks/runtime-src/proj.ios_mac/JMKA.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved new file mode 100644 index 0000000..7825fe8 --- /dev/null +++ b/build-templates/jsb-default/frameworks/runtime-src/proj.ios_mac/JMKA.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -0,0 +1,113 @@ +{ + "pins" : [ + { + "identity" : "abseil-cpp-swiftpm", + "kind" : "remoteSourceControl", + "location" : "https://github.com/firebase/abseil-cpp-SwiftPM.git", + "state" : { + "revision" : "583de9bd60f66b40e78d08599cc92036c2e7e4e1", + "version" : "0.20220203.2" + } + }, + { + "identity" : "boringssl-swiftpm", + "kind" : "remoteSourceControl", + "location" : "https://github.com/firebase/boringssl-SwiftPM.git", + "state" : { + "revision" : "dd3eda2b05a3f459fc3073695ad1b28659066eab", + "version" : "0.9.1" + } + }, + { + "identity" : "firebase-ios-sdk", + "kind" : "remoteSourceControl", + "location" : "https://github.com/firebase/firebase-ios-sdk", + "state" : { + "revision" : "7f31a43f8c49bd4a1723bc9fecdfaa4411dd9f36", + "version" : "9.5.0" + } + }, + { + "identity" : "googleappmeasurement", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/GoogleAppMeasurement.git", + "state" : { + "revision" : "f54f60d0164d887e1174fa51ab2efe48a8e9d178", + "version" : "9.3.0" + } + }, + { + "identity" : "googledatatransport", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/GoogleDataTransport.git", + "state" : { + "revision" : "5056b15c5acbb90cd214fe4d6138bdf5a740e5a8", + "version" : "9.2.0" + } + }, + { + "identity" : "googleutilities", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/GoogleUtilities.git", + "state" : { + "revision" : "f4abe56ce62a779e64b525eb133c8fc2a84bbc1f", + "version" : "7.7.1" + } + }, + { + "identity" : "grpc-ios", + "kind" : "remoteSourceControl", + "location" : "https://github.com/grpc/grpc-ios.git", + "state" : { + "revision" : "8440b914756e0d26d4f4d054a1c1581daedfc5b6", + "version" : "1.44.3-grpc" + } + }, + { + "identity" : "gtm-session-fetcher", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/gtm-session-fetcher.git", + "state" : { + "revision" : "19605024d59eaefdb1f6a2cb11ebe75df4421126", + "version" : "2.0.0" + } + }, + { + "identity" : "leveldb", + "kind" : "remoteSourceControl", + "location" : "https://github.com/firebase/leveldb.git", + "state" : { + "revision" : "0706abcc6b0bd9cedfbb015ba840e4a780b5159b", + "version" : "1.22.2" + } + }, + { + "identity" : "nanopb", + "kind" : "remoteSourceControl", + "location" : "https://github.com/firebase/nanopb.git", + "state" : { + "revision" : "819d0a2173aff699fb8c364b6fb906f7cdb1a692", + "version" : "2.30909.0" + } + }, + { + "identity" : "promises", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/promises.git", + "state" : { + "revision" : "3e4e743631e86c8c70dbc6efdc7beaa6e90fd3bb", + "version" : "2.1.1" + } + }, + { + "identity" : "swift-protobuf", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-protobuf.git", + "state" : { + "revision" : "131a3fc8097ef2f30b4170e88cdc234b615b6a29", + "version" : "1.20.0" + } + } + ], + "version" : 2 +} diff --git a/build-templates/jsb-default/frameworks/runtime-src/proj.ios_mac/JMKA.xcodeproj/project.xcworkspace/xcuserdata/jianmiau.xcuserdatad/UserInterfaceState.xcuserstate b/build-templates/jsb-default/frameworks/runtime-src/proj.ios_mac/JMKA.xcodeproj/project.xcworkspace/xcuserdata/jianmiau.xcuserdatad/UserInterfaceState.xcuserstate index 7f68aaeadf59ba63e41d6d7198d58246b7ada0ee..cee44d46bbb3043671a4d6b6d76efbe4b5bd4168 100644 GIT binary patch literal 94696 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 WE78BB{q3*Fj{p1T|NlK4IqBaCad4Xe literal 30343 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.xcscheme_^#shared#^_ orderHint - 2 + 3 JMKA-mobile.xcscheme_^#shared#^_ orderHint 0 + Promises (Playground) 1.xcscheme + + isShown + + orderHint + 5 + + Promises (Playground) 2.xcscheme + + isShown + + orderHint + 6 + + Promises (Playground).xcscheme + + isShown + + orderHint + 4 + diff --git a/build-templates/jsb-default/frameworks/runtime-src/proj.ios_mac/ios/AppController.h b/build-templates/jsb-default/frameworks/runtime-src/proj.ios_mac/ios/AppController.h index c09df20..81a3098 100755 --- a/build-templates/jsb-default/frameworks/runtime-src/proj.ios_mac/ios/AppController.h +++ b/build-templates/jsb-default/frameworks/runtime-src/proj.ios_mac/ios/AppController.h @@ -24,6 +24,8 @@ THE SOFTWARE. ****************************************************************************/ #import +#import +#import @class RootViewController; @@ -32,6 +34,8 @@ } + (void) JSBridge:(NSString *)value1 value2:(NSString *)value2; ++ (NSString*) getIntent; ++ (void) FirebaseGetToken; + (void) TTS_Play:(NSString *) msg; @property(nonatomic, readonly) RootViewController* viewController; diff --git a/build-templates/jsb-default/frameworks/runtime-src/proj.ios_mac/ios/AppController.mm b/build-templates/jsb-default/frameworks/runtime-src/proj.ios_mac/ios/AppController.mm index 64524c7..19af917 100755 --- a/build-templates/jsb-default/frameworks/runtime-src/proj.ios_mac/ios/AppController.mm +++ b/build-templates/jsb-default/frameworks/runtime-src/proj.ios_mac/ios/AppController.mm @@ -29,6 +29,7 @@ #import "AppDelegate.h" #import "RootViewController.h" #import "SDKWrapper.h" +#import "Firebase_OC.h" #import "platform/ios/CCEAGLView-ios.h" #include "cocos/scripting/js-bindings/jswrapper/SeApi.h" #import "JMKA_mobile-Swift.h" @@ -42,7 +43,11 @@ using namespace cocos2d; Application* app = nullptr; Sound_S* Sound = nullptr; TTS_S* TTS = nullptr; +//Firebase_OC* Firebase = nullptr; @synthesize window; +std::string UrlData = "null"; +std::string UrlData_Q = ""; +std::string IsStart = "0"; #pragma mark - #pragma mark Application lifecycle @@ -85,8 +90,10 @@ TTS_S* TTS = nullptr; Sound = [[Sound_S alloc]init]; TTS = [[TTS_S alloc]init]; +// Firebase = [[Firebase_OC alloc]init]; [Sound StartPlay]; + [Firebase_OC application:application didFinishLaunchingWithOptions:launchOptions]; //run the cocos2d-x game scene app->start(); @@ -94,6 +101,53 @@ TTS_S* TTS = nullptr; return YES; } +// With "FirebaseAppDelegateProxyEnabled": NO +- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { + [Firebase_OC application:application didRegisterForRemoteNotificationsWithDeviceToken:deviceToken]; +} + +- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler{ + [Firebase_OC application:application didReceiveRemoteNotification:userInfo fetchCompletionHandler:completionHandler]; +} + +/** + iOS 9.0 之后 +三方唤起本程序后执行的方法 + return YES 表示允许唤起本程序 + */ +- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary *)options{ + NSLog(@"URL scheme:%@", [url scheme]); + //参数 + NSLog(@"URL host:%@", [url host]); +// UIAlertView *alertView=[[UIAlertView alloc] initWithTitle:@"分享" message:[url host] delegate:self cancelButtonTitle:nil otherButtonTitles:@"分享完成", nil]; +// [alertView show]; + + + NSLog(@"openURL"); + NSString *UrlData_url = [url.absoluteString stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; + NSString *UrlData_query = [[url query] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; + NSString *UrlData_host = [url host]; + NSString *UrlData_path = [url path]; + NSString *UrlData_port = [[url port] stringValue]; + NSString *UrlData_scheme = [url scheme]; + + NSString *Msg_UrlData = [NSString stringWithFormat:@"open Url: %@#Query$%@#Host$%@#Path$%@#Port$%@#Scheme$%@", UrlData_url, UrlData_query, UrlData_host, UrlData_path, UrlData_port, UrlData_scheme]; + NSLog(@"Msg_UrlData:'%@'",Msg_UrlData); + UrlData = std::string([Msg_UrlData UTF8String]); + if(UrlData_query) { + UrlData_Q = std::string([UrlData_query UTF8String]); + } + + return YES; +} + +- (void)application:(UIApplication *)application performActionForShortcutItem:(UIApplicationShortcutItem *)shortcutItem completionHandler:(void (^)(BOOL))completionHandler { + + NSLog(@"%@", shortcutItem.type); + NSString *Msg_UrlData = [NSString stringWithFormat:@"Query$%@", [self encodeDictionary:shortcutItem.userInfo]]; + UrlData = std::string([Msg_UrlData UTF8String]); +} + - (void)applicationWillResignActive:(UIApplication *)application { /* Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. @@ -109,6 +163,16 @@ TTS_S* TTS = nullptr; */ app->onResume(); [[SDKWrapper getInstance] applicationDidBecomeActive:application]; + + if(IsStart == "1" && UrlData_Q != "") { + std::string method = "DispatchCallback"; + std::string value = UrlData_Q; + // 呼叫JS的window.JSBridge + std::string jsCallStr = cocos2d::StringUtils::format("JSBridge(\"%s\", \"%s\");", method.c_str(), value.c_str()); + se::Value *ret = new se::Value(); + se::ScriptEngine::getInstance()->evalString(jsCallStr.c_str() , -1 , ret); + UrlData_Q = ""; + } } - (void)applicationDidEnterBackground:(UIApplication *)application { @@ -123,7 +187,7 @@ TTS_S* TTS = nullptr; /* Called as part of transition from the background to the inactive state: here you can undo many of the changes made on entering the background. */ - [[SDKWrapper getInstance] applicationWillEnterForeground:application]; + [[SDKWrapper getInstance] applicationWillEnterForeground:application]; } - (void)applicationWillTerminate:(UIApplication *)application @@ -154,6 +218,32 @@ TTS_S* TTS = nullptr; se::ScriptEngine::getInstance()->evalString(jsCallStr.c_str() , -1 , ret); } ++ (NSString*) getIntent { + if(IsStart == "0") { + IsStart = "1"; + } + std::string jsCallStr = cocos2d::StringUtils::format("cc.log(\"getIntent GO\");"); + se::Value *ret = new se::Value(); + se::ScriptEngine::getInstance()->evalString(jsCallStr.c_str() , -1 , ret); + // NSLog(@"Msg :%@",Msg); + // return @"getIntent OK"; + + return [NSString stringWithUTF8String:UrlData.c_str()]; +} + +#pragma mark- FireBase + ++ (void) FirebaseGetToken { + NSString *fcmToken = [Firebase_OC FcmToken]; + + // 呼叫JS的window.JSBridge + std::string value = std::string([fcmToken UTF8String]); + std::string jsCallStr = cocos2d::StringUtils::format("Firebase_log(\"%s\");", value.c_str()); + se::Value *ret = new se::Value(); + se::ScriptEngine::getInstance()->evalString(jsCallStr.c_str() , -1 , ret); +} + +#pragma mark- TTS + (void) TTS_Play:(NSString *) msg { [TTS playWithMsg:msg]; } diff --git a/build-templates/jsb-default/frameworks/runtime-src/proj.ios_mac/ios/Firebase_OC.h b/build-templates/jsb-default/frameworks/runtime-src/proj.ios_mac/ios/Firebase_OC.h new file mode 100644 index 0000000..39b15e3 --- /dev/null +++ b/build-templates/jsb-default/frameworks/runtime-src/proj.ios_mac/ios/Firebase_OC.h @@ -0,0 +1,24 @@ +// +// Firebase_OC.h +// JMKA-mobile +// +// Created by JianMiau on 2022/8/26. +// + +#import +#import +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface Firebase_OC : NSObject + ++ (NSString*)FcmToken; ++ (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions; ++ (void)application:(UIApplication *)application +didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken; ++ (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler; + +@end + +NS_ASSUME_NONNULL_END diff --git a/build-templates/jsb-default/frameworks/runtime-src/proj.ios_mac/ios/Firebase_OC.m b/build-templates/jsb-default/frameworks/runtime-src/proj.ios_mac/ios/Firebase_OC.m new file mode 100644 index 0000000..d4179a9 --- /dev/null +++ b/build-templates/jsb-default/frameworks/runtime-src/proj.ios_mac/ios/Firebase_OC.m @@ -0,0 +1,121 @@ +// +// Firebase_OC.m +// JMKA-mobile +// +// Created by JianMiau on 2022/8/26. +// + +#import "Firebase_OC.h" +#import "AppController.h" +#import "FirebaseCore/FirebaseCore.h" +#import +#import + +@implementation Firebase_OC + +NSString *fcmtoken = @""; + ++ (NSString*)FcmToken +{ + return fcmtoken; +} + ++ (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { + // Use Firebase library to configure APIs + [FIRApp configure]; + + if ([UNUserNotificationCenter class] != nil) { + // iOS 10 or later + // For iOS 10 display notification (sent via APNS) + [UNUserNotificationCenter currentNotificationCenter].delegate = self; + UNAuthorizationOptions authOptions = UNAuthorizationOptionAlert | UNAuthorizationOptionSound | UNAuthorizationOptionBadge; + [[UNUserNotificationCenter currentNotificationCenter] + requestAuthorizationWithOptions:authOptions + completionHandler:^(BOOL granted, NSError * _Nullable error) { + // ... + }]; + } else { + // iOS 10 notifications aren't available; fall back to iOS 8-9 notifications. + UIUserNotificationType allNotificationTypes = + (UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge); + UIUserNotificationSettings *settings = + [UIUserNotificationSettings settingsForTypes:allNotificationTypes categories:nil]; + [application registerUserNotificationSettings:settings]; + } + + [application registerForRemoteNotifications]; + [FIRMessaging messaging].delegate = self; + + return YES; +} + + ++ (void)messaging:(FIRMessaging *)messaging didReceiveRegistrationToken:(NSString *)fcmToken { + NSLog(@"FCM registration token: %@", fcmToken); + fcmtoken = fcmToken; + // Notify about received token. + NSDictionary *dataDict = [NSDictionary dictionaryWithObject:fcmToken forKey:@"token"]; + [[NSNotificationCenter defaultCenter] postNotificationName: + @"FCMToken" object:nil userInfo:dataDict]; + // TODO: If necessary send token to application server. + // Note: This callback is fired at each app startup and whenever a new token is generated. +} + +// With "FirebaseAppDelegateProxyEnabled": NO ++ (void)application:(UIApplication *)application + didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { + NSLog(@"FCM deviceToken: %@", deviceToken); + [FIRMessaging messaging].APNSToken = deviceToken; +} + +// 遠端通知 +// Receive displayed notifications for iOS 10 devices. +// Handle incoming notification messages while app is in the foreground. ++ (void)userNotificationCenter:(UNUserNotificationCenter *)center + willPresentNotification:(UNNotification *)notification + withCompletionHandler:(void (^)(UNNotificationPresentationOptions))completionHandler { + NSDictionary *userInfo = notification.request.content.userInfo; + + // With swizzling disabled you must let Messaging know about the message, for Analytics + // [[FIRMessaging messaging] appDidReceiveMessage:userInfo]; + + // ... + + // Print full message. + NSLog(@"%@", userInfo); + + // Change this to your preferred presentation option + completionHandler(UNNotificationPresentationOptionBadge | UNNotificationPresentationOptionAlert); +} + +// 點擊通知 +// Handle notification messages after display notification is tapped by the user. ++ (void)userNotificationCenter:(UNUserNotificationCenter *)center +didReceiveNotificationResponse:(UNNotificationResponse *)response + withCompletionHandler:(void(^)(void))completionHandler { + NSDictionary *userInfo = response.notification.request.content.userInfo; + + + // With swizzling disabled you must let Messaging know about the message, for Analytics + // [[FIRMessaging messaging] appDidReceiveMessage:userInfo]; + + // Print full message. + NSLog(@"%@", userInfo); + + NSString* title = [userInfo objectForKey:@"data_title"]; + NSString* contect = [userInfo objectForKey:@"data_content"]; + if (title && contect) { + [AppController JSBridge:title value2:contect]; + } + + completionHandler(); +} + ++ (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler{ + NSDictionary* notd = [userInfo objectForKey:@"aps"]; + NSDictionary* message = [notd objectForKey:@"alert"]; + + NSLog(@"%@",message); +} + +@end