完善sign with apple
This commit is contained in:
parent
9e4ddec771
commit
3e92c2f31e
27
Classes_cocos/AppleSignIn.h
Normal file
27
Classes_cocos/AppleSignIn.h
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
//
|
||||||
|
// AppleSignIn.h
|
||||||
|
// Unity-iPhone
|
||||||
|
//
|
||||||
|
// Created by zhl on 2022/11/28.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <Foundation/Foundation.h>
|
||||||
|
#import <AuthenticationServices/AuthenticationServices.h>
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_BEGIN
|
||||||
|
|
||||||
|
typedef void (^AppleSignInCompletion)(NSString *_Nullable idToken, NSError *_Nullable error);
|
||||||
|
|
||||||
|
@interface AppleSignIn : NSObject<ASAuthorizationControllerDelegate>
|
||||||
|
|
||||||
|
@property(nonatomic, nullable) AppleSignInCompletion completion;
|
||||||
|
@property(nonatomic, nullable) NSString *funid;
|
||||||
|
|
||||||
|
|
||||||
|
+ (instancetype)sharedInstance;
|
||||||
|
|
||||||
|
- (void)signIn:(NSString *)funid presentingViewController:(UIViewController *)presentingViewController completion:(nullable AppleSignInCompletion)completion;
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_END
|
131
Classes_cocos/AppleSignIn.m
Normal file
131
Classes_cocos/AppleSignIn.m
Normal file
@ -0,0 +1,131 @@
|
|||||||
|
//
|
||||||
|
// AppleSignIn.m
|
||||||
|
// Unity-iPhone
|
||||||
|
//
|
||||||
|
// Created by zhl on 2022/11/28.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "AppleSignIn.h"
|
||||||
|
|
||||||
|
|
||||||
|
static id _instance;
|
||||||
|
|
||||||
|
|
||||||
|
@implementation AppleSignIn
|
||||||
|
|
||||||
|
+ (instancetype)sharedInstance{
|
||||||
|
static dispatch_once_t onceToken;
|
||||||
|
dispatch_once(&onceToken, ^{
|
||||||
|
_instance = [[self alloc] init];
|
||||||
|
});
|
||||||
|
return _instance;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ (instancetype)allocWithZone:(struct _NSZone *)zone {
|
||||||
|
static dispatch_once_t onceToken;
|
||||||
|
dispatch_once(&onceToken, ^{
|
||||||
|
_instance = [super allocWithZone:zone];
|
||||||
|
});
|
||||||
|
return _instance;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (id)copyWithZone:(nullable NSZone *)zone {
|
||||||
|
return _instance;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)signIn:(NSString *)funid presentingViewController:(UIViewController *)presentingViewController completion:(nullable AppleSignInCompletion)completion API_AVAILABLE(ios(13.0)){
|
||||||
|
self.completion = completion;
|
||||||
|
self.funid = funid;
|
||||||
|
ASAuthorizationAppleIDProvider *appleIdProvider = [[ASAuthorizationAppleIDProvider alloc] init];
|
||||||
|
ASAuthorizationAppleIDRequest *request = appleIdProvider.createRequest;
|
||||||
|
request.requestedScopes = @[ASAuthorizationScopeEmail, ASAuthorizationScopeFullName];
|
||||||
|
ASAuthorizationController *controller = [[ASAuthorizationController alloc] initWithAuthorizationRequests:@[request]];
|
||||||
|
controller.delegate = self;
|
||||||
|
[controller performRequests];
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark -- ASAuthorizationControllerDelegate
|
||||||
|
- (void)authorizationController:(ASAuthorizationController *)controller didCompleteWithAuthorization:(ASAuthorization *)authorization API_AVAILABLE(ios(13.0)) {
|
||||||
|
if ([authorization.credential isKindOfClass:[ASAuthorizationAppleIDCredential class]]) {
|
||||||
|
ASAuthorizationAppleIDCredential *credential = authorization.credential;
|
||||||
|
NSString *idToken = [[NSString alloc] initWithData:credential.identityToken encoding:NSUTF8StringEncoding];
|
||||||
|
NSLog(@"identityToken: %@",idToken);
|
||||||
|
if (self.completion) {
|
||||||
|
dispatch_async(dispatch_get_main_queue(), ^{
|
||||||
|
self.completion(idToken, nil);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
// NSString *user = credential.user;
|
||||||
|
// NSString *authStr = [[NSString alloc] initWithData:credential.authorizationCode encoding:NSUTF8StringEncoding];
|
||||||
|
// NSLog(@"fullName: %@",credential.fullName);
|
||||||
|
// NSLog(@"user: %@",user);
|
||||||
|
|
||||||
|
// [self nativeCb:funid hasErr:NO dataStr:idToken];
|
||||||
|
}
|
||||||
|
// else if ([authorization.credential isKindOfClass:[ASPasswordCredential class]]) {
|
||||||
|
// // 用户登录使用现有的密码凭证
|
||||||
|
// ASPasswordCredential *psdCredential = authorization.credential;
|
||||||
|
// // 密码凭证对象的用户标识 用户的唯一标识
|
||||||
|
// NSString *user = psdCredential.user;
|
||||||
|
// NSString *psd = psdCredential.password;
|
||||||
|
// NSLog(@"psduser - %@ %@",psd,user);
|
||||||
|
// }
|
||||||
|
else {
|
||||||
|
NSError *err = [NSError errorWithDomain:@"apple_sign"
|
||||||
|
code:100
|
||||||
|
userInfo:@{
|
||||||
|
NSLocalizedDescriptionKey:@"authorization info mismath"
|
||||||
|
}];
|
||||||
|
[self throwError:err];
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void) throwError:(NSError *) err {
|
||||||
|
if (self.completion) {
|
||||||
|
dispatch_async(dispatch_get_main_queue(), ^{
|
||||||
|
self.completion(nil, err);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark -- ASAuthorizationControllerDelegate
|
||||||
|
- (void)authorizationController:(ASAuthorizationController *)controller didCompleteWithError:(NSError *)error API_AVAILABLE(ios(13.0)){
|
||||||
|
NSLog(@"错误信息:%@", error);
|
||||||
|
[self throwError:error];
|
||||||
|
// NSString *errorMsg;
|
||||||
|
// switch (error.code) {
|
||||||
|
// case ASAuthorizationErrorCanceled:
|
||||||
|
// errorMsg = @"用户取消了授权请求";
|
||||||
|
// NSLog(@"errorMsg - %@",errorMsg);
|
||||||
|
// break;
|
||||||
|
//
|
||||||
|
// case ASAuthorizationErrorFailed:
|
||||||
|
// errorMsg = @"授权请求失败";
|
||||||
|
// NSLog(@"errorMsg - %@",errorMsg);
|
||||||
|
// break;
|
||||||
|
//
|
||||||
|
// case ASAuthorizationErrorInvalidResponse:
|
||||||
|
// errorMsg = @"授权请求响应无效";
|
||||||
|
// NSLog(@"errorMsg - %@",errorMsg);
|
||||||
|
// break;
|
||||||
|
//
|
||||||
|
// case ASAuthorizationErrorNotHandled:
|
||||||
|
// errorMsg = @"未能处理授权请求";
|
||||||
|
// NSLog(@"errorMsg - %@",errorMsg);
|
||||||
|
// break;
|
||||||
|
//
|
||||||
|
// case ASAuthorizationErrorUnknown:
|
||||||
|
// errorMsg = @"授权请求失败未知原因";
|
||||||
|
// NSLog(@"errorMsg - %@",errorMsg);
|
||||||
|
// break;
|
||||||
|
//
|
||||||
|
// default:
|
||||||
|
// break;
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@end
|
@ -340,6 +340,23 @@ bool jsb_signWithGoogle(se::State& s) {
|
|||||||
}
|
}
|
||||||
SE_BIND_FUNC(jsb_signWithGoogle)
|
SE_BIND_FUNC(jsb_signWithGoogle)
|
||||||
|
|
||||||
|
bool jsb_signWithApple(se::State& s) {
|
||||||
|
const auto& args = s.args();
|
||||||
|
size_t argc = args.size();
|
||||||
|
if (argc >= 1) {
|
||||||
|
bool ok;
|
||||||
|
std::string funid;
|
||||||
|
ok = seval_to_std_string(args[0], &funid);
|
||||||
|
SE_PRECONDITION2(ok, false, "Error processing arguments");
|
||||||
|
NSString *nfunid = [NSString stringWithCString:funid.c_str() encoding:NSUTF8StringEncoding];
|
||||||
|
UIWindow* window = [[[UIApplication sharedApplication] delegate] window];
|
||||||
|
[window.rootViewController signWithApple:nfunid];
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
SE_BIND_FUNC(jsb_signWithApple)
|
||||||
|
|
||||||
bool jsb_signOutGoogle(se::State& s) {
|
bool jsb_signOutGoogle(se::State& s) {
|
||||||
const auto& args = s.args();
|
const auto& args = s.args();
|
||||||
size_t argc = args.size();
|
size_t argc = args.size();
|
||||||
@ -364,6 +381,7 @@ bool jsb_register_walletevent_modules(se::Object* global) {
|
|||||||
__jsbObj->defineFunction("scanQRCode", _SE(jsb_scanQRCode));
|
__jsbObj->defineFunction("scanQRCode", _SE(jsb_scanQRCode));
|
||||||
__jsbObj->defineFunction("restoreKey", _SE(JSB_restoreKey));
|
__jsbObj->defineFunction("restoreKey", _SE(JSB_restoreKey));
|
||||||
__jsbObj->defineFunction("signWithGoogle", _SE(jsb_signWithGoogle));
|
__jsbObj->defineFunction("signWithGoogle", _SE(jsb_signWithGoogle));
|
||||||
|
__jsbObj->defineFunction("signWithApple", _SE(jsb_signWithApple));
|
||||||
__jsbObj->defineFunction("signOutGoogle", _SE(jsb_signOutGoogle));
|
__jsbObj->defineFunction("signOutGoogle", _SE(jsb_signOutGoogle));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
45
Classes_cocos/NSData+Base64.h
Normal file
45
Classes_cocos/NSData+Base64.h
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
//
|
||||||
|
// NSData+Base64.h
|
||||||
|
// base64
|
||||||
|
//
|
||||||
|
// Created by Matt Gallagher on 2009/06/03.
|
||||||
|
// Copyright 2009 Matt Gallagher. All rights reserved.
|
||||||
|
//
|
||||||
|
// This software is provided 'as-is', without any express or implied
|
||||||
|
// warranty. In no event will the authors be held liable for any damages
|
||||||
|
// arising from the use of this software. Permission is granted to anyone to
|
||||||
|
// use this software for any purpose, including commercial applications, and to
|
||||||
|
// alter it and redistribute it freely, subject to the following restrictions:
|
||||||
|
//
|
||||||
|
// 1. The origin of this software must not be misrepresented; you must not
|
||||||
|
// claim that you wrote the original software. If you use this software
|
||||||
|
// in a product, an acknowledgment in the product documentation would be
|
||||||
|
// appreciated but is not required.
|
||||||
|
// 2. Altered source versions must be plainly marked as such, and must not be
|
||||||
|
// misrepresented as being the original software.
|
||||||
|
// 3. This notice may not be removed or altered from any source
|
||||||
|
// distribution.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <Foundation/Foundation.h>
|
||||||
|
|
||||||
|
void *NewBase64Decode(
|
||||||
|
const char *inputBuffer,
|
||||||
|
size_t length,
|
||||||
|
size_t *outputLength);
|
||||||
|
|
||||||
|
char *NewBase64Encode(
|
||||||
|
const void *inputBuffer,
|
||||||
|
size_t length,
|
||||||
|
bool separateLines,
|
||||||
|
size_t *outputLength);
|
||||||
|
|
||||||
|
@interface NSData (Base64)
|
||||||
|
|
||||||
|
+ (NSData *)dataFromBase64String:(NSString *)aString;
|
||||||
|
- (NSString *)base64EncodedString;
|
||||||
|
|
||||||
|
// added by Hiroshi Hashiguchi
|
||||||
|
- (NSString *)base64EncodedStringWithSeparateLines:(BOOL)separateLines;
|
||||||
|
|
||||||
|
@end
|
329
Classes_cocos/NSData+Base64.m
Normal file
329
Classes_cocos/NSData+Base64.m
Normal file
@ -0,0 +1,329 @@
|
|||||||
|
//
|
||||||
|
// NSData+Base64.m
|
||||||
|
// base64
|
||||||
|
//
|
||||||
|
// Created by Matt Gallagher on 2009/06/03.
|
||||||
|
// Copyright 2009 Matt Gallagher. All rights reserved.
|
||||||
|
//
|
||||||
|
// This software is provided 'as-is', without any express or implied
|
||||||
|
// warranty. In no event will the authors be held liable for any damages
|
||||||
|
// arising from the use of this software. Permission is granted to anyone to
|
||||||
|
// use this software for any purpose, including commercial applications, and to
|
||||||
|
// alter it and redistribute it freely, subject to the following restrictions:
|
||||||
|
//
|
||||||
|
// 1. The origin of this software must not be misrepresented; you must not
|
||||||
|
// claim that you wrote the original software. If you use this software
|
||||||
|
// in a product, an acknowledgment in the product documentation would be
|
||||||
|
// appreciated but is not required.
|
||||||
|
// 2. Altered source versions must be plainly marked as such, and must not be
|
||||||
|
// misrepresented as being the original software.
|
||||||
|
// 3. This notice may not be removed or altered from any source
|
||||||
|
// distribution.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "NSData+Base64.h"
|
||||||
|
|
||||||
|
//
|
||||||
|
// Mapping from 6 bit pattern to ASCII character.
|
||||||
|
//
|
||||||
|
static unsigned char base64EncodeLookup[65] =
|
||||||
|
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
|
||||||
|
|
||||||
|
//
|
||||||
|
// Definition for "masked-out" areas of the base64DecodeLookup mapping
|
||||||
|
//
|
||||||
|
#define xx 65
|
||||||
|
|
||||||
|
//
|
||||||
|
// Mapping from ASCII character to 6 bit pattern.
|
||||||
|
//
|
||||||
|
static unsigned char base64DecodeLookup[256] =
|
||||||
|
{
|
||||||
|
xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx,
|
||||||
|
xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx,
|
||||||
|
xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, 62, xx, xx, xx, 63,
|
||||||
|
52, 53, 54, 55, 56, 57, 58, 59, 60, 61, xx, xx, xx, xx, xx, xx,
|
||||||
|
xx, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
|
||||||
|
15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, xx, xx, xx, xx, xx,
|
||||||
|
xx, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
|
||||||
|
41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, xx, xx, xx, xx, xx,
|
||||||
|
xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx,
|
||||||
|
xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx,
|
||||||
|
xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx,
|
||||||
|
xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx,
|
||||||
|
xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx,
|
||||||
|
xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx,
|
||||||
|
xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx,
|
||||||
|
xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx,
|
||||||
|
};
|
||||||
|
|
||||||
|
//
|
||||||
|
// Fundamental sizes of the binary and base64 encode/decode units in bytes
|
||||||
|
//
|
||||||
|
#define BINARY_UNIT_SIZE 3
|
||||||
|
#define BASE64_UNIT_SIZE 4
|
||||||
|
|
||||||
|
//
|
||||||
|
// NewBase64Decode
|
||||||
|
//
|
||||||
|
// Decodes the base64 ASCII string in the inputBuffer to a newly malloced
|
||||||
|
// output buffer.
|
||||||
|
//
|
||||||
|
// inputBuffer - the source ASCII string for the decode
|
||||||
|
// length - the length of the string or -1 (to specify strlen should be used)
|
||||||
|
// outputLength - if not-NULL, on output will contain the decoded length
|
||||||
|
//
|
||||||
|
// returns the decoded buffer. Must be free'd by caller. Length is given by
|
||||||
|
// outputLength.
|
||||||
|
//
|
||||||
|
void *NewBase64Decode(
|
||||||
|
const char *inputBuffer,
|
||||||
|
size_t length,
|
||||||
|
size_t *outputLength)
|
||||||
|
{
|
||||||
|
if (length == -1)
|
||||||
|
{
|
||||||
|
length = strlen(inputBuffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t outputBufferSize =
|
||||||
|
((length+BASE64_UNIT_SIZE-1) / BASE64_UNIT_SIZE) * BINARY_UNIT_SIZE;
|
||||||
|
unsigned char *outputBuffer = (unsigned char *)malloc(outputBufferSize);
|
||||||
|
|
||||||
|
size_t i = 0;
|
||||||
|
size_t j = 0;
|
||||||
|
while (i < length)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// Accumulate 4 valid characters (ignore everything else)
|
||||||
|
//
|
||||||
|
unsigned char accumulated[BASE64_UNIT_SIZE];
|
||||||
|
size_t accumulateIndex = 0;
|
||||||
|
while (i < length)
|
||||||
|
{
|
||||||
|
unsigned char decode = base64DecodeLookup[inputBuffer[i++]];
|
||||||
|
if (decode != xx)
|
||||||
|
{
|
||||||
|
accumulated[accumulateIndex] = decode;
|
||||||
|
accumulateIndex++;
|
||||||
|
|
||||||
|
if (accumulateIndex == BASE64_UNIT_SIZE)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Store the 6 bits from each of the 4 characters as 3 bytes
|
||||||
|
//
|
||||||
|
// (Uses improved bounds checking suggested by Alexandre Colucci)
|
||||||
|
//
|
||||||
|
if(accumulateIndex >= 2)
|
||||||
|
outputBuffer[j] = (accumulated[0] << 2) | (accumulated[1] >> 4);
|
||||||
|
if(accumulateIndex >= 3)
|
||||||
|
outputBuffer[j + 1] = (accumulated[1] << 4) | (accumulated[2] >> 2);
|
||||||
|
if(accumulateIndex >= 4)
|
||||||
|
outputBuffer[j + 2] = (accumulated[2] << 6) | accumulated[3];
|
||||||
|
j += accumulateIndex - 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (outputLength)
|
||||||
|
{
|
||||||
|
*outputLength = j;
|
||||||
|
}
|
||||||
|
return outputBuffer;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// NewBase64Encode
|
||||||
|
//
|
||||||
|
// Encodes the arbitrary data in the inputBuffer as base64 into a newly malloced
|
||||||
|
// output buffer.
|
||||||
|
//
|
||||||
|
// inputBuffer - the source data for the encode
|
||||||
|
// length - the length of the input in bytes
|
||||||
|
// separateLines - if zero, no CR/LF characters will be added. Otherwise
|
||||||
|
// a CR/LF pair will be added every 64 encoded chars.
|
||||||
|
// outputLength - if not-NULL, on output will contain the encoded length
|
||||||
|
// (not including terminating 0 char)
|
||||||
|
//
|
||||||
|
// returns the encoded buffer. Must be free'd by caller. Length is given by
|
||||||
|
// outputLength.
|
||||||
|
//
|
||||||
|
char *NewBase64Encode(
|
||||||
|
const void *buffer,
|
||||||
|
size_t length,
|
||||||
|
bool separateLines,
|
||||||
|
size_t *outputLength)
|
||||||
|
{
|
||||||
|
const unsigned char *inputBuffer = (const unsigned char *)buffer;
|
||||||
|
|
||||||
|
#define MAX_NUM_PADDING_CHARS 2
|
||||||
|
#define OUTPUT_LINE_LENGTH 64
|
||||||
|
#define INPUT_LINE_LENGTH ((OUTPUT_LINE_LENGTH / BASE64_UNIT_SIZE) * BINARY_UNIT_SIZE)
|
||||||
|
#define CR_LF_SIZE 2
|
||||||
|
|
||||||
|
//
|
||||||
|
// Byte accurate calculation of final buffer size
|
||||||
|
//
|
||||||
|
size_t outputBufferSize =
|
||||||
|
((length / BINARY_UNIT_SIZE)
|
||||||
|
+ ((length % BINARY_UNIT_SIZE) ? 1 : 0))
|
||||||
|
* BASE64_UNIT_SIZE;
|
||||||
|
if (separateLines)
|
||||||
|
{
|
||||||
|
outputBufferSize +=
|
||||||
|
(outputBufferSize / OUTPUT_LINE_LENGTH) * CR_LF_SIZE;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Include space for a terminating zero
|
||||||
|
//
|
||||||
|
outputBufferSize += 1;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Allocate the output buffer
|
||||||
|
//
|
||||||
|
char *outputBuffer = (char *)malloc(outputBufferSize);
|
||||||
|
if (!outputBuffer)
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t i = 0;
|
||||||
|
size_t j = 0;
|
||||||
|
const size_t lineLength = separateLines ? INPUT_LINE_LENGTH : length;
|
||||||
|
size_t lineEnd = lineLength;
|
||||||
|
|
||||||
|
while (true)
|
||||||
|
{
|
||||||
|
if (lineEnd > length)
|
||||||
|
{
|
||||||
|
lineEnd = length;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (; i + BINARY_UNIT_SIZE - 1 < lineEnd; i += BINARY_UNIT_SIZE)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// Inner loop: turn 48 bytes into 64 base64 characters
|
||||||
|
//
|
||||||
|
outputBuffer[j++] = base64EncodeLookup[(inputBuffer[i] & 0xFC) >> 2];
|
||||||
|
outputBuffer[j++] = base64EncodeLookup[((inputBuffer[i] & 0x03) << 4)
|
||||||
|
| ((inputBuffer[i + 1] & 0xF0) >> 4)];
|
||||||
|
outputBuffer[j++] = base64EncodeLookup[((inputBuffer[i + 1] & 0x0F) << 2)
|
||||||
|
| ((inputBuffer[i + 2] & 0xC0) >> 6)];
|
||||||
|
outputBuffer[j++] = base64EncodeLookup[inputBuffer[i + 2] & 0x3F];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (lineEnd == length)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Add the newline
|
||||||
|
//
|
||||||
|
outputBuffer[j++] = '\r';
|
||||||
|
outputBuffer[j++] = '\n';
|
||||||
|
lineEnd += lineLength;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (i + 1 < length)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// Handle the single '=' case
|
||||||
|
//
|
||||||
|
outputBuffer[j++] = base64EncodeLookup[(inputBuffer[i] & 0xFC) >> 2];
|
||||||
|
outputBuffer[j++] = base64EncodeLookup[((inputBuffer[i] & 0x03) << 4)
|
||||||
|
| ((inputBuffer[i + 1] & 0xF0) >> 4)];
|
||||||
|
outputBuffer[j++] = base64EncodeLookup[(inputBuffer[i + 1] & 0x0F) << 2];
|
||||||
|
outputBuffer[j++] = '=';
|
||||||
|
}
|
||||||
|
else if (i < length)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// Handle the double '=' case
|
||||||
|
//
|
||||||
|
outputBuffer[j++] = base64EncodeLookup[(inputBuffer[i] & 0xFC) >> 2];
|
||||||
|
outputBuffer[j++] = base64EncodeLookup[(inputBuffer[i] & 0x03) << 4];
|
||||||
|
outputBuffer[j++] = '=';
|
||||||
|
outputBuffer[j++] = '=';
|
||||||
|
}
|
||||||
|
outputBuffer[j] = 0;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Set the output length and return the buffer
|
||||||
|
//
|
||||||
|
if (outputLength)
|
||||||
|
{
|
||||||
|
*outputLength = j;
|
||||||
|
}
|
||||||
|
return outputBuffer;
|
||||||
|
}
|
||||||
|
|
||||||
|
@implementation NSData (Base64)
|
||||||
|
|
||||||
|
//
|
||||||
|
// dataFromBase64String:
|
||||||
|
//
|
||||||
|
// Creates an NSData object containing the base64 decoded representation of
|
||||||
|
// the base64 string 'aString'
|
||||||
|
//
|
||||||
|
// Parameters:
|
||||||
|
// aString - the base64 string to decode
|
||||||
|
//
|
||||||
|
// returns the autoreleased NSData representation of the base64 string
|
||||||
|
//
|
||||||
|
+ (NSData *)dataFromBase64String:(NSString *)aString
|
||||||
|
{
|
||||||
|
NSData *data = [aString dataUsingEncoding:NSASCIIStringEncoding];
|
||||||
|
size_t outputLength;
|
||||||
|
void *outputBuffer = NewBase64Decode([data bytes], [data length], &outputLength);
|
||||||
|
NSData *result = [NSData dataWithBytes:outputBuffer length:outputLength];
|
||||||
|
free(outputBuffer);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// base64EncodedString
|
||||||
|
//
|
||||||
|
// Creates an NSString object that contains the base 64 encoding of the
|
||||||
|
// receiver's data. Lines are broken at 64 characters long.
|
||||||
|
//
|
||||||
|
// returns an autoreleased NSString being the base 64 representation of the
|
||||||
|
// receiver.
|
||||||
|
//
|
||||||
|
- (NSString *)base64EncodedString
|
||||||
|
{
|
||||||
|
size_t outputLength;
|
||||||
|
char *outputBuffer =
|
||||||
|
NewBase64Encode([self bytes], [self length], true, &outputLength);
|
||||||
|
|
||||||
|
NSString *result =
|
||||||
|
[[NSString alloc]
|
||||||
|
initWithBytes:outputBuffer
|
||||||
|
length:outputLength
|
||||||
|
encoding:NSASCIIStringEncoding];
|
||||||
|
free(outputBuffer);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
// added by Hiroshi Hashiguchi
|
||||||
|
- (NSString *)base64EncodedStringWithSeparateLines:(BOOL)separateLines
|
||||||
|
{
|
||||||
|
size_t outputLength;
|
||||||
|
char *outputBuffer =
|
||||||
|
NewBase64Encode([self bytes], [self length], separateLines, &outputLength);
|
||||||
|
|
||||||
|
NSString *result =
|
||||||
|
[[NSString alloc]
|
||||||
|
initWithBytes:outputBuffer
|
||||||
|
length:outputLength
|
||||||
|
encoding:NSASCIIStringEncoding];
|
||||||
|
free(outputBuffer);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@end
|
@ -14,6 +14,7 @@
|
|||||||
|
|
||||||
+(void)toWallet:(NSString *)url;
|
+(void)toWallet:(NSString *)url;
|
||||||
-(void)signWithGoogle:(NSString *)funid;
|
-(void)signWithGoogle:(NSString *)funid;
|
||||||
|
-(void)signWithApple:(NSString *)funid;
|
||||||
-(void)signOutGoogle:(NSString *)funid;
|
-(void)signOutGoogle:(NSString *)funid;
|
||||||
-(void)saveKey:(NSString *) account key:(NSString *) key;
|
-(void)saveKey:(NSString *) account key:(NSString *) key;
|
||||||
-(NSString *)loadKey:(NSString *) account;
|
-(NSString *)loadKey:(NSString *) account;
|
||||||
|
@ -13,15 +13,14 @@
|
|||||||
#import <GoogleSignIn/GoogleSignIn.h>
|
#import <GoogleSignIn/GoogleSignIn.h>
|
||||||
#include "KeyChain/DataManager.h"
|
#include "KeyChain/DataManager.h"
|
||||||
#import "NSString+Customer.h"
|
#import "NSString+Customer.h"
|
||||||
#import <AuthenticationServices/AuthenticationServices.h>
|
#import "NSData+Base64.h"
|
||||||
|
#import "AppleSignIn.h"
|
||||||
|
|
||||||
@import GoogleSignIn;
|
@import GoogleSignIn;
|
||||||
|
|
||||||
static NSString * const kClientID =
|
static NSString * const kClientID =
|
||||||
@"53206975661-0d6q9pqljn84n9l63gm0to1ulap9cbk4.apps.googleusercontent.com";
|
@"53206975661-0d6q9pqljn84n9l63gm0to1ulap9cbk4.apps.googleusercontent.com";
|
||||||
|
|
||||||
@interface UIViewController (Wallet)<ASAuthorizationControllerDelegate>
|
|
||||||
@end
|
|
||||||
|
|
||||||
@implementation UIViewController (Wallet)
|
@implementation UIViewController (Wallet)
|
||||||
|
|
||||||
@ -48,8 +47,9 @@ static NSString * const kClientID =
|
|||||||
completion:^(GIDGoogleUser *user, NSError *error) {
|
completion:^(GIDGoogleUser *user, NSError *error) {
|
||||||
if (error) {
|
if (error) {
|
||||||
NSLog(@"Status: Authentication error: %@", error);
|
NSLog(@"Status: Authentication error: %@", error);
|
||||||
|
[self nativeCb:funid hasErr:YES dataStr: error.localizedDescription];
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
[self refreshUserInfo];
|
|
||||||
[self refreshTokenID: user funid:funid];
|
[self refreshTokenID: user funid:funid];
|
||||||
}];
|
}];
|
||||||
}
|
}
|
||||||
@ -57,8 +57,14 @@ static NSString * const kClientID =
|
|||||||
-(void) refreshTokenID:(GIDGoogleUser *)user funid:(NSString*) funid{
|
-(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) {
|
||||||
if (authentication == nil) { return; }
|
[self nativeCb:funid hasErr:YES dataStr: error.localizedDescription];
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (authentication == nil) {
|
||||||
|
[self nativeCb:funid hasErr:YES dataStr: @"empty authenication"];
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
NSString *idToken = authentication.idToken;
|
NSString *idToken = authentication.idToken;
|
||||||
// Send ID token to backend (example below).
|
// Send ID token to backend (example below).
|
||||||
@ -85,102 +91,23 @@ static NSString * const kClientID =
|
|||||||
[GIDSignIn.sharedInstance signOut];
|
[GIDSignIn.sharedInstance signOut];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)reportAuthStatus {
|
|
||||||
GIDGoogleUser *googleUser = [GIDSignIn.sharedInstance currentUser];
|
|
||||||
if (googleUser.authentication) {
|
|
||||||
NSLog(@"Status: Authenticated");
|
|
||||||
} else {
|
|
||||||
// To authenticate, use Google Sign-In button.
|
|
||||||
NSLog(@"Status: Not authenticated");
|
|
||||||
}
|
|
||||||
|
|
||||||
[self refreshUserInfo];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)refreshUserInfo {
|
|
||||||
if (GIDSignIn.sharedInstance.currentUser.authentication == nil) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
NSLog(@"email: %@", GIDSignIn.sharedInstance.currentUser.profile.email);
|
|
||||||
NSLog(@"username: %@", GIDSignIn.sharedInstance.currentUser.profile.name);
|
|
||||||
NSLog(@"userid: %@", GIDSignIn.sharedInstance.currentUser.userID);
|
|
||||||
NSLog(@"givenName: %@", GIDSignIn.sharedInstance.currentUser.profile.givenName);
|
|
||||||
NSLog(@"familyName: %@", GIDSignIn.sharedInstance.currentUser.profile.familyName);
|
|
||||||
NSLog(@"hostedDomain: %@", GIDSignIn.sharedInstance.currentUser.hostedDomain);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma mark- - Sign In With Apple
|
#pragma mark- - Sign In With Apple
|
||||||
- (void) signWithApple {
|
- (void) signWithApple:(NSString *)funid{
|
||||||
if (@available(iOS 13.0, *)) {
|
if (@available(iOS 13.0, *)) {
|
||||||
ASAuthorizationAppleIDProvider *appleIdProvider = [[ASAuthorizationAppleIDProvider alloc] init];
|
[[AppleSignIn sharedInstance] signIn:funid presentingViewController:self completion:^(NSString *idToken, NSError *error){
|
||||||
ASAuthorizationAppleIDRequest *request = appleIdProvider.createRequest;
|
if (error != nil) {
|
||||||
request.requestedScopes = @[ASAuthorizationScopeEmail, ASAuthorizationScopeFullName];
|
[self nativeCb:funid hasErr:YES dataStr: error.localizedDescription];
|
||||||
ASAuthorizationController *controller = [[ASAuthorizationController alloc] initWithAuthorizationRequests:@[request]];
|
} else {
|
||||||
controller.delegate = self;
|
NSLog(@"signWithApple: %@", idToken);
|
||||||
[controller performRequests];
|
[self nativeCb:funid hasErr:NO dataStr:idToken];
|
||||||
|
}
|
||||||
|
}];
|
||||||
} else {
|
} else {
|
||||||
NSLog(@"system is lower");
|
NSLog(@"system is lower");
|
||||||
|
[self nativeCb:funid hasErr:YES dataStr: @"system is lower"];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)authorizationController:(ASAuthorizationController *)controller didCompleteWithAuthorization:(ASAuthorization *)authorization API_AVAILABLE(ios(13.0)) {
|
|
||||||
if ([authorization.credential isKindOfClass:[ASAuthorizationAppleIDCredential class]]) {
|
|
||||||
// 用户登录使用ASAuthorizationAppleIDCredential
|
|
||||||
ASAuthorizationAppleIDCredential *credential = authorization.credential;
|
|
||||||
NSString *user = credential.user;
|
|
||||||
NSData *identityToken = credential.identityToken;
|
|
||||||
NSLog(@"fullName - %@",credential.fullName);
|
|
||||||
//授权成功后,你可以拿到苹果返回的全部数据,根据需要和后台交互。
|
|
||||||
NSLog(@"user - %@ %@",user,identityToken);
|
|
||||||
//保存apple返回的唯一标识符
|
|
||||||
[[NSUserDefaults standardUserDefaults] setObject:user forKey:@"userIdentifier"];
|
|
||||||
[[NSUserDefaults standardUserDefaults] synchronize];
|
|
||||||
} else if ([authorization.credential isKindOfClass:[ASPasswordCredential class]]) {
|
|
||||||
// 用户登录使用现有的密码凭证
|
|
||||||
ASPasswordCredential *psdCredential = authorization.credential;
|
|
||||||
// 密码凭证对象的用户标识 用户的唯一标识
|
|
||||||
NSString *user = psdCredential.user;
|
|
||||||
NSString *psd = psdCredential.password;
|
|
||||||
NSLog(@"psduser - %@ %@",psd,user);
|
|
||||||
} else {
|
|
||||||
NSLog(@"授权信息不符");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma mark - 授权回调失败
|
|
||||||
- (void)authorizationController:(ASAuthorizationController *)controller didCompleteWithError:(NSError *)error API_AVAILABLE(ios(13.0)){
|
|
||||||
NSLog(@"错误信息:%@", error);
|
|
||||||
NSString *errorMsg;
|
|
||||||
switch (error.code) {
|
|
||||||
case ASAuthorizationErrorCanceled:
|
|
||||||
errorMsg = @"用户取消了授权请求";
|
|
||||||
NSLog(@"errorMsg - %@",errorMsg);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ASAuthorizationErrorFailed:
|
|
||||||
errorMsg = @"授权请求失败";
|
|
||||||
NSLog(@"errorMsg - %@",errorMsg);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ASAuthorizationErrorInvalidResponse:
|
|
||||||
errorMsg = @"授权请求响应无效";
|
|
||||||
NSLog(@"errorMsg - %@",errorMsg);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ASAuthorizationErrorNotHandled:
|
|
||||||
errorMsg = @"未能处理授权请求";
|
|
||||||
NSLog(@"errorMsg - %@",errorMsg);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ASAuthorizationErrorUnknown:
|
|
||||||
errorMsg = @"授权请求失败未知原因";
|
|
||||||
NSLog(@"errorMsg - %@",errorMsg);
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
-(void)nativeCb:(NSString *)funid hasErr: (BOOL) hasErr dataStr:(NSString *) dataStr {
|
-(void)nativeCb:(NSString *)funid hasErr: (BOOL) hasErr dataStr:(NSString *) dataStr {
|
||||||
if ([NSString isStringEmpty:funid]) {
|
if ([NSString isStringEmpty:funid]) {
|
||||||
|
@ -80,6 +80,8 @@
|
|||||||
D52A8DA1288E6547006574E8 /* libuv_a.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D52A8D9F288E6547006574E8 /* libuv_a.a */; };
|
D52A8DA1288E6547006574E8 /* libuv_a.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D52A8D9F288E6547006574E8 /* libuv_a.a */; };
|
||||||
D5538BA5287E9908000BDFB6 /* WalletEvent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D5538BA3287E9908000BDFB6 /* WalletEvent.cpp */; };
|
D5538BA5287E9908000BDFB6 /* WalletEvent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D5538BA3287E9908000BDFB6 /* WalletEvent.cpp */; };
|
||||||
D5608AF929348B83007F146A /* NSString+Customer.m in Sources */ = {isa = PBXBuildFile; fileRef = D5608AF829348B83007F146A /* NSString+Customer.m */; };
|
D5608AF929348B83007F146A /* NSString+Customer.m in Sources */ = {isa = PBXBuildFile; fileRef = D5608AF829348B83007F146A /* NSString+Customer.m */; };
|
||||||
|
D5608AFD2934A75E007F146A /* NSData+Base64.m in Sources */ = {isa = PBXBuildFile; fileRef = D5608AFC2934A75E007F146A /* NSData+Base64.m */; };
|
||||||
|
D5608B002934C90B007F146A /* AppleSignIn.m in Sources */ = {isa = PBXBuildFile; fileRef = D5608AFF2934C90B007F146A /* AppleSignIn.m */; };
|
||||||
D56436422930AAF700E2B633 /* UIView+Toast.m in Sources */ = {isa = PBXBuildFile; fileRef = D56436412930AAF700E2B633 /* UIView+Toast.m */; };
|
D56436422930AAF700E2B633 /* UIView+Toast.m in Sources */ = {isa = PBXBuildFile; fileRef = D56436412930AAF700E2B633 /* UIView+Toast.m */; };
|
||||||
D56436462930ABAB00E2B633 /* UIUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = D56436452930ABAB00E2B633 /* UIUtils.m */; };
|
D56436462930ABAB00E2B633 /* UIUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = D56436452930ABAB00E2B633 /* UIUtils.m */; };
|
||||||
D56436492930BC1300E2B633 /* AuthenticationServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D56436472930BC0900E2B633 /* AuthenticationServices.framework */; };
|
D56436492930BC1300E2B633 /* AuthenticationServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D56436472930BC0900E2B633 /* AuthenticationServices.framework */; };
|
||||||
@ -379,6 +381,10 @@
|
|||||||
D5538BA4287E9908000BDFB6 /* WalletEvent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = WalletEvent.h; sourceTree = "<group>"; };
|
D5538BA4287E9908000BDFB6 /* WalletEvent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = WalletEvent.h; sourceTree = "<group>"; };
|
||||||
D5608AF729348B83007F146A /* NSString+Customer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "NSString+Customer.h"; sourceTree = "<group>"; };
|
D5608AF729348B83007F146A /* NSString+Customer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "NSString+Customer.h"; sourceTree = "<group>"; };
|
||||||
D5608AF829348B83007F146A /* NSString+Customer.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "NSString+Customer.m"; sourceTree = "<group>"; };
|
D5608AF829348B83007F146A /* NSString+Customer.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "NSString+Customer.m"; sourceTree = "<group>"; };
|
||||||
|
D5608AFB2934A75E007F146A /* NSData+Base64.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "NSData+Base64.h"; sourceTree = "<group>"; };
|
||||||
|
D5608AFC2934A75E007F146A /* NSData+Base64.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "NSData+Base64.m"; sourceTree = "<group>"; };
|
||||||
|
D5608AFE2934C90B007F146A /* AppleSignIn.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppleSignIn.h; sourceTree = "<group>"; };
|
||||||
|
D5608AFF2934C90B007F146A /* AppleSignIn.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppleSignIn.m; sourceTree = "<group>"; };
|
||||||
D56436402930AAF700E2B633 /* UIView+Toast.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "UIView+Toast.h"; sourceTree = "<group>"; };
|
D56436402930AAF700E2B633 /* UIView+Toast.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "UIView+Toast.h"; sourceTree = "<group>"; };
|
||||||
D56436412930AAF700E2B633 /* UIView+Toast.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "UIView+Toast.m"; sourceTree = "<group>"; };
|
D56436412930AAF700E2B633 /* UIView+Toast.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "UIView+Toast.m"; sourceTree = "<group>"; };
|
||||||
D56436442930ABAB00E2B633 /* UIUtils.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = UIUtils.h; sourceTree = "<group>"; };
|
D56436442930ABAB00E2B633 /* UIUtils.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = UIUtils.h; sourceTree = "<group>"; };
|
||||||
@ -982,6 +988,10 @@
|
|||||||
D5D9BAF8293477E700F18A7F /* UIViewController+QR.mm */,
|
D5D9BAF8293477E700F18A7F /* UIViewController+QR.mm */,
|
||||||
D5608AF729348B83007F146A /* NSString+Customer.h */,
|
D5608AF729348B83007F146A /* NSString+Customer.h */,
|
||||||
D5608AF829348B83007F146A /* NSString+Customer.m */,
|
D5608AF829348B83007F146A /* NSString+Customer.m */,
|
||||||
|
D5608AFE2934C90B007F146A /* AppleSignIn.h */,
|
||||||
|
D5608AFF2934C90B007F146A /* AppleSignIn.m */,
|
||||||
|
D5608AFB2934A75E007F146A /* NSData+Base64.h */,
|
||||||
|
D5608AFC2934A75E007F146A /* NSData+Base64.m */,
|
||||||
D5F2D105287C12DD003C2B62 /* JcWallet.h */,
|
D5F2D105287C12DD003C2B62 /* JcWallet.h */,
|
||||||
D5F2D104287C12DD003C2B62 /* JcWallet.mm */,
|
D5F2D104287C12DD003C2B62 /* JcWallet.mm */,
|
||||||
D5538BA4287E9908000BDFB6 /* WalletEvent.h */,
|
D5538BA4287E9908000BDFB6 /* WalletEvent.h */,
|
||||||
@ -1352,10 +1362,12 @@
|
|||||||
4E090A341F27885B0077B28D /* StoreReview.m in Sources */,
|
4E090A341F27885B0077B28D /* StoreReview.m in Sources */,
|
||||||
8AC74A9519B47FEF00019D38 /* AVCapture.mm in Sources */,
|
8AC74A9519B47FEF00019D38 /* AVCapture.mm in Sources */,
|
||||||
D59AB42F292E250500714392 /* UICKeyChainStore.m in Sources */,
|
D59AB42F292E250500714392 /* UICKeyChainStore.m in Sources */,
|
||||||
|
D5608AFD2934A75E007F146A /* NSData+Base64.m in Sources */,
|
||||||
D5F2CF90287BEC0D003C2B62 /* Il2CppCompilerCalculateTypeValues_6Table.cpp in Sources */,
|
D5F2CF90287BEC0D003C2B62 /* Il2CppCompilerCalculateTypeValues_6Table.cpp in Sources */,
|
||||||
D5F2CFA8287BEC0D003C2B62 /* Il2CppCompilerCalculateTypeValues_13Table.cpp in Sources */,
|
D5F2CFA8287BEC0D003C2B62 /* Il2CppCompilerCalculateTypeValues_13Table.cpp in Sources */,
|
||||||
D59AB4AF292F325E00714392 /* LBXPermission.m in Sources */,
|
D59AB4AF292F325E00714392 /* LBXPermission.m in Sources */,
|
||||||
D5F2CF5C287BEC0D003C2B62 /* Bulk_Generics_7.cpp in Sources */,
|
D5F2CF5C287BEC0D003C2B62 /* Bulk_Generics_7.cpp in Sources */,
|
||||||
|
D5608B002934C90B007F146A /* AppleSignIn.m in Sources */,
|
||||||
8A793A091ED43EE100B44EF1 /* UnityViewControllerBase+tvOS.mm in Sources */,
|
8A793A091ED43EE100B44EF1 /* UnityViewControllerBase+tvOS.mm in Sources */,
|
||||||
D5F2CF58287BEC0D003C2B62 /* Il2CppGenericMethodPointerTable.cpp in Sources */,
|
D5F2CF58287BEC0D003C2B62 /* Il2CppGenericMethodPointerTable.cpp in Sources */,
|
||||||
D5F2CF76287BEC0D003C2B62 /* Bulk_Generics_11.cpp in Sources */,
|
D5F2CF76287BEC0D003C2B62 /* Bulk_Generics_11.cpp in Sources */,
|
||||||
|
Binary file not shown.
@ -68,21 +68,5 @@
|
|||||||
landmarkType = "9">
|
landmarkType = "9">
|
||||||
</BreakpointContent>
|
</BreakpointContent>
|
||||||
</BreakpointProxy>
|
</BreakpointProxy>
|
||||||
<BreakpointProxy
|
|
||||||
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
|
|
||||||
<BreakpointContent
|
|
||||||
uuid = "CD5DBE0E-A7FC-4F93-B4A6-3E7E540525FA"
|
|
||||||
shouldBeEnabled = "No"
|
|
||||||
ignoreCount = "0"
|
|
||||||
continueAfterRunningActions = "No"
|
|
||||||
filePath = "Classes_cocos/UIViewController+Wallet.mm"
|
|
||||||
startingColumnNumber = "9223372036854775807"
|
|
||||||
endingColumnNumber = "9223372036854775807"
|
|
||||||
startingLineNumber = "127"
|
|
||||||
endingLineNumber = "127"
|
|
||||||
landmarkName = "-authorizationController:didCompleteWithAuthorization:"
|
|
||||||
landmarkType = "7">
|
|
||||||
</BreakpointContent>
|
|
||||||
</BreakpointProxy>
|
|
||||||
</Breakpoints>
|
</Breakpoints>
|
||||||
</Bucket>
|
</Bucket>
|
||||||
|
@ -21,7 +21,7 @@ function initWallet(funId, type, chain) {
|
|||||||
}
|
}
|
||||||
type = parseInt(type);
|
type = parseInt(type);
|
||||||
if (type === 1) {
|
if (type === 1) {
|
||||||
console.log("wallet init success, begin connect");
|
console.log("wallet init success, begin connect") ;
|
||||||
wallet
|
wallet
|
||||||
.initThirdPartyWallet()
|
.initThirdPartyWallet()
|
||||||
.then(() => {
|
.then(() => {
|
||||||
@ -165,7 +165,8 @@ function createAccount(funId) {
|
|||||||
*/
|
*/
|
||||||
function importAccount(funId, privateKey) {
|
function importAccount(funId, privateKey) {
|
||||||
console.log('importAccount: ' + funId);
|
console.log('importAccount: ' + funId);
|
||||||
jsb.restoreKey(funId, '1111');
|
jsb.signWithApple(funId);
|
||||||
|
// jsb.restoreKey(funId, '1111');
|
||||||
// jsb.scanQRCode(funId, '111');
|
// jsb.scanQRCode(funId, '111');
|
||||||
// jsb.showQRCode('00123', '0x12312312313123123123', 'CEBG RECOVERY KEY', '0x1231231231321231');
|
// jsb.showQRCode('00123', '0x12312312313123123123', 'CEBG RECOVERY KEY', '0x1231231231321231');
|
||||||
// try {
|
// try {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user