增加一些常用的供js调用的方法
This commit is contained in:
parent
e3521ea69e
commit
503285d2e7
@ -17,6 +17,7 @@ NS_CC_BEGIN
|
|||||||
se::ValueArray args;
|
se::ValueArray args;
|
||||||
};
|
};
|
||||||
bool addToArgArray(se::ValueArray *args, const char *valChar);
|
bool addToArgArray(se::ValueArray *args, const char *valChar);
|
||||||
|
int nativeCallBack(const char *funId, const char *methodName, const char *cparams);
|
||||||
|
|
||||||
class CC_DLL JcWallet {
|
class CC_DLL JcWallet {
|
||||||
public:
|
public:
|
||||||
|
@ -30,6 +30,7 @@ NS_CC_BEGIN
|
|||||||
bool _isStarted = false;
|
bool _isStarted = false;
|
||||||
uv_async_t gasync = {0};
|
uv_async_t gasync = {0};
|
||||||
|
|
||||||
|
|
||||||
struct AsyncTaskData {
|
struct AsyncTaskData {
|
||||||
std::mutex mtx;
|
std::mutex mtx;
|
||||||
std::list<std::function<void()> > tasks;
|
std::list<std::function<void()> > tasks;
|
||||||
@ -183,6 +184,21 @@ NS_CC_BEGIN
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int nativeCallBack(const char *funId, const char *methodName, const char *cparams) {
|
||||||
|
JSMethodParam *data = new JSMethodParam();
|
||||||
|
std::string methodNameStr(methodName);
|
||||||
|
data->methodName = methodNameStr;
|
||||||
|
data->funId = funId;
|
||||||
|
data->paramCount = 1;
|
||||||
|
addToArgArray(&data->args, funId);
|
||||||
|
addToArgArray(&data->args, cparams);
|
||||||
|
std::shared_ptr<JSMethodParam> params(data);
|
||||||
|
int result = schedule_task_into_server_thread_task_queue(&gasync, [=](){
|
||||||
|
JcWallet::getInstance()->runJsMethod(params);
|
||||||
|
});
|
||||||
|
return result == 0 ? 1 : 0;
|
||||||
|
}
|
||||||
|
|
||||||
NS_CC_END
|
NS_CC_END
|
||||||
static bool getOrCreatePlainObject_r(const char* name, se::Object* parent, se::Object** outObj)
|
static bool getOrCreatePlainObject_r(const char* name, se::Object* parent, se::Object** outObj)
|
||||||
{
|
{
|
||||||
@ -242,6 +258,62 @@ bool jsb_scanQRCode(se::State& s) {
|
|||||||
}
|
}
|
||||||
SE_BIND_FUNC(jsb_scanQRCode)
|
SE_BIND_FUNC(jsb_scanQRCode)
|
||||||
|
|
||||||
|
static bool JSB_showQRCode(se::State& s)
|
||||||
|
{
|
||||||
|
const auto& args = s.args();
|
||||||
|
size_t argc = args.size();
|
||||||
|
CC_UNUSED bool ok = true;
|
||||||
|
if (argc > 4) {
|
||||||
|
std::string funid;
|
||||||
|
ok = seval_to_std_string(args[0], &funid);
|
||||||
|
SE_PRECONDITION2(ok, false, "funid is invalid!");
|
||||||
|
std::string text;
|
||||||
|
ok = seval_to_std_string(args[1], &text);
|
||||||
|
SE_PRECONDITION2(ok, false, "content is invalid!");
|
||||||
|
std::string title;
|
||||||
|
ok = seval_to_std_string(args[2], &title);
|
||||||
|
SE_PRECONDITION2(ok, false, "title is invalid!");
|
||||||
|
std::string oid;
|
||||||
|
ok = seval_to_std_string(args[3], &oid);
|
||||||
|
SE_PRECONDITION2(ok, false, "data id is invalid!");
|
||||||
|
NSString *ntitle = [NSString stringWithCString:title.c_str() encoding:NSUTF8StringEncoding];
|
||||||
|
NSString *nfunid = [NSString stringWithCString:funid.c_str() encoding:NSUTF8StringEncoding];
|
||||||
|
NSString *ncontent = [NSString stringWithCString:text.c_str() encoding:NSUTF8StringEncoding];
|
||||||
|
NSString *noid = [NSString stringWithCString:oid.c_str() encoding:NSUTF8StringEncoding];
|
||||||
|
UIWindow* window = [[[UIApplication sharedApplication] delegate] window];
|
||||||
|
[window.rootViewController showQRCode:nfunid content:ncontent title:ntitle oid: noid];
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 4);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
SE_BIND_FUNC(JSB_showQRCode)
|
||||||
|
|
||||||
|
static bool JSB_restoreKey(se::State& s)
|
||||||
|
{
|
||||||
|
const auto& args = s.args();
|
||||||
|
size_t argc = args.size();
|
||||||
|
CC_UNUSED bool ok = true;
|
||||||
|
if (argc > 1) {
|
||||||
|
std::string funid;
|
||||||
|
ok = seval_to_std_string(args[0], &funid);
|
||||||
|
SE_PRECONDITION2(ok, false, "funid is invalid!");
|
||||||
|
std::string oid;
|
||||||
|
ok = seval_to_std_string(args[1], &oid);
|
||||||
|
SE_PRECONDITION2(ok, false, "oid is invalid!");
|
||||||
|
NSString *nfunid = [NSString stringWithCString:funid.c_str() encoding:NSUTF8StringEncoding];
|
||||||
|
NSString *noid = [NSString stringWithCString:oid.c_str() encoding:NSUTF8StringEncoding];
|
||||||
|
UIWindow* window = [[[UIApplication sharedApplication] delegate] window];
|
||||||
|
[window.rootViewController loadRestoreKey:nfunid oid: noid];
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 2);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
SE_BIND_FUNC(JSB_restoreKey)
|
||||||
|
|
||||||
bool jsb_signWithGoogle(se::State& s) {
|
bool jsb_signWithGoogle(se::State& s) {
|
||||||
const auto& args = s.args();
|
const auto& args = s.args();
|
||||||
size_t argc = args.size();
|
size_t argc = args.size();
|
||||||
@ -276,10 +348,15 @@ bool jsb_signOutGoogle(se::State& s) {
|
|||||||
}
|
}
|
||||||
SE_BIND_FUNC(jsb_signOutGoogle)
|
SE_BIND_FUNC(jsb_signOutGoogle)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
bool jsb_register_walletevent_modules(se::Object* global) {
|
bool jsb_register_walletevent_modules(se::Object* global) {
|
||||||
getOrCreatePlainObject_r("jsb", global, &__jsbObj);
|
getOrCreatePlainObject_r("jsb", global, &__jsbObj);
|
||||||
__jsbObj->defineFunction("jcCallback", _SE(jsb_wallet_callback));
|
__jsbObj->defineFunction("jcCallback", _SE(jsb_wallet_callback));
|
||||||
__jsbObj->defineFunction("scanQRCode", _SE(jsb_scanQRCode));
|
__jsbObj->defineFunction("scanQRCode", _SE(jsb_scanQRCode));
|
||||||
|
__jsbObj->defineFunction("restoreKey", _SE(JSB_restoreKey));
|
||||||
|
__jsbObj->defineFunction("showQRCode", _SE(JSB_showQRCode));
|
||||||
__jsbObj->defineFunction("signWithGoogle", _SE(jsb_signWithGoogle));
|
__jsbObj->defineFunction("signWithGoogle", _SE(jsb_signWithGoogle));
|
||||||
__jsbObj->defineFunction("signOutGoogle", _SE(jsb_signOutGoogle));
|
__jsbObj->defineFunction("signOutGoogle", _SE(jsb_signOutGoogle));
|
||||||
return true;
|
return true;
|
||||||
|
@ -14,6 +14,8 @@
|
|||||||
|
|
||||||
+(void)toWallet:(NSString *)url;
|
+(void)toWallet:(NSString *)url;
|
||||||
-(void)scanQRCode:(NSString *)funid title:(NSString *) title;
|
-(void)scanQRCode:(NSString *)funid title:(NSString *) title;
|
||||||
|
-(void)showQRCode:(NSString *)funid content:(NSString *) content title:(NSString *) title oid:(NSString *) oid;
|
||||||
|
-(void)loadRestoreKey:(NSString *)funid oid:(NSString *) oid;
|
||||||
-(void)signWithGoogle:(NSString *)funid;
|
-(void)signWithGoogle:(NSString *)funid;
|
||||||
-(void)signOutGoogle:(NSString *)funid;
|
-(void)signOutGoogle:(NSString *)funid;
|
||||||
@end
|
@end
|
||||||
|
@ -11,11 +11,12 @@
|
|||||||
#import "QRCodeReaderDelegate.h"
|
#import "QRCodeReaderDelegate.h"
|
||||||
#include <string>
|
#include <string>
|
||||||
#include "WalletEvent.h"
|
#include "WalletEvent.h"
|
||||||
|
#include "JcWallet.h"
|
||||||
#import <GoogleSignIn/GoogleSignIn.h>
|
#import <GoogleSignIn/GoogleSignIn.h>
|
||||||
@import GoogleSignIn;
|
@import GoogleSignIn;
|
||||||
|
|
||||||
static NSString * const kClientID =
|
static NSString * const kClientID =
|
||||||
@"165555585193-alshovj5m91vlmj8uuhb11e6msvq32gm.apps.googleusercontent.com";
|
@"53206975661-qan0rnefniegjv53ohild375pv0p7ekd.apps.googleusercontent.com";
|
||||||
|
|
||||||
@implementation UIViewController (Wallet)
|
@implementation UIViewController (Wallet)
|
||||||
|
|
||||||
@ -24,6 +25,13 @@ static NSString * const kClientID =
|
|||||||
[app openURL:[NSURL URLWithString:url]];
|
[app openURL:[NSURL URLWithString:url]];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
-(void)showQRCode:(NSString *)funid content:(NSString *) content title:(NSString *) title oid:(NSString *) oid {
|
||||||
|
|
||||||
|
}
|
||||||
|
-(void)loadRestoreKey:(NSString *)funid oid:(NSString *) oid{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
-(void)scanQRCode:(NSString *)funid title:(NSString *) title{
|
-(void)scanQRCode:(NSString *)funid title:(NSString *) title{
|
||||||
NSLog(@"scanQRCode:: funId: %@ title: %@", funid, title);
|
NSLog(@"scanQRCode:: funId: %@ title: %@", funid, title);
|
||||||
std::string sfunid = std::string([funid UTF8String], [funid lengthOfBytesUsingEncoding:NSUTF8StringEncoding]);
|
std::string sfunid = std::string([funid UTF8String], [funid lengthOfBytesUsingEncoding:NSUTF8StringEncoding]);
|
||||||
@ -87,7 +95,7 @@ static NSString * const kClientID =
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
-(void)signToGoogle {
|
-(void)signToGoogle:(NSString *) funid {
|
||||||
GIDConfiguration *_configuration = [[GIDConfiguration alloc] initWithClientID:kClientID];
|
GIDConfiguration *_configuration = [[GIDConfiguration alloc] initWithClientID:kClientID];
|
||||||
[GIDSignIn.sharedInstance signInWithConfiguration:_configuration
|
[GIDSignIn.sharedInstance signInWithConfiguration:_configuration
|
||||||
presentingViewController:self
|
presentingViewController:self
|
||||||
@ -96,10 +104,10 @@ static NSString * const kClientID =
|
|||||||
NSLog(@"Status: Authentication error: %@", error);
|
NSLog(@"Status: Authentication error: %@", error);
|
||||||
}
|
}
|
||||||
[self refreshUserInfo];
|
[self refreshUserInfo];
|
||||||
[self refreshTokenID: user];
|
[self refreshTokenID: user funid:funid];
|
||||||
}];
|
}];
|
||||||
}
|
}
|
||||||
-(void) refreshTokenID:(GIDGoogleUser *)user {
|
-(void) refreshTokenID:(GIDGoogleUser *)user funid:(NSString*) funid{
|
||||||
[user.authentication doWithFreshTokens:^(GIDAuthentication * _Nullable authentication,
|
[user.authentication doWithFreshTokens:^(GIDAuthentication * _Nullable authentication,
|
||||||
NSError * _Nullable error) {
|
NSError * _Nullable error) {
|
||||||
if (error) { return; }
|
if (error) { return; }
|
||||||
@ -108,6 +116,11 @@ static NSString * const kClientID =
|
|||||||
NSString *idToken = authentication.idToken;
|
NSString *idToken = authentication.idToken;
|
||||||
// Send ID token to backend (example below).
|
// Send ID token to backend (example below).
|
||||||
NSLog(@"idToken: %@", idToken);
|
NSLog(@"idToken: %@", idToken);
|
||||||
|
std::string methodName = "nativeCallBack";
|
||||||
|
NSString *paramStr = [NSString stringWithFormat:@"{\"errcode\": 0, \"data\": \"%@\"}", idToken];
|
||||||
|
std::string sfunid = std::string([funid UTF8String], [funid lengthOfBytesUsingEncoding:NSUTF8StringEncoding]);
|
||||||
|
std::string sparam = std::string([paramStr UTF8String], [paramStr lengthOfBytesUsingEncoding:NSUTF8StringEncoding]);
|
||||||
|
cocos2d::nativeCallBack(sfunid.c_str(), methodName.c_str(), sparam.c_str());
|
||||||
}];
|
}];
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -116,10 +129,10 @@ static NSString * const kClientID =
|
|||||||
NSError * _Nullable error) {
|
NSError * _Nullable error) {
|
||||||
if (error) {
|
if (error) {
|
||||||
// Show the app's signed-out state.
|
// Show the app's signed-out state.
|
||||||
[self signToGoogle];
|
[self signToGoogle: funid];
|
||||||
} else {
|
} else {
|
||||||
// Show the app's signed-in state.
|
// Show the app's signed-in state.
|
||||||
[self refreshTokenID: user];
|
[self refreshTokenID: user funid:funid];
|
||||||
}
|
}
|
||||||
}];
|
}];
|
||||||
|
|
||||||
@ -153,5 +166,26 @@ static NSString * const kClientID =
|
|||||||
NSLog(@"hostedDomain: %@", GIDSignIn.sharedInstance.currentUser.hostedDomain);
|
NSLog(@"hostedDomain: %@", GIDSignIn.sharedInstance.currentUser.hostedDomain);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
-(void)checkOnSvr:(NSString *) idToken {
|
||||||
|
// NSString *signinEndpoint = @"https://yourbackend.example.com/tokensignin";
|
||||||
|
// NSDictionary *params = @{@"idtoken": idToken};
|
||||||
|
//
|
||||||
|
// NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:signinEndpoint];
|
||||||
|
// [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
|
||||||
|
// [request setHTTPMethod:@"POST"];
|
||||||
|
// [request setHTTPBody:[self httpBodyForParamsDictionary:params]];
|
||||||
|
//
|
||||||
|
// NSOperationQueue *queue = [[NSOperationQueue alloc] init];
|
||||||
|
// [NSURLConnection sendAsynchronousRequest:request
|
||||||
|
// queue:queue
|
||||||
|
// completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {
|
||||||
|
// if (error) {
|
||||||
|
// NSLog(@"Error: %@", error.localizedDescription);
|
||||||
|
// } else {
|
||||||
|
// NSLog(@"Signed in as %@", data.bytes);
|
||||||
|
// }
|
||||||
|
// }];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
Loading…
x
Reference in New Issue
Block a user