In order to send an Android push message from a server, two pieces of information are required:
A Sender Id, AKA Project Id, is used in the app side. There should be no more than one id for each app.
A Server key for contacting GCM. There might be several Server Keys for a single app so that if one is compromised it can be replaced.
The common wisdom says that the sender id should be apparent in my project page, but I can't seem to find it - any idea where is it?
After 20 minutes of agony, I found the problem - I was in the API section of the console (where the server keys are), and I needed the main console page (where the project id / sender id is).
Choose Google Cloud Platform:
The numerical project id appears in the center of the screen.
I found the sender ID in another way
Choose the menu in the top right
menu Screen
Choose Project Information
Related
Got a strange issue with our notification hub on Azure. I'm using Service Bus Explorer to view what devices are registered.
I can only seem to get a max of 2 IOS devices registered at one time. When a new device registers it overwrites one of the existing ones. The 'RegistrationId' stays the same on both devices but the 'PNSHandle' changes as expected.
I've updated the provisioning profile on the Apple Developer portal and also created a new certificate for deployment as I was worried it may be tied to some sort of sandbox certificate/profile.
Any suggestions would be great :)
Thanks
Thanks for the response, I ended up passing through the unique ID generated by the 'react-native-device-info' library to an API on my azure gateway. Then dealing with the registration from there. The library 'react-native-azurenotificationhub' I tried using was the issue.
Posted the comment as answer. --Just to highlight the difference on installation vs registration: The installation or registration (depending on the API you are using), is tied uniquely to a single device through its Platform Notification Service (PNS) unique ID. If you have two devices, this means that you will have two different installations/registrations.
Thanks for the sharing additional info and update,kurtis_dev
I'm writing an application which will be used in an enterprise, no outsiders.
This application should fetch data from API response and display it.
Each user has his own device, Ipad and should see only the data he is the owner of.
Problem i'm facing is identifying the device/user, so that API responds with only the information the user is supposed to see.
brief example of how it should work:
App is opened -> get unique id -> attach ID to API call -> receive appropiate response -> display data
As i imagine this ID should be static and not made upon installation of the app or generated.
I've tried getting UDID, Serial, MAC,- no luck, they're deprecated. Only managed to get .IdentifierForVendor, which is unique not in the way that i need.
So here is my question, are there any other options left?
Like fetching appleID name,email or should i make unique deployments for everyone separately?
Or a Log-in screen?
You could create a GUID for every App instance. However, apart from that you will have a hard time doing what you want.
These ways of identifying a device have been deprecated to ensure Advertisers and other malicious Apps cannot fingerprint a device easily.
If you don't want too much hassle authenticating everyone, you could apply a simpler scheme such as using a pin code, QR code, NFC tag or whatever you prefer.
However, if someone were to steal one of these enterprise devices and it would contain any secret information I would rather rely on something more secure as username and password, or even better something multi-factor.
Unique id's will have to be set by deploying the app from MDM. For example:
https://docs.jamf.com/9.9/casper-suite/administrator-guide/In-House_Apps.html
How should the application accept those variables, i dont know. Maybe it modifies .plist when deploying.
Solution i did was enforcing device name from MDM, so that users are unable to change it - and using that as the unique identifier.
I'm trying to get the Device ID via Google Tag Manager but got an error on iOS. After a quick search it seems that Apple blocked this.
Moreover, it seems that using idfa is not recommended (can lead to troubles to validate the app) and sometimes lead to unexpected errors.
What are my options here ?
Get the device ID via code and somehow (I don't know hate btw) push it to the data layer to retrieve it later via GTM ?
Find another unique ID ?
What would you suggest ?
Apple has blocked developers of using any kind of unique device id, like uniqueIdentifier, mac address, etc...
As you noted using the IDFA for this might get you in trouble, you are only allowed to use this for advertisement purpose.
There is the identifierForVendor, this ID is shared between all app from one developers. This ID will not change wil the user has any app on his device from the same developer.
The last option is to create a unique ID yourself and store this in the keychain where only you app(s) can access it.
I all cases you will have to push the value into tag manager yourself.
Google Analytics is showing message "Bad Event Tracking Code" for several my projects. Even for mobile app profile too.
"The message: "The Landing Pages report has a (not set) entry. Verify that tracking code for property (my app name) sends a _trackPageview hit and that it does this before sending any events."
Has somebody got similar issue?
and how to solve this issue because I read about this and can't figure out what is wrong.
I think an issue with you tracking code that have to generate with you google analytics account Here it is step by step description about how to Setting Up Google analytics for Your App
step:1
Go to www.google.com/analytics. The homepage should appear like so:
step:2:
If you do not have a Google account, you will need to create one now by selecting Create an Account on the top-right side of the page.
or sign in in this page.
Once you have logged in, you simply need to click the Access Google Analytics button on the top right.
Step:3
The first screen you see lists all of your accounts.
If you have clients, typically you will have one account set up for each.
If you are new to Google Analytics you will only have the first account you set up.
step:4
Select the Admin view on the top right.
To see the main dashboard area for managing your Accounts, Properties, and Views.
step:5
Select the Property drop-down and click on the Create new property item, like so:
step:6
Google then asks you to submit the details for the app you want to track.
Make sure to choose Mobile app at the top and enter the information as required.
In the Setting up your property section, enter "Cloud App" for the App Name.
step:7
After accepting the terms of service, the website takes you to a page with your tracking ID and the download link for the SDK.
Before you do anything else, write down your app’s Tracking ID, which will be of the form ID UA-XXXXXXXX-Y.
Keep the ID handy, because you will need it soon. For full of description please visit raywenderlich blog
I have received similar errors. However, after testing and checking all the tags, all seem to be in order. I read on PBS that these are false positive alerts, where the errors in fact in correct.
http://spiblog.pbs.org/2014/08/the-art-of-analytics-google-analytics.html
Scenario:
I "control" two different apps, App A and App B, both which the user has installed
App A is running
App A needs to obtain a string that was set by App B when App B last ran.
After obtaining the string, App A will still be running
User should not receive any feedback this communication is happening. E.g. no "switching animations" between A or B, no pop-ups, etc.
Constraints:
Apps are released under different vendors
Apps are already in the app store; updated versions will have this communication ability.
It is acceptable for the data stored in App B to be accessible to other apps on the device.
It is not acceptable for the data stored in App B to be visible to general third parties (e.g. if an external server is used, there needs to be some sort of secured scheme)
The data read should be able to occur immediately upon App A being opened after install. For instance, I cannot require the user of App A to enter log in credentials for an external communication service.
Must work on non-jailbroken devices.
This is seeming rather difficult to pull off in iOS7. Help is appreciated.
Tricky work around. Not recommended, but it will get the job done if you can't afford servers.
On the first app create a contact in the user's contacts book. Give it a generic name like "000 - NameOfAppB Data - Don't Delete" (I start with "000" so it goes to the bottom of the users contact book so they never see it, I also add "don't delete" so if the user does somehow find it they don't delete it hahaha) (who looks at contact books anyways). In the contact info under notes add your NSData in string format.
Then when app A is opened search for that contact, read the data, then delete the contact.
Apple does allow you to create and delete users contacts without their permission. (At least in 2011 they did, this may have changed).
This might serve your purpose
https://developer.apple.com/library/ios/documentation/Security/Reference/keychainservices/Reference/reference.html
I am not sure of its limitations though, i have seen implementations where credentials have been shared between apps.