Skip to content

Commit 183aed7

Browse files
committed
Merge branch 'master' into release/1.0.0
2 parents 1b88347 + 98cedcd commit 183aed7

3 files changed

Lines changed: 82 additions & 8 deletions

File tree

  • .vscode
  • samples/Kapusch.Facebook.iOS.Sample
  • src/Kapusch.FacebookApisForiOSComponents/Native/iOS/KapuschFacebookAuthInterop/Sources/KapuschFacebookAuthInterop

.vscode/launch.json

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
{
2+
"version": "0.2.0",
3+
"inputs": [
4+
{
5+
"id": "iosSimulatorUdid",
6+
"type": "promptString",
7+
"description": "Simulator UDID (run: xcrun simctl list devices | rg Booted)",
8+
"default": "760FECA7-AD46-4AE7-A112-385D384450C8"
9+
}
10+
],
11+
"configurations": [
12+
{
13+
"name": "iOS Sample (Run x64 simulator)",
14+
"type": "node-terminal",
15+
"request": "launch",
16+
"command": "dotnet build ${workspaceFolder}/samples/Kapusch.Facebook.iOS.Sample/Kapusch.Facebook.iOS.Sample.csproj -t:Run -c Debug -p:RuntimeIdentifier=iossimulator-x64 -p:_DeviceName=:v2:udid=${input:iosSimulatorUdid}"
17+
},
18+
{
19+
"name": "iOS Sample (Device logs)",
20+
"type": "node-terminal",
21+
"request": "launch",
22+
"command": "xcrun simctl spawn ${input:iosSimulatorUdid} log stream --style compact --level debug --predicate 'process == \"Kapusch.Facebook.iOS.Sample\"'"
23+
},
24+
{
25+
"name": "iOS Sample (Build only x64)",
26+
"type": "node-terminal",
27+
"request": "launch",
28+
"command": "dotnet build ${workspaceFolder}/samples/Kapusch.Facebook.iOS.Sample/Kapusch.Facebook.iOS.Sample.csproj -c Debug -p:RuntimeIdentifier=iossimulator-x64"
29+
}
30+
],
31+
"compounds": [
32+
{
33+
"name": "iOS Sample (Run + Device logs)",
34+
"configurations": [
35+
"iOS Sample (Device logs)",
36+
"iOS Sample (Run x64 simulator)"
37+
],
38+
"stopAll": true
39+
}
40+
]
41+
}

samples/Kapusch.Facebook.iOS.Sample/AppDelegate.cs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
using System.Security.Cryptography;
12
using Foundation;
23
using Kapusch.Facebook.iOS;
34
using UIKit;
@@ -29,10 +30,11 @@ public override bool FinishedLaunching(UIApplication application, NSDictionary?
2930

3031
try
3132
{
33+
var rawNonce = GenerateRawNonce();
3234
var result = await NativeFacebookLogin.SignInAsync(
3335
presenter.Handle,
3436
FacebookTrackingMode.Limited,
35-
rawNonce: null,
37+
rawNonce: rawNonce,
3638
CancellationToken.None
3739
);
3840

@@ -54,6 +56,12 @@ public override bool FinishedLaunching(UIApplication application, NSDictionary?
5456
return true;
5557
}
5658

59+
private static string GenerateRawNonce(int size = 32)
60+
{
61+
var bytes = RandomNumberGenerator.GetBytes(size);
62+
return Convert.ToBase64String(bytes).TrimEnd('=').Replace('+', '-').Replace('/', '_');
63+
}
64+
5765
public override bool OpenUrl(UIApplication application, NSUrl url, NSDictionary options) =>
5866
NativeFacebookLogin.HandleOpenUrl(
5967
application.Handle,

src/Kapusch.FacebookApisForiOSComponents/Native/iOS/KapuschFacebookAuthInterop/Sources/KapuschFacebookAuthInterop/Interop.swift

Lines changed: 32 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,10 @@ public func kfb_facebook_signin_start(
155155
let tracking = trackingMode == FacebookTrackingMode.enabled.rawValue
156156
? LoginTracking.enabled
157157
: LoginTracking.limited
158-
let nonce = noncePtr.flatMap { String(cString: $0) }
158+
let nonce = noncePtr.flatMap { raw -> String? in
159+
let trimmed = String(cString: raw).trimmingCharacters(in: .whitespacesAndNewlines)
160+
return trimmed.isEmpty ? nil : trimmed
161+
}
159162
if tracking == .limited && nonce == nil {
160163
callFacebookCallback(
161164
callback,
@@ -170,13 +173,35 @@ public func kfb_facebook_signin_start(
170173
return
171174
}
172175

173-
let loginNonce = nonce ?? ""
176+
let loginConfig: LoginConfiguration? = {
177+
if let nonce {
178+
return LoginConfiguration(
179+
permissions: ["public_profile", "email"],
180+
tracking: tracking,
181+
nonce: nonce
182+
)
183+
}
174184

175-
let loginConfig = LoginConfiguration(
176-
permissions: ["public_profile", "email"],
177-
tracking: tracking,
178-
nonce: loginNonce
179-
)
185+
return LoginConfiguration(
186+
permissions: ["public_profile", "email"],
187+
tracking: tracking,
188+
messengerPageId: nil
189+
)
190+
}()
191+
192+
guard let loginConfig else {
193+
callFacebookCallback(
194+
callback,
195+
status: .failed,
196+
errorCode: "invalid_login_configuration",
197+
errorMessage: "Cannot create a valid Facebook LoginConfiguration.",
198+
context: context
199+
)
200+
FacebookState.inProgress = false
201+
FacebookState.callback = nil
202+
FacebookState.context = nil
203+
return
204+
}
180205

181206
LoginManager().logIn(
182207
viewController: presenting,

0 commit comments

Comments
 (0)