Firebase App Distribution рдХреЗ iOS рдФрд░ Android SDK рдЯреВрд▓ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдирд╛ рдЬрд╝рд░реВрд░реА рдирд╣реАрдВ рд╣реИ. рдЗрдирдХреА рдорджрдж рд╕реЗ, рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ рдХреЛ рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рд╕реВрдЪрдирд╛рдПрдВ рджрд┐рдЦрд╛рдИ рдЬрд╛ рд╕рдХрддреА рд╣реИрдВ. рдпреЗ рд╕реВрдЪрдирд╛рдПрдВ рддрдм рджрд┐рдЦрддреА рд╣реИрдВ, рдЬрдм рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рдирдИ рдмрд┐рд▓реНрдб рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реЛрддреА рд╣реИрдВ. рдЗрд╕ рдЧрд╛рдЗрдб рдореЗрдВ, App Distribution iOS рдФрд░ Android SDK рдЯреВрд▓ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдХреЗ, рдЯреЗрд╕реНрдЯрд░ рдХреЗ рд▓рд┐рдП рдирдИ рдмрд┐рд▓реНрдб рд╕реВрдЪрдирд╛рдПрдВ рдмрдирд╛рдиреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдкрд╕рдВрдж рдХреЗ рдореБрддрд╛рдмрд┐рдХ рдмрдирд╛рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ.
рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ
рдЕрдЧрд░ рдЖрдкрдиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА A/B рдЯреЗрд╕реНрдЯрд┐рдВрдЧ рдирд╣реАрдВ рдмрдирд╛рдИ рд╣реИ, рддреЛ рдЕрдкрдиреЗ iOS рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ Firebase рдЬреЛрдбрд╝реЗрдВ.
рдкрд╣рд▓рд╛ рдЪрд░рдг: App Distribution Tester API рдХреЛ рдЪрд╛рд▓реВ рдХрд░рдирд╛
Google Cloud рдХрдВрд╕реЛрд▓ рдореЗрдВ рдЕрдкрдирд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЪреБрдиреЗрдВ.
Firebase App Testers API рдореЗрдВ рдЬрд╛рдХрд░, рдЪрд╛рд▓реВ рдХрд░реЗрдВ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ.
рджреВрд╕рд░рд╛ рдЪрд░рдг: рдЕрдкрдиреЗ рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ App Distribution рдЬреЛрдбрд╝рдирд╛
рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЧрдпрд╛ Podfile рдЦреЛрд▓реЗрдВ рдпрд╛
pod init
рдЪрд▓рд╛рдХрд░ рдПрдХ рдмрдирд╛рдПрдВ. рдЗрд╕рдХреЗ рдмрд╛рдж, рдЯрд╛рд░рдЧреЗрдЯ рд╕реЗрдХреНрд╢рди рдореЗрдВ рдпрд╣ рд▓рд╛рдЗрди рдЬреЛрдбрд╝реЗрдВ:pod 'FirebaseAppDistribution'
рдЕрдкрдиреЗ рдкреЙрдбрдлрд╝рд╛рдЗрд▓ рдХреА рдбрд╛рдпрд░реЗрдХреНрдЯреНрд░реА рдореЗрдВ,
pod install
рдЪрд▓рд╛рдПрдВ. рдЗрд╕рдХреЗ рдмрд╛рдж, рдмрдирд╛рдИ рдЧрдИ.xcworkspace
рдлрд╝рд╛рдЗрд▓ рдЦреЛрд▓реЗрдВ.рдЕрдкрдиреЗ
App
рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдпрд╛UIApplicationDelegate
рдореЗрдВ Firebase рдореЙрдбреНрдпреВрд▓ рдЗрдВрдкреЛрд░реНрдЯ рдХрд░реЗрдВ:Swift
import FirebaseCore import FirebaseAppDistribution
Objective-C
@import FirebaseCore; @import FirebaseAppDistribution;
рдЕрдкрдиреЗ рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдбреЗрд▓рд┐рдЧреЗрдЯ рдХреЗ
application(_:didFinishLaunchingWithOptions:)
рддрд░реАрдХреЗ рдореЗрдВ,FirebaseApp
рд╢реЗрдпрд░ рдХрд┐рдП рдЧрдП рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ:Swift
// Use Firebase library to configure APIs FirebaseApp.configure()
Objective-C
// Use Firebase library to configure APIs [FIRApp configure];
рдЕрдЧрд░ рд╕реНрд╡рд┐рдЬрд╝рд▓рд┐рдВрдЧ рдмрдВрдж рд╣реИ, рддреЛ рдЦреЛрд▓реЗ рдЧрдП рдХрд┐рд╕реА рднреА рдпреВрдЖрд░рдПрд▓ рдХреЛ App Distribution SDK рдЯреВрд▓ рдореЗрдВ рдкрд╛рд╕ рдХрд░реЗрдВ. рдЗрд╕рдХреЗ рд▓рд┐рдП, App Distribution рдХреЛ рд▓рд╛рдЧреВ рдХрд░реЗрдВ:
application(_:open:options:)
Swift
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool { if AppDistribution.appDistribution().application(application, open: url, options: options) { return true } // Handle other non-Firebase URLs here. return false }
Objective-C
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey, id> *)options { if ([[FIRAppDistribution appDistribution] application:app openURL:url options:options]) { return YES; } // Handle other non-Firebase URLs here. return NO; }
рдЖрдЦрд┐рд░ рдореЗрдВ, рдЕрдкрдиреЗ рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдлрд┐рд░ рд╕реЗ рдХрдВрдкрд╛рдЗрд▓ рдХрд░реЗрдВ.
рддреАрд╕рд░рд╛ рдЪрд░рдг: рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рджрд┐рдЦрдиреЗ рд╡рд╛рд▓реА рд╕реВрдЪрдирд╛рдПрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛
App Distribution SDK рдЯреВрд▓, рдЯреЗрд╕реНрдЯрд░ рдХреЗ рд▓рд┐рдП рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдмрд┐рд▓реНрдб рд╕реЗ рдЬреБрдбрд╝реА рд╕реВрдЪрдирд╛рдПрдВ рд╕реЗрдЯ рдЕрдк рдХрд░рдиреЗ рдХреЗ рджреЛ рддрд░реАрдХреЗ рдЙрдкрд▓рдмреНрдз рдХрд░рд╛рддрд╛ рд╣реИ: рд╕реВрдЪрдирд╛ рдХреЛ рдмреБрдирд┐рдпрд╛рджреА рддреМрд░ рдкрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛. рдЗрд╕рдореЗрдВ, рдЯреЗрд╕реНрдЯрд░ рдХреЛ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдЕрдкрдбреЗрдЯ рдФрд░ рд╕рд╛рдЗрди-рдЗрди рдХреЗ рдкрд╣рд▓реЗ рд╕реЗ рдмрдиреЗ рдбрд╛рдпрд▓реЙрдЧ рд╢рд╛рдорд┐рд▓ рд╣реЛрддреЗ рд╣реИрдВ. рджреВрд╕рд░рд╛ рддрд░реАрдХрд╛ рд╣реИ, рд╕реВрдЪрдирд╛ рдХреЛ рдРрдбрд╡рд╛рдВрд╕ рддрд░реАрдХреЗ рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛. рдЗрд╕рд╕реЗ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рд╣рд┐рд╕рд╛рдм рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдмрдирд╛рдиреЗ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдорд┐рд▓рддреА рд╣реИ. рдЕрдЧрд░ рдЖрдкрдиреЗ App Distribution рдПрд╕рдбреАрдХреЗ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдкрд╣рд▓реЗ рдХрднреА рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рд╣рдорд╛рд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рдЖрдк рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рд╕реВрдЪрдирд╛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рдмреБрдирд┐рдпрд╛рджреА рддрд░реАрдХреЗ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░реЗрдВ.
рдмреБрдирд┐рдпрд╛рджреА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди
checkForUpdate
рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдХреЗ, рдЯреЗрд╕реНрдЯрд░ рдХреЛ рд╕реВрдЪрдирд╛рдПрдВ рдЪрд╛рд▓реВ рдХрд░рдиреЗ рдХрд╛ рдкрд╣рд▓реЗ рд╕реЗ рдмрдирд╛ рд╣реБрдЖ рдбрд╛рдпрд▓реЙрдЧ рджрд┐рдЦрд╛рдПрдВ. рдЗрд╕рдХреЗ рдмрд╛рдж, рджреЗрдЦреЗрдВ рдХрд┐ рдХреЛрдИ рдирдпрд╛ рдмрд┐рд▓реНрдб рдЙрдкрд▓рдмреНрдз рд╣реИ рдпрд╛ рдирд╣реАрдВ. рдХреЙрд▓ рдХрд┐рдП рдЬрд╛рдиреЗ рдкрд░, рдпрд╣ рддрд░реАрдХрд╛ рдЗрд╕ рдХреНрд░рдо рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:
рдЗрд╕ рдХреБрдХреА рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЯреЗрд╕реНрдЯрд░ рдиреЗ рд╕реВрдЪрдирд╛рдПрдВ рдкрд╛рдиреЗ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдЪрд╛рд▓реВ рдХреА рд╣реИ рдпрд╛ рдирд╣реАрдВ. рдЗрд╕рдХреЗ рд▓рд┐рдП, рдЙрд╕реЗ рдЕрдкрдиреЗ Google рдЦрд╛рддреЗ рд╕реЗ App Distribution рдореЗрдВ рд╕рд╛рдЗрди рдЗрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ.
рдЕрдЧрд░ рдЯреЗрд╕реНрдЯрд░ рдиреЗ рдЕрдм рддрдХ рд╕реВрдЪрдирд╛рдПрдВ рдкрд╛рдиреЗ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдЪрд╛рд▓реВ рдирд╣реАрдВ рдХреА рд╣реИ, рддреЛ рдкрд╣рд▓реЗ рд╕реЗ рдмрдирд╛ рд╣реБрдЖ рдбрд╛рдпрд▓реЙрдЧ рджрд┐рдЦрддрд╛ рд╣реИ.
рдЪреЗрддрд╛рд╡рдиреА рдХреА рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рдЯреЗрд╕реНрдЯ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рд╕рд┐рд░реНрдлрд╝ рдПрдХ рдмрд╛рд░ рдЪрд╛рд▓реВ рдХрд░рдирд╛ рд╣реЛрддрд╛ рд╣реИ. рдпрд╣ рд╕реБрд╡рд┐рдзрд╛, рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╕рднреА рдЕрдкрдбреЗрдЯ рдореЗрдВ рдЪрд╛рд▓реВ рд░рд╣рддреА рд╣реИ. рдпрд╣ рд╕реБрд╡рд┐рдзрд╛, рдЯреЗрд╕реНрдЯ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рддрдм рддрдХ рдЪрд╛рд▓реВ рд░рд╣рддреА рд╣реИ, рдЬрдм рддрдХ рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдЕрдирдЗрдВрд╕реНрдЯреЙрд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рдпрд╛
signOutTester
рддрд░реАрдХреЗ рдХреЛ рдХреЙрд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛. рдЬрд╝реНрдпрд╛рджрд╛ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП, рдЗрд╕ рддрд░реАрдХреЗ рдХрд╛ рд░реЗрдлрд╝рд░рдВрд╕ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рджреЗрдЦреЗрдВ (Swift рдпрд╛ Objective-C).рдпрд╣ рдЯреЗрд╕реНрдЯрд░ рдХреЗ рд▓рд┐рдП, рдирдИ рдЙрдкрд▓рдмреНрдз рдмрд┐рд▓реНрдб рдХреА рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИ, рддрд╛рдХрд┐ рдЯреЗрд╕реНрдЯрд░ рдЙрдиреНрд╣реЗрдВ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░ рд╕рдХреЗ.
рдЕрдкрдиреЗ рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдХрд┐рд╕реА рднреА рд╕рдордп checkForUpdate()
рдХреЛ рдЪрд╛рд▓реВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ. рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрдкрдиреЗ рдЯреЗрд╕реНрдЯрд░ рдХреЛ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдХреЗ рджреМрд░рд╛рди, рдирдИ рдЙрдкрд▓рдмреНрдз рдмрд┐рд▓реНрдб рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ. рдЗрд╕рдХреЗ рд▓рд┐рдП, рдЕрдкрдиреЗ рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд░реВрдЯ рд╡реНрдпреВ рдХреЗ onAppear(perform:)
рдореЗрдВ checkForUpdate()
рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВ.
рдпрд╣рд╛рдВ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдпрд╣ рджреЗрдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЯреЗрд╕реНрдЯрд░ рдиреЗ рд╕реВрдЪрдирд╛рдПрдВ рдкрд╛рдиреЗ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдЪрд╛рд▓реВ рдХреА рд╣реИ рдпрд╛ рдирд╣реАрдВ. рд╕рд╛рде рд╣реА, рдЙрд╕рдХреЗ рдкрд╛рд╕ рдирдИ рдмрд┐рд▓реНрдб рдХрд╛ рдРрдХреНрд╕реЗрд╕ рд╣реИ рдпрд╛ рдирд╣реАрдВ. рдЕрдЧрд░ рдРрд╕рд╛ рд╣реИ, рддреЛ рдмрд┐рд▓реНрдб рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реЛрдиреЗ рдкрд░, рдПрдХ рдбрд╛рдпрд▓реЙрдЧ рджрд┐рдЦрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
Swift
AppDistribution.appDistribution().checkForUpdate(completion: { release, error in
if error != nil {
// Handle error
return
}
guard let release = release else {
return
}
// Customize your alerts here.
let title = "New Version Available"
let message = "Version \(release.displayVersion)(\(release.buildVersion)) is available."
let uialert = UIAlertController(title: title,message: message, preferredStyle: .alert)
uialert.addAction(UIAlertAction(title: "Update", style: UIAlertAction.Style.default) {
_ in
UIApplication.shared.open(release.downloadURL)
})
uialert.addAction(UIAlertAction(title: "Cancel", style: UIAlertAction.Style.cancel) {
_ in
})
// self should be a UIViewController.
self.present(uialert, animated: true, completion: nil)
})
Objective-C
[[FIRAppDistribution appDistribution]
checkForUpdateWithCompletion:^(FIRAppDistributionRelease *_Nullable release,
NSError *_Nullable error) {
if (error) {
// Handle error
return;
}
if (release) {
UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"New Version Available"
message:[NSString stringWithFormat:@"Version %@ (%@) is available.", release.displayVersion,
release.buildVersion] preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction *updateAction = [UIAlertAction actionWithTitle:@"Update"
style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
[[UIApplication sharedApplication] openURL:release.downloadURL options:@{}
completionHandler:nil];
}];
UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"Cancel"
style:UIAlertActionStyleCancel handler:^(UIAlertAction *action) {}];
[alert addAction:updateAction];
[alert addAction:cancelAction];
[self presentViewController:alert animated:YES completion:nil];
}
}];
рдРрдбрд╡рд╛рдВрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди
signInTester()
рдФрд░ isTesterSignedIn
рддрд░реАрдХреЛрдВ рд╕реЗ, рдЯреЗрд╕реНрдЯрд░ рдХреЗ рд╕рд╛рдЗрди-рдЗрди рдХрд░рдиреЗ рдХреЗ рдЕрдиреБрднрд╡ рдХреЛ рдЕрдкрдиреА рдкрд╕рдВрдж рдХреЗ рдореБрддрд╛рдмрд┐рдХ рдмрдирд╛рдиреЗ рдХреА рдЬрд╝реНрдпрд╛рджрд╛ рд╕реБрд╡рд┐рдзрд╛ рдорд┐рд▓рддреА рд╣реИ. рдЗрд╕рд╕реЗ, рдЯреЗрд╕реНрдЯрд░ рдХреЗ рд╕рд╛рдЗрди-рдЗрди рдХрд░рдиреЗ рдХрд╛ рдЕрдиреБрднрд╡, рдЖрдкрдХреЗ рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓реБрдХ рдФрд░ рдлрд╝реАрд▓ рд╕реЗ рдмреЗрд╣рддрд░ рддрд░реАрдХреЗ рд╕реЗ рдореЗрд▓ рдЦрд╛ рд╕рдХрддрд╛ рд╣реИ.
рдпрд╣рд╛рдВ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдпрд╣ рджреЗрдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЯреЗрд╕реНрдЯрд░ рдиреЗ рдЕрдкрдиреЗ Firebase App Distribution рдЯреЗрд╕реНрдЯрд░ рдЦрд╛рддреЗ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╕рд╛рдЗрди рдЗрди рдХрд┐рдпрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ. рдЗрд╕рд╕реЗ рдпрд╣ рддрдп рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рд╕рд╛рдЗрди-рдЗрди рдХрд░рдиреЗ рдХрд╛ рдпреВрдЬрд╝рд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ (рдпреВрдЖрдИ) рд╕рд┐рд░реНрдлрд╝ рдЙрди рдЯреЗрд╕реНрдЯрд░ рдХреЛ рджрд┐рдЦрд╛рдирд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдЕрдм рддрдХ рд╕рд╛рдЗрди рдЗрди рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ. рдЯреЗрд╕реНрдЯрд░ рдХреЗ рд╕рд╛рдЗрди рдЗрди рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, checkForUpdate()
рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рдпрд╣ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЯреЗрд╕реНрдЯрд░ рдХреЗ рдкрд╛рд╕ рдирдИ рдмрд┐рд▓реНрдб рдХрд╛ рдРрдХреНрд╕реЗрд╕ рд╣реИ рдпрд╛ рдирд╣реАрдВ.
Swift
// Sign in a tester without automatically checking for update
if (!AppDistribution.appDistribution().isTesterSignedIn) {
AppDistribution.appDistribution().signInTester (completion: { error in
// completion block for signInTester
if (error != nil) {
// handle failed sign in
return
}
// handle successful sign in
})
}
// Only check for update if tester is already signed in - do not prompt
if (AppDistribution.appDistribution().isTesterSignedIn) {
AppDistribution.appDistribution().checkForUpdate(completion: { release, error in
// completion block for check for update
})
}
Objective-C
// Sign in a tester without automatically checking for update
if(![[FIRAppDistribution appDistribution] isTesterSignedIn]) {
[[FIRAppDistribution appDistribution]
signInTesterWithCompletion:^(NSError *_Nullable error) {
// completion block for signInTester
if (error) {
// handle failed sign in
return;
}
// handle successful sign in
}];
}
// only check for update if tester is already signed in - do not prompt
if([[FIRAppDistribution appDistribution] isTesterSignedIn]) {
[[FIRAppDistribution appDistribution]
checkForUpdateWithCompletion:^(FIRAppDistributionRelease *_Nullable release,
NSError *_Nullable error) {
// completion block for check for update
}];
}
рдЕрдиреНрдп рддрд░реАрдХреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП, signOutTester()
,
Swift
рдФрд░ Objective-C рдХреЗ рд▓рд┐рдП App Distribution рд░реЗрдлрд╝рд░рдВрд╕ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рджреЗрдЦреЗрдВ.
рдЪреМрдерд╛ рдЪрд░рдг: рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдкреНрд░реЛрд╕реЗрд╕ рддреИрдпрд╛рд░ рдХрд░рдирд╛ рдФрд░ рдЙрд╕рдХреА рдЬрд╛рдВрдЪ рдХрд░рдирд╛
рдЖрдЦрд┐рд░ рдореЗрдВ, рдЕрдкрдирд╛ рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдПрдВ рдФрд░ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВ. рдЗрд╕рдХреЗ рд▓рд┐рдП, Firebase рдХрдВрд╕реЛрд▓ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдХреЗ, рдЯреЗрд╕реНрдЯрд░ рдХреЛ рдмрд┐рд▓реНрдб рдбрд┐рд╕реНрдЯреНрд░рд┐рдмреНрдпреВрдЯ рдХрд░реЗрдВ.
рд╕рд╛рдорд╛рдиреНрдп рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, App Distribution рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдЧрд╛рдЗрдб рдкрд░ рдЬрд╛рдПрдВ. рдЬреИрд╕реЗ:
- рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╡реНрдпрдХреНрддрд┐ рдХреЛ рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рд╕реВрдЪрдирд╛рдПрдВ рдирд╣реАрдВ рдорд┐рд▓ рд░рд╣реА рд╣реИрдВ
- рдЯреЗрд╕реНрдЯрд░ рдХреЛ рдПрдХ рд╕реЗ рдЬрд╝реНрдпрд╛рджрд╛ рдмрд╛рд░ Google рдореЗрдВ рд╕рд╛рдЗрди рдЗрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ