I am trying to handle a Pending Registration interruption in GigyaSwift V1.0. I am able to go inside the pending registration, but i'm not entirely sure what to do next. I am trying to show the screenset but the app crashes with a SIGABRT error.
Here is my code:
gigya.login(with: .facebook, viewController: self, completion: { (result) in
switch result {
case .success(let data):
print(data)
case .failure(let error):
print(error)
guard let interruption = error.interruption else {
gigya.logout { (_) in
}
return }
// Evaluate interruption.
switch interruption {
case .pendingRegistration(let resolver):
gigya.showScreenSet(with: "Default-RegistrationLogin" ,
viewController: self,
params:[ "startScreen": "gigya-complete-registration-screen"],
completion: { (res) in
})
break
default:
break
}
}
})
I think i need to put a regToken as a parameter but i am not able to access it through the resolver since it has an internal access modifier.
When i tried to do this in a new project, the SIGABRT error is more descriptive for some reason:
2019-07-25 17:19:11.273269+0800 GigyaTester[15773:243216] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Invalid type in JSON write (__SwiftValue)'
*** First throw call stack:
(
0 CoreFoundation 0x000000010b5986fb __exceptionPreprocess + 331
1 libobjc.A.dylib 0x000000010ab3cac5 objc_exception_throw + 48
2 CoreFoundation 0x000000010b598555 +[NSException raise:format:] + 197
3 Foundation 0x0000000109f97b3c _writeJSONValue + 706
4 Foundation 0x0000000109f9ba98 ___writeJSONObject_block_invoke + 176
5 libswiftCore.dylib 0x000000010bc2f481 $ss26_SwiftDeferredNSDictionaryC23enumerateKeysAndObjects7options5usingySi_ys9UnmanagedVyyXlG_AHSpys5UInt8VGtXBtFTf4dnn_n + 897
6 libswiftCore.dylib 0x000000010ba4f8db $ss26_SwiftDeferredNSDictionaryC23enumerateKeysAndObjects7options5usingySi_ys9UnmanagedVyyXlG_AHSpys5UInt8VGtXBtFTo + 43
7 Foundation 0x0000000109f9b046 _writeJSONObject + 466
8 Foundation 0x0000000109f9ba98 ___writeJSONObject_block_invoke + 176
9 libswiftCore.dylib 0x000000010bc2f481 $ss26_SwiftDeferredNSDictionaryC23enumerateKeysAndObjects7options5usingySi_ys9UnmanagedVyyXlG_AHSpys5UInt8VGtXBtFTf4dnn_n + 897
10 libswiftCore.dylib 0x000000010ba4f8db $ss26_SwiftDeferredNSDictionaryC23enumerateKeysAndObjects7options5usingySi_ys9UnmanagedVyyXlG_AHSpys5UInt8VGtXBtFTo + 43
11 Foundation 0x0000000109f9b046 _writeJSONObject + 466
12 Foundation 0x0000000109f9ba98 ___writeJSONObject_block_invoke + 176
13 libswiftCore.dylib 0x000000010bc2f481 $ss26_SwiftDeferredNSDictionaryC23enumerateKeysAndObjects7options5usingySi_ys9UnmanagedVyyXlG_AHSpys5UInt8VGtXBtFTf4dnn_n + 897
14 libswiftCore.dylib 0x000000010ba4f8db $ss26_SwiftDeferredNSDictionaryC23enumerateKeysAndObjects7options5usingySi_ys9UnmanagedVyyXlG_AHSpys5UInt8VGtXBtFTo + 43
15 Foundation 0x0000000109f9b046 _writeJSONObject + 466
16 Foundation 0x0000000109f9ba98 ___writeJSONObject_block_invoke + 176
17 libswiftCore.dylib 0x000000010bc2f481 $ss26_SwiftDeferredNSDictionaryC23enumerateKeysAndObjects7options5usingySi_ys9UnmanagedVyyXlG_AHSpys5UInt8VGtXBtFTf4dnn_n + 897
18 libswiftCore.dylib 0x000000010ba4f8db $ss26_SwiftDeferredNSDictionaryC23enumerateKeysAndObjects7options5usingySi_ys9UnmanagedVyyXlG_AHSpys5UInt8VGtXBtFTo + 43
19 Foundation 0x0000000109f9b046 _writeJSONObject + 466
20 Foundation 0x0000000109f9ba98 ___writeJSONObject_block_invoke + 176
21 libswiftCore.dylib 0x000000010bc2f481 $ss26_SwiftDeferredNSDictionaryC23enumerateKeysAndObjects7options5usingySi_ys9UnmanagedVyyXlG_AHSpys5UInt8VGtXBtFTf4dnn_n + 897
22 libswiftCore.dylib 0x000000010ba4f8db $ss26_SwiftDeferredNSDictionaryC23enumerateKeysAndObjects7options5usingySi_ys9UnmanagedVyyXlG_AHSpys5UInt8VGtXBtFTo + 43
23 Foundation 0x0000000109f9b046 _writeJSONObject + 466
24 Foundation 0x0000000109f97826 -[_NSJSONWriter dataWithRootObject:options:error:] + 124
25 Foundation 0x0000000109f9a3b7 +[NSJSONSerialization dataWithJSONObject:options:error:] + 337
26 Gigya 0x000000010a8165db $sSD5GigyaE6asJsonSSvgSS_ypTg5 + 459
27 Gigya 0x000000010a87ac4e $s5Gigya20PluginViewControllerC11sendRequest33_AECB03F2DE2968001A01CE9A6BBBD70ALL10callbackId9apiMethod6paramsySS_SSSDyS2SGtFyAA0A9ApiResultOySDySSAA10AnyCodableVGGcfU_ + 926
28 Gigya 0x000000010a87d49d $s5Gigya20PluginViewControllerC11sendRequest33_AECB03F2DE2968001A01CE9A6BBBD70ALL10callbackId9apiMethod6paramsySS_SSSDyS2SGtFyAA0A9ApiResultOySDySSAA10AnyCodableVGGcfU_TATm + 29
29 Gigya 0x000000010a87d3e0 $s5Gigya20PluginViewControllerC11sendRequest33_AECB03F2DE2968001A01CE9A6BBBD70ALL10callbackId9apiMethod6paramsySS_SSSDyS2SGtFyAA0A9ApiResultOySDySSAA10AnyCodableVGGcfU_TA + 16
30 Gigya 0x000000010a844bd6 $s5Gigya0A9ApiResultOySDySSAA10AnyCodableVGGIegg_AGIegn_TRTA + 38
31 Gigya 0x000000010a845959 $s5Gigya0A9ApiResultOySDySSAA10AnyCodableVGGIegg_AGIegn_TRTA.69 + 9
32 Gigya 0x000000010a83bd18 $s5Gigya10ApiServiceC14validateResult33_D119E9E6D70D9DCFB59B48B23E442E39LL12responseType4data10completionyxm_So6NSDataCSgyAA0abE0OyxGctSeRzSERzlF + 1944
33 Gigya 0x000000010a83b1cf $s5Gigya10ApiServiceC4send5model12responseType10completionyAA0B12RequestModelV_xmyAA0aB6ResultOyxGctSeRzSERzlFySo6NSDataCSg_s5Error_pSgtcfU_ + 1151
34 Gigya 0x000000010a83b579 $s5Gigya10ApiServiceC4send5model12responseType10completionyAA0B12RequestModelV_xmyAA0aB6ResultOyxGctSeRzSERzlFySo6NSDataCSg_s5Error_pSgtcfU_TA + 41
35 Gigya 0x000000010a8782e4 $s5Gigya14NetworkAdapterC4send5model10completionyAA15ApiRequestModelV_ySo6NSDataCSg_s5Error_pSgtctFySo10GSResponseCSg_AMtcfU_ + 324
36 Gigya 0x000000010a879251 $s5Gigya14NetworkAdapterC4send5model10completionyAA15ApiRequestModelV_ySo6NSDataCSg_s5Error_pSgtctFySo10GSResponseCSg_AMtcfU_TA + 17
37 Gigya 0x000000010a878170 $sSo10GSResponseCSgs5Error_pSgIeggg_ACSo7NSErrorCSgIeyByy_TR + 64
38 GigyaInfra 0x000000010aa270b1 -[GSRequest finishWithResponse:error:] + 293
39 GigyaInfra 0x000000010aa268dc __33-[GSRequest sendValidatedRequest]_block_invoke_3 + 504
40 GigyaInfra 0x000000010aa226e7 +[GSResponse responseForMethod:data:completionHandler:] + 614
41 GigyaInfra 0x000000010aa265eb __33-[GSRequest sendValidatedRequest]_block_invoke_2 + 610
42 CFNetwork 0x000000010cbd1178 __75-[__NSURLSessionLocal taskForClass:request:uploadFile:bodyData:completion:]_block_invoke + 19
43 CFNetwork 0x000000010cbe7c56 __49-[__NSCFLocalSessionTask _task_onqueue_didFinish]_block_invoke + 172
44 Foundation 0x0000000109eb6412 __NSBLOCKOPERATION_IS_CALLING_OUT_TO_A_BLOCK__ + 7
45 Foundation 0x0000000109eb631a -[NSBlockOperation main] + 68
46 Foundation 0x0000000109eb31f4 -[__NSOperationInternal _start:] + 688
47 Foundation 0x0000000109eb8f5b __NSOQSchedule_f + 227
48 libdispatch.dylib 0x000000010c5cf725 _dispatch_block_async_invoke2 + 83
49 libdispatch.dylib 0x000000010c5c1db5 _dispatch_client_callout + 8
50 libdispatch.dylib 0x000000010c5cf080 _dispatch_main_queue_callback_4CF + 1540
51 CoreFoundation 0x000000010b4ff8a9 __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 9
52 CoreFoundation 0x000000010b4f9f56 __CFRunLoopRun + 2310
53 CoreFoundation 0x000000010b4f9302 CFRunLoopRunSpecific + 626
54 GraphicsServices 0x000000010fd342fe GSEventRunModal + 65
55 UIKitCore 0x0000000116dfcba2 UIApplicationMain + 140
56 GigyaTester 0x00000001080f208b main + 75
57 libdyld.dylib 0x000000010c636541 start + 1
58 ??? 0x0000000000000001 0x0 + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException
I do not understand the implementation of pending registration in the GigyaDemoApp. Here is their code :
@IBAction func loginWithProviders(_ sender: Any) {
gigya.socialLoginWith(providers: [.facebook, .google, .line], viewController: self, params: [:]) { [weak self] (result) in
switch result {
case .success(let data):
print(data)
self?.resultTextView?.text = data.toJson()
case .failure(let error):
print(error)
guard let interruption = error.interruption else { return }
// Evaluage interruption.
switch interruption {
case .pendingRegistration(let resolver):
resolver.setAccount(params: ["data": ["specialCode": "20"]])
case .pendingVerification(let regToken):
print("regToken: \(regToken)")
case .conflitingAccount(let resolver):
resolver.linkToSite(loginId: resolver.conflictingAccount?.loginID ?? "", password: "123123")
default:
break
}
}
}
}
How am i supposed to handle the Pending Registration interruption?
It's look like you forgot to close the square brackets.
Try this:
gigya.login(with: .facebook, viewController: self, completion: { (result) in
switch result {
case .success(let data):
print(data)
case .failure(let error):
print(error)
guard let interruption = error.interruption else {
gigya.logout { (_) in
}
return }
// Evaluate interruption.
switch interruption {
case .pendingRegistration(let resolver):
gigya.showScreenSet(with: "Default-RegistrationLogin" ,
viewController: self,
params:[ "startScreen": "gigya-complete-registration-screen"],
completion: { (res) in
})
break
default:
break
}
}
})
Also you can't open screenSet
in pendingRegistration
interruption at this time, you need to open custom ViewController
and use resolver.setAccount
to update the required params.