Git Product home page Git Product logo

exposurenotification.sample's Introduction

Xamarin Exposure Notification

Deploy to Azure

Read our Planning Document with more details about how Exposure Notifications work

Apple and Google are both creating API’s for a compatible BLE based Contact Tracing implementation which relies heavily on generating and storing rolling unique identifiers on a device, which are broadcast to nearby devices. Devices which detect nearby identifiers then store these identifiers as they come into range (or contact) with for up to 14 days.

When a person has confirmed a diagnosis, they tell their device which then submits the locally stored, self-generated rolling unique identifiers from the last 14 days to a back end service provided by the app implementing the API.

Devices continually request the keys submitted by diagnosed people from the backend server. The device then compares these keys to the unique identifiers of other devices it has been near in the last 14 days.

Sample App Animated Overview

Mobile App

A sample mobile app written using C# and Xamarin.Forms which accesses the native iOS and Android Exposure Notification API's and communicates with the sample server backend.

NOTE: There is a Xamarin.iOS fix pending release which is required to use BGTask related API's on iOS. This means in order for the periodic background fetching task to be invoked, the fix is required. Until the fix is available in a soon to be released stable version you can install these builds to test with on macOS:

See Issue #44 for more details.

Server

A sample backend to handle diagnosis submissions. This sample consists of Azure Functions, a EF Core Compatible Database, Azure Blob Storage, and Azure Key Vault. You can read more about the Server Architecture and Configuration in the Wiki

Contributing

This project welcomes contributions and suggestions. Most contributions require you to agree to a Contributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us the rights to use your contribution. For details, visit https://cla.opensource.microsoft.com.

When you submit a pull request, a CLA bot will automatically determine whether you need to provide a CLA and decorate the PR appropriately (e.g., status check, comment). Simply follow the instructions provided by the bot. You will only need to do this once across all repos using our CLA.

This project has adopted the Microsoft Open Source Code of Conduct. For more information see the Code of Conduct FAQ or contact [email protected] with any additional questions or comments.

exposurenotification.sample's People

Contributors

codemillmatt avatar dalexsoto avatar jamesmontemagno avatar kazumihirose avatar mattleibow avatar microsoft-github-operations[bot] avatar microsoftopensource avatar redth avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

exposurenotification.sample's Issues

Are these API's accessible for private companies?

I work for a large company that is looking for tools for proximity tracking of employees in our plants. Overground we are using GPS but underground and in buildings we would like to uso Bluetooth. Are the Google/Apple API's available for private companies or only for governments and health services?

Return 200 OK for bad submissions

Make sure the server fakes an ok response for things like invalid deviceVerificationPayloads or submitting too many keys, or any of the validations that Apple's documentation suggested.

Exception when screen is locked on Android

When running your sample app on Android (with updated Google Play Services, checked in, whitelisted primary Google account) and uncomment the "ExposureNotification.OverrideNativeImplementation" statement from App.xaml.cs, it seems to be working fine while the screen is on. I am able to click "Turn on" and have the dialog pop up.

But when I lock the screen, 10 seconds will pass and then the application enters break mode and this exception is printed:

05-28 15:22:52.706 E/AndroidRuntime(21647): FATAL EXCEPTION: GoogleApiHandler
05-28 15:22:52.706 E/AndroidRuntime(21647): Process: com.xamarin.exposurenotification.sampleapp, PID: 21647
05-28 15:22:52.706 E/AndroidRuntime(21647): java.lang.IllegalStateException: Nonexistent connection status for service config: com.google.android.gms.nearby.exposurenotification.START
05-28 15:22:52.706 E/AndroidRuntime(21647): 	at com.google.android.gms.common.internal.zze.zzb(com.google.android.gms:play-services-basement@@17.1.0:34)
05-28 15:22:52.706 E/AndroidRuntime(21647): 	at com.google.android.gms.common.internal.GmsClientSupervisor.zza(com.google.android.gms:play-services-basement@@17.1.0:11)
05-28 15:22:52.706 E/AndroidRuntime(21647): 	at com.google.android.gms.common.internal.BaseGmsClient.zza(com.google.android.gms:play-services-basement@@17.1.0:124)
05-28 15:22:52.706 E/AndroidRuntime(21647): 	at com.google.android.gms.common.internal.BaseGmsClient.disconnect(com.google.android.gms:play-services-basement@@17.1.0:166)
05-28 15:22:52.706 E/AndroidRuntime(21647): 	at com.google.android.gms.common.api.internal.GoogleApiManager$zaa.zac(com.google.android.gms:play-services-base@@17.1.0:210)
05-28 15:22:52.706 E/AndroidRuntime(21647): 	at com.google.android.gms.common.api.internal.GoogleApiManager$zaa.zabn(com.google.android.gms:play-services-base@@17.1.0:203)
05-28 15:22:52.706 E/AndroidRuntime(21647): 	at com.google.android.gms.common.api.internal.GoogleApiManager.handleMessage(com.google.android.gms:play-services-base@@17.1.0:186)
05-28 15:22:52.706 E/AndroidRuntime(21647): 	at android.os.Handler.dispatchMessage(Handler.java:103)
05-28 15:22:52.706 E/AndroidRuntime(21647): 	at com.google.android.gms.internal.base.zar.dispatchMessage(com.google.android.gms:play-services-base@@17.1.0:8)Thread started:  #7

05-28 15:22:52.706 E/AndroidRuntime(21647): 	at android.os.Looper.loop(Looper.java:214)
05-28 15:22:52.706 E/AndroidRuntime(21647): 	at android.os.HandlerThread.run(HandlerThread.java:67)
**Java.Lang.IllegalStateException:** 'Nonexistent connection status for service config: com.google.android.gms.nearby.exposurenotification.START'

I have replicated the error on another app.

This error message is very similar to the one we solved previously, where the problem was that the generated AndroidManifest.xml for my app contained illegal permissions like BLUETOOTH_ADMIN

Risk scores are 0 on Android

I think there is a problem with risk scores on Android. When ExposureNotificationHandler.ExposureDetectedAsync runs, I get a summary with matchedKeyCount 10, but all risk scores are 0. If I run getExposureInfo, I get a bunch of ExposureInfo objects with risk score 0. Doing the same on iOS, gives ExposureDetectionSummary and ExposureInfo objects with risk scores > 0.

Breakpoint here:
image

This is the summary object in Locals:
image

The screenshots are for 0.7.0, but it's the same problem on 0.8.0

Give the option to not get ExposureInfo objects

On Android:
https://github.com/xamarin/xamarin.exposurenotification/blob/master/Xamarin.ExposureNotification/CallbackService.android.cs#L36
and iOS:
https://github.com/xamarin/xamarin.exposurenotification/blob/master/Xamarin.ExposureNotification/ExposureNotification.ios.cs#L177
there is no option to skip the functions calls that get ExposureInfo objects.

According to Google and Apple's documentation, calling these functions will display a notification to the user.
Google:
Open API documentation and search for "getExposureInformation()​": https://www.google.com/covid19/exposurenotifications/
Apple:
https://developer.apple.com/documentation/exposurenotification/enmanager/3586332-getexposureinfo

Could you add a mechanism in the Xamarin.ExposureNotification code which lets us choose to not take out ExposureInfo objects, or at least have a bool that the application code can set so that it's "if (summary?.MatchedKeyCount > 0 && ! ignoreExposureInfo)"?

[Cross Platform Exposure Notification] Overall status of ExposureNotification on iOS

Hello,

In the current implementation of the cross-platform Xamarin Exposure Notification API it is not possible to keep track of overall status of ExposureNotification on iOS devices.

For the native implementation of ExposureNotification it is suggested to use KVO to monitor changes of ENStatus variable in ENManager (docs).
Checking the ENStatus allows developers to react correspondingly in the situation when ExposureNotification is authorised by user, but Bluetooth is turned off. In this case, an instance property exposureNotificationStatus will be set to case .bluetoothOff which allows app to act correspondingly.

The only way to get the status of scanning in the current cross-platform Xamarin Exposure Notification API is to call Xamarin.ExposureNotifications.ExposureNotification.IsEnabledAsync(). Using this method might not be sufficient due to simply returning boolean value and additional checks to identify the reason for why scanning might not be working are required.

I was wondering would Xamarin.ExposureNotification dev team consider adding this functionality to the cross-platform Xamarin Exposure Notification API? Or is it intended that app developers who want to use cross-platform Xamarin Exposure Notification API create their own bindings to ENManager to monitor the status of ExposureNotification on iOS devices.

Thank you.

LocalStateManager - evaluate storage security

Might be good to use Xamarin.Essentials SecureStorage to store a randomly generated encryption key at runtime and use that to encrypt/decrypt the JSON file of the local cache we save....

Cross-platform API not working on Android

When running this repository's sample app on Android (with a whitelisted Google account and a "checked in" Google Play Services beta) after removing the line:

Xamarin.ExposureNotifications.ExposureNotification.OverrideNativeImplementation(new Services.TestNativeImplementation());

we get:

Android.Gms.Common.Apis.ApiException: 6:

when calling:

IExposureNotificationClient.StartAsync()

The Api Exception code 6 means RESOLUTION_REQUIRED: https://developers.google.com/android/reference/com/google/android/gms/common/api/CommonStatusCodes?hl=de#public-static-final-int-resolution_required. Google's official sample app gets these API exceptions, then handles them by calling

apiException.getStatus().startResolutionForResult(this, RequestCodes.REQUEST_CODE_START_EXPOSURE_NOTIFICATION);

This seems to be missing from the cross-platform Xamarin Exposure Notification API. Is this about to be fixed soon, is it the App code that's missing something to handle this, or is there some required setting I am missing to make this work?

Use the good maximum risk score on iOS instead of the bad one

As you see on Apple's documentation (https://developer.apple.com/documentation/exposurenotification/enexposuredetectionsummary). ENExposureDetectionSummary contains both maximumRiskScore and metadata["maximumRiskScoreFullRange"]. maximumRiskScore is limited to 255. I was recently talking to someone from Apple who mentioned that maximumRiskScore is there because they just had to freeze the API at some point, not because it's actually useful. He recommended that we use the value in metadata, so it's metadata["maximumRiskScoreFullRange"] that we want to use. If I understand ExposureNotification.ios.cs right, then we're getting ENExposureDetectionSummary.maximumRiskScore via ExposureDetectionSummary.MaximumRiskScore. Could you replace it with the "riskScoreSumFullRange" value in metadata or add another field which uses this to ExposureDetectionSummary? Google's ExposureSummary.maximumRisk score is already a value from 0 to 4096 (i.e. a full-range value, because the max score is 8^4=4096. Each factor is 1 to 8. Weights are reserved for future use) according to their documentation.

App Crashes When Opting in

Hey guys,

App crashes for me when install on my fully updated iOS 13.5. I have Xcode Version 11.5 beta (11N605c), and have it selected under SDK manager in my Visual Studio. Do you have any advice for me, or can I provide any more info?

Thank you!

Error Domain=NSOSStatusErrorDomain Code=-71148 "kInvalidatedErr (XPC connection invalidated)" UserInfo={NSLocalizedDescription=kInvalidatedErr (XPC connection invalidated), cuErrorDesc=kInvalidatedErr (XPC connection invalidated), cuErrorMsg=XPC connection invalidated}

Determine the defaults

For some things, we are probably using "developer" defaults and we should now look at making sure this is not using "bad" values. One thing would be whether or not the default to delete or flag processed items is selected.

Init() is not working on iOS due to Xamarin.iOS bug in current stable release.

Hello,

I was investigating the functionality of Init() API on iOS using cross-platform Xamarin.ExposureNotification library, and see that it does not work as it is intended to.

During my tests, I discovered that the background task is not scheduled at all and in fact is never called from the background. It basically means that UpdateKeysFromServer(), which is perhaps one of the most important APIs that allows to detect exposures regularly, is not called from background. In our project, we call Xamarin.ExposureNotifications.ExposureNotification.Init() from the AppDelegate's FinishedLaunching() method.

So I implemented the scheduling task myself, the same way it is done by you guys in the Init() API but without PlatformIsEnabled() check and with hardcoded task ID for our project (bundle id + ".exposure-notification"). I did it to secure that the task would be registered by BGTaskScheduler and executed by iOS not depending on any conditions.

By doing this, finally, I spotted in VS debug console the execution of the task from the background. However, it failed with an exception with the following error message:

Cannot create an instance of BackgroundTasks.BGTask because it is an abstract class

Further search led me to this issue in Xamarin.iOS project: xamarin/xamarin-macios#7456

As I see it, the way I implemented the task by reflecting how it is done in the cross-platform Xamarin.ExposureNotification library will not work due to the bug in current Xamarin.iOS release. Which means that until the fix xamarin/xamarin-macios@c2a220d appears in the stable, or at least the next preview release, the task will not be properly scheduled and executed in the background using the new iOS 13 BGTaskScheduler.

I would really like to hear some thoughts about this issue from Xamarin.ExposureNotification dev team. The way I see it at the moment, it is not possible to release Xamarin.ExposureNotification library without coordination with the Xamarin.iOS release that will include the fix xamarin/xamarin-macios@c2a220d. It looks also that it is not possible to implement a workaround using deprecated API as proposed in xamarin/xamarin-macios#7456 (comment) by @brminnick since we need to do it iOS 13 way via BGTaskScheduler in order to specify the id of the task. And this is the desired way to schedule the task in the background because only this way iOS ensures priority and more time for execution when executing this task:

The BackgroundTask framework detects apps that contain the Exposure Notification entitlement and a background task that ends in exposure-notification. The operating system automatically launches these apps when they aren’t running and guarantees them more background time to ensure that the app can test and report results promptly.

src: https://developer.apple.com/documentation/exposurenotification/building_an_app_to_notify_users_of_covid-19_exposure

Thank you!

Add the ability to adjust bgRepeatInterval on Android

Calling Init() does PlatformScheduleFetch(), which schedules a periodic work request on Android. Currently, the repeat interval is 6 hours (bgRepeatInterval). We would like to change the repeat interval. There is a function called ConfigureBackgroundWorkRequest(), but it is not referenced anywhere and it's not accessible to the app using the cross-platform library. Is the existence of this function a sign that the ability to change bgRequestBuilder and bgRepeatInterval will be added soon?

Missing fields in ExposureDetectionSummary and ExposureConfiguration

Hi, the current implementation of ExposureDetectionSummary is missing fields for: AttenuationDurations. Note that the Apple API has extra data under the metadata for this class.

In addition, the implementation of ExposureConfiguration is missing:
durationAtAttenuationThresholds. The ExposureConfiguration parameter durationAtAttenuationThresholds is present in the
Google documentation.

Do note that in the Apple documentation for the ExposureConfiguration durationAtAttenuationThresholds is contained within the Metadata, under the key
"attenuationDurationThresholds"

ExposureConfigurations are failing when detectingExposures

Hello @Redth , we are encountering problems we believe are connected to the Configuration. After we connected the code to our server and managed to retrieve files from it, we encountered stack traces that suggest there are problems with the ExposureConfigurations.

Exceptions are thrown when we run:
await Xamarin.ExposureNotifications.ExposureNotification.UpdateKeysFromServer();

In the android part we do think the first line before the stack trace is quite relevant to the problem as it may suggest the configuration mapping is failing somewhere:

[monodroid-assembly] typemap: unable to find mapping to a managed type from Java type 'com/google/android/gms/tasks/zzu'
It is possible to inspect the zzu file in Android Studio but it is kind of obfuscated and is a class that extends Task.

Hit shift twice in Android Studio and search "com/google/android/gms/tasks/zzu" to see it

On Android we are receiving this stack trace:

Android.Gms.Common.Apis.ApiException: 10: Invalid file content: {ParcelFileDescriptor: java.io.FileDescriptor@1ef46ee}
  at Xamarin.ExposureNotifications.ExposureNotification.PlatformDetectExposuresAsync (System.Collections.Generic.IEnumerable`1[T] keyFiles, System.Threading.CancellationToken cancellationToken) [0x000ea] in /Users/tormah/Desktop/Covid/Covid2/NDB_corona_app/NDB.Covid19/Xamarin.ExposureNotification/ExposureNotification.android.cs:168 
  at Xamarin.ExposureNotifications.ExposureNotification+<>c__DisplayClass13_0.<UpdateKeysFromServer>b__0 (System.Collections.Generic.IEnumerable`1[T] downloadedFiles) [0x001c4] in /Users/tormah/Desktop/Covid/Covid2/NDB_corona_app/NDB.Covid19/Xamarin.ExposureNotification/ExposureNotification.shared.cs:115 
  at NDB.Covid19.Base.AppleGoogle.ExposureNotification.ExposureNotificationHandler.FetchExposureKeyBatchFilesFromServerAsync (System.Func`2[T,TResult] submitBatches, System.Threading.CancellationToken cancellationToken) [0x0042c] in /Users/tormah/Desktop/Covid/Covid2/NDB_corona_app/NDB.Covid19/NDB.Covid19.Base.AppleGoogle/ExposureNotification/ExposureNotificationHandler.cs:177 
  at Xamarin.ExposureNotifications.ExposureNotification.UpdateKeysFromServer (System.Threading.CancellationToken cancellationToken) [0x0006d] in /Users/tormah/Desktop/Covid/Covid2/NDB_corona_app/NDB.Covid19/Xamarin.ExposureNotification/ExposureNotification.shared.cs:88 
  at NDB.Covid19.Base.AppleGoogle.ViewModels.ENDeveloperToolsViewModel.PullKeysFromServer () [0x0002c] in /Users/tormah/Desktop/Covid/Covid2/NDB_corona_app/NDB.Covid19/NDB.Covid19.Base.AppleGoogle/ViewModels/ENDeveloperToolsViewModel.cs:110 
  --- End of managed Android.Gms.Common.Apis.ApiException stack trace ---
com.google.android.gms.common.api.ApiException: 10: Invalid file content: {ParcelFileDescriptor: java.io.FileDescriptor@1ef46ee}
	at com.google.android.gms.common.api.internal.TaskUtil.setResultOrApiException(com.google.android.gms:play-services-base@@17.1.0:6)
	at com.google.android.gms.common.api.internal.TaskUtil.setResultOrApiException(com.google.android.gms:play-services-base@@17.1.0:2)
	at com.google.android.gms.internal.nearby.zzae.onResult(com.google.android.gms:play-services-nearby@@18.0.2-eap:2)
	at com.google.android.gms.common.api.internal.IStatusCallback$Stub.dispatchTransaction(com.google.android.gms:play-services-base@@17.1.0:11)
	at com.google.android.gms.internal.base.zaa.onTransact(com.google.android.gms:play-services-base@@17.1.0:13)
	at android.os.Binder.execTransact(Binder.java:735)

I believe the issue I created a few days ago is related as it is referring to the variable that was previously missing attenuationDurationThresholds. The main takeaway from the stack trace below seems to be this:

this class is not key value coding-compliant for the key attenuationDurationThresholds

On iOS we are receiving this stack trace:

Foundation.MonoTouchException: Objective-C exception thrown.  Name: NSUnknownKeyException Reason: [<__NSFrozenDictionaryM 0x282e3e340> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key attenuationDurationThresholds.
Native stack trace:
	0   CoreFoundation                      0x00000001bd2787a8 50CF3336-313F-3A7D-9048-CB1ED8EC3368 + 1222568
	1   libobjc.A.dylib                     0x00000001bcf9abcc objc_exception_throw + 56
	2   CoreFoundation                      0x00000001bd17da58 50CF3336-313F-3A7D-9048-CB1ED8EC3368 + 195160
	3   Foundation                          0x00000001bd55e50c C82F8A4F-3D0F-33DB-8D40-C1E8BEF27E56 + 206092
	4   NDB.Covid19.iOS.AppleAPI            0x00000001014b0000 NDB.Covid19.iOS.AppleAPI + 5111808
	5   NDB.Covid19.iOS.AppleAPI            0x000000010147bf98 NDB.Covid19.iOS.AppleAPI + 4898712
	6   NDB.Covid19.iOS.AppleAPI            0x00000001024c2188 NDB.Covid19.iOS.AppleAPI + 21963144
	7   NDB.Covid19.iOS.AppleAPI            0x00000001011a144c NDB.Covid19.iOS.AppleAPI + 1905740
	8   NDB.Covid19.iOS.AppleAPI            0x0000000101127efc NDB.Covid19.iOS.AppleAPI + 1408764
	9   NDB.Covid19.iOS.AppleAPI            0x0000000101127cfc NDB.Covid19.iOS.AppleAPI + 1408252
	10  NDB.Covid19.iOS.AppleAPI            0x00000001011a1308 NDB.Covid19.iOS.AppleAPI + 1905416
	11  NDB.Covid19.iOS.AppleAPI            0x0000000101144228 NDB.Covid19.iOS.AppleAPI + 1524264
	12  NDB.Covid19.iOS.AppleAPI            0x0000000101477dbc NDB.Covid19.iOS.AppleAPI + 4881852
	13  NDB.Covid19.iOS.AppleAPI            0x000000010138e770 NDB.Covid19.iOS.AppleAPI + 3925872
	14  NDB.Covid19.iOS.AppleAPI            0x00000001025c0f80 mono_pmip + 28148
	15  NDB.Covid19.iOS.AppleAPI            0x000000010267c45c mono_pmip + 795344
	16  NDB.Covid19.iOS.AppleAPI            0x000000010267fcc0 mono_pmip + 809780
	17  NDB.Covid19.iOS.AppleAPI            0x0000000100fd54c0 NDB.Covid19.iOS.AppleAPI + 21696
	18  NDB.Covid19.iOS.AppleAPI            0x0000000100fdf230 NDB.Covid19.iOS.AppleAPI + 62000
	19  Foundation                          0x00000001bd662f78 C82F8A4F-3D0F-33DB-8D40-C1E8BEF27E56 + 1273720
	20  CoreFoundation                      0x00000001bd1f6c18 50CF3336-313F-3A7D-9048-CB1ED8EC3368 + 691224
	21  CoreFoundation                      0x00000001bd1f6b70 50CF3336-313F-3A7D-9048-CB1ED8EC3368 + 691056
	22  CoreFoundation                      0x00000001bd1f62f8 50CF3336-313F-3A7D-9048-CB1ED8EC3368 + 688888
	23  CoreFoundation                      0x00000001bd1f1328 50CF3336-313F-3A7D-9048-CB1ED8EC3368 + 668456
	24  CoreFoundation                      0x00000001bd1f0ce8 CFRunLoopRunSpecific + 424
	25  GraphicsServices                    0x00000001c733b38c GSEventRunModal + 160
	26  UIKitCore                           0x00000001c131f444 UIApplicationMain + 1932
	27  NDB.Covid19.iOS.AppleAPI            0x00000001014b9118 NDB.Covid19.iOS.AppleAPI + 5148952
	28  NDB.Covid19.iOS.AppleAPI            0x0000000101458bc0 NDB.Covid19.iOS.AppleAPI + 4754368
	29  NDB.Covid19.iOS.AppleAPI            0x0000000101458b44 NDB.Covid19.iOS.AppleAPI + 4754244
	30  NDB.Covid19.iOS.AppleAPI            0x0000000100ff2c04 NDB.Covid19.iOS.AppleAPI + 142340
	31  NDB.Covid19.iOS.AppleAPI            0x000000010138e770 NDB.Covid19.iOS.AppleAPI + 3925872
	32  NDB.Covid19.iOS.AppleAPI            0x00000001025c0f80 mono_pmip + 28148
	33  NDB.Covid19.iOS.AppleAPI            0x000000010267c45c mono_pmip + 795344
	34  NDB.Covid19.iOS.AppleAPI            0x00000001026826b4 mono_pmip + 820520
	35  NDB.Covid19.iOS.AppleAPI            0x000000010259f538 NDB.Covid19.iOS.AppleAPI + 22869304
	36  NDB.Covid19.iOS.AppleAPI            0x000000010275f020 _Z9__isctypeim + 62652
	37  NDB.Covid19.iOS.AppleAPI            0x0000000100febf84 NDB.Covid19.iOS.AppleAPI + 114564
	38  libdyld.dylib                       0x00000001bd0788f0 90BD401C-9E8F-354E-A74F-D4C152DEB1D8 + 6384

  at ObjCRuntime.Runtime.ThrowNSException (System.IntPtr ns_exception) [0x00000] in /Library/Frameworks/Xamarin.iOS.framework/Versions/13.18.2.1/src/Xamarin.iOS/ObjCRuntime/Runtime.cs:406 
  at ObjCRuntime.Runtime.throw_ns_exception (System.IntPtr exc) [0x00000] in /Users/builder/jenkins/workspace/xamarin-macios/xamarin-macios/runtime/Delegates.generated.cs:128 
  at (wrapper native-to-managed) ObjCRuntime.Runtime.throw_ns_exception(intptr)
  at (wrapper managed-to-native) ObjCRuntime.Messaging.void_objc_msgSend_IntPtr_IntPtr(intptr,intptr,intptr,intptr)
  at Foundation.NSObject.SetValueForKey (Foundation.NSObject value, Foundation.NSString key) [0x0002a] in /Library/Frameworks/Xamarin.iOS.framework/Versions/13.18.2.1/src/Xamarin.iOS/NSObject.g.cs:547 
  at Xamarin.ExposureNotifications.ExposureNotification.GetConfigurationAsync () [0x001dd] in /Users/tormah/Desktop/Covid/Covid2/NDB_corona_app/NDB.Covid19/Xamarin.ExposureNotification/ExposureNotification.ios.cs:54 
  at (wrapper managed-to-native) ObjCRuntime.Messaging.void_objc_msgSend_IntPtr_IntPtr(intptr,intptr,intptr,intptr)
  at Foundation.NSObject.SetValueForKey (Foundation.NSObject value, Foundation.NSString key) [0x0002a] in /Library/Frameworks/Xamarin.iOS.framework/Versions/13.18.2.1/src/Xamarin.iOS/NSObject.g.cs:547 
  at Xamarin.ExposureNotifications.ExposureNotification.GetConfigurationAsync () [0x001dd] in /Users/tormah/Desktop/Covid/Covid2/NDB_corona_app/NDB.Covid19/Xamarin.ExposureNotification/ExposureNotification.ios.cs:54 
  at Xamarin.ExposureNotifications.ExposureNotification.PlatformDetectExposuresAsync (System.Collections.Generic.IEnumerable`1[T] keyFiles, System.Threading.CancellationToken cancellationToken) [0x0003c] in /Users/tormah/Desktop/Covid/Covid2/NDB_corona_app/NDB.Covid19/Xamarin.ExposureNotification/ExposureNotification.ios.cs:157 
  at Xamarin.ExposureNotifications.ExposureNotification+<>c__DisplayClass13_0.<UpdateKeysFromServer>b__0 (System.Collections.Generic.IEnumerable`1[T] downloadedFiles) [0x001d0] in /Users/tormah/Desktop/Covid/Covid2/NDB_corona_app/NDB.Covid19/Xamarin.ExposureNotification/ExposureNotification.shared.cs:108 
  at NDB.Covid19.Base.AppleGoogle.ExposureNotification.ExposureNotificationHandler.FetchExposureKeyBatchFilesFromServerAsync (System.Func`2[T,TResult] submitBatches, System.Threading.CancellationToken cancellationToken) [0x0051e] in /Users/tormah/Desktop/Covid/Covid2/NDB_corona_app/NDB.Covid19/NDB.Covid19.Base.AppleGoogle/ExposureNotification/ExposureNotificationHandler.cs:177 
  at Xamarin.ExposureNotifications.ExposureNotification.UpdateKeysFromServer (System.Threading.CancellationToken cancellationToken) [0x0006d] in /Users/tormah/Desktop/Covid/Covid2/NDB_corona_app/NDB.Covid19/Xamarin.ExposureNotification/ExposureNotification.shared.cs:88 
  at NDB.Covid19.Base.AppleGoogle.ViewModels.ENDeveloperToolsViewModel.PullKeysFromServer () [0x0002c] in /Users/tormah/Desktop/Covid/Covid2/NDB_corona_app/NDB.Covid19/NDB.Covid19.Base.AppleGoogle/ViewModels/ENDeveloperToolsViewModel.cs:110 	0   CoreFoundation                      0x00000001bd2787a8 50CF3336-313F-3A7D-9048-CB1ED8EC3368 + 1222568
	1   libobjc.A.dylib                     0x00000001bcf9abcc objc_exception_throw + 56
	2   CoreFoundation                      0x00000001bd17da58 50CF3336-313F-3A7D-9048-CB1ED8EC3368 + 195160
	3   Foundation                          0x00000001bd55e50c C82F8A4F-3D0F-33DB-8D40-C1E8BEF27E56 + 206092
	4   NDB.Covid19.iOS.AppleAPI            0x00000001014b0000 NDB.Covid19.iOS.AppleAPI + 5111808
	5   NDB.Covid19.iOS.AppleAPI            0x000000010147bf98 NDB.Covid19.iOS.AppleAPI + 4898712
	6   NDB.Covid19.iOS.AppleAPI            0x00000001024c2188 NDB.Covid19.iOS.AppleAPI + 21963144
	7   NDB.Covid19.iOS.AppleAPI            0x00000001011a144c NDB.Covid19.iOS.AppleAPI + 1905740
	8   NDB.Covid19.iOS.AppleAPI            0x0000000101127efc NDB.Covid19.iOS.AppleAPI + 1408764
	9   NDB.Covid19.iOS.AppleAPI            0x0000000101127cfc NDB.Covid19.iOS.AppleAPI + 1408252
	10  NDB.Covid19.iOS.AppleAPI            0x00000001011a1308 NDB.Covid19.iOS.AppleAPI + 1905416
	11  NDB.Covid19.iOS.AppleAPI            0x0000000101144228 NDB.Covid19.iOS.AppleAPI + 1524264
	12  NDB.Covid19.iOS.AppleAPI            0x0000000101477dbc NDB.Covid19.iOS.AppleAPI + 4881852
	13  NDB.Covid19.iOS.AppleAPI            0x000000010138e770 NDB.Covid19.iOS.AppleAPI + 3925872
	14  NDB.Covid19.iOS.AppleAPI            0x00000001025c0f80 mono_pmip + 28148
	15  NDB.Covid19.iOS.AppleAPI            0x000000010267c45c mono_pmip + 795344
	16  NDB.Covid19.iOS.AppleAPI            0x000000010267fcc0 mono_pmip + 809780
	17  NDB.Covid19.iOS.AppleAPI            0x0000000100fd54c0 NDB.Covid19.iOS.AppleAPI + 21696
	18  NDB.Covid19.iOS.AppleAPI            0x0000000100fdf230 NDB.Covid19.iOS.AppleAPI + 62000
	19  Foundation                          0x00000001bd662f78 C82F8A4F-3D0F-33DB-8D40-C1E8BEF27E56 + 1273720
	20  CoreFoundation                      0x00000001bd1f6c18 50CF3336-313F-3A7D-9048-CB1ED8EC3368 + 691224
	21  CoreFoundation                      0x00000001bd1f6b70 50CF3336-313F-3A7D-9048-CB1ED8EC3368 + 691056
	22  CoreFoundation                      0x00000001bd1f62f8 50CF3336-313F-3A7D-9048-CB1ED8EC3368 + 688888
	23  CoreFoundation                      0x00000001bd1f1328 50CF3336-313F-3A7D-9048-CB1ED8EC3368 + 668456
	24  CoreFoundation                      0x00000001bd1f0ce8 CFRunLoopRunSpecific + 424
	25  GraphicsServices                    0x00000001c733b38c GSEventRunModal + 160
	26  UIKitCore                           0x00000001c131f444 UIApplicationMain + 1932
	27  NDB.Covid19.iOS.AppleAPI            0x00000001014b9118 NDB.Covid19.iOS.AppleAPI + 5148952
	28  NDB.Covid19.iOS.AppleAPI            0x0000000101458bc0 NDB.Covid19.iOS.AppleAPI + 4754368
	29  NDB.Covid19.iOS.AppleAPI            0x0000000101458b44 NDB.Covid19.iOS.AppleAPI + 4754244
	30  NDB.Covid19.iOS.AppleAPI            0x0000000100ff2c04 NDB.Covid19.iOS.AppleAPI + 142340
	31  NDB.Covid19.iOS.AppleAPI            0x000000010138e770 NDB.Covid19.iOS.AppleAPI + 3925872
	32  NDB.Covid19.iOS.AppleAPI            0x00000001025c0f80 mono_pmip + 28148
	33  NDB.Covid19.iOS.AppleAPI            0x000000010267c45c mono_pmip + 795344
	34  NDB.Covid19.iOS.AppleAPI            0x00000001026826b4 mono_pmip + 820520
	35  NDB.Covid19.iOS.AppleAPI            0x000000010259f538 NDB.Covid19.iOS.AppleAPI + 22869304
	36  NDB.Covid19.iOS.AppleAPI            0x000000010275f020 _Z9__isctypeim + 62652
	37  NDB.Covid19.iOS.AppleAPI            0x0000000100febf84 NDB.Covid19.iOS.AppleAPI + 114564
	38  libdyld.dylib                       0x00000001bd0788f0 90BD401C-9E8F-354E-A74F-D4C152DEB1D8 + 6384

Could any of you help us, any help is tremendously appreciated!

Apple uses protocol buffers to make files to submit in beta2

They switched to requiring NSUrl[] of files to process based on the structure of a specific protocol buffer (https://developer.apple.com/documentation/exposurenotification/enmanager/3586331-detectexposures ). Android looks like it may have something similar with file descriptors as an option to pass in, presumably they cooperated on this format and maybe we can make the server actually just serve up raw files to download and pass into the api instead? We need to investigate.

Make the mobile apps configurable

Right now there are consts, but it might be nice to get all the configuration points into some json file that is loaded and used. This way, the code is pretty much boilerplate and just a few assets need changing.

Android: StartAsync resolves too fast

When we run StartAsync method with bluetooth OFF it correctly shows us a dialog and after clicking ok it turns the BT on. However if we check status right after that with GetStatusAsync() it returns BluetoothOff as adapter haven't manage it to start fast enough. Because of that we need to start again so we see the dialog for the second time.
I think the StartAsync should wait until adapter will be enabled and then resolve.

Issue observed on Xiaomi Redmi Note 8T with Android 9 and Huawei Mate 20 lite with Android 10

Main Branch?

I noticed the addition of a "Main" Branch. And I saw some comments on twitter from the team. So which is the primary branc? "Main" or "Master"?

Any plans get and confirm phone numbers from users?

Are there any plans to prompt the user to enter their phone number and otp?

That's how TraceTogether works, and it gives the local authority more possibilities when deciding on their protocol. IE they can call potentially infected people or send them texts, instead of just hoping they check the app or respond to push notifications.

I understand that takes away from users' privacy and that's an argument against doing this.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.