חלוקת רשתות 5G מאפשרת לספקים לספק שיפורים בביצועי הרשת בתרחישי שימוש ספציפיים. במדריך הזה נסביר איך אפליקציה יכולה להשתמש בתכונה 'חיתוך רשתות'.
המדריך הזה מכיל גם הסבר על הפעלת תהליך ממשק המשתמש של שדרוג מנוי לחיתוך הרשת במקרים שבהם נדרש רכישה כדי שהאפליקציה תוכל לגשת לחיבור הפרימיום.
שלב 1: הצהרת כוונות לשימוש ביכולות פרימיום
כדי שנוכל לאשר את הבקשה של האפליקציה שלכם ליכולת חיתוך ברזולוציה גבוהה, האפליקציה צריכה להצהיר על הכוונה שלה לבקש את היכולת הזו במניפסט של האפליקציה.
אחרת, בקשת הרשת נכשלת עם הודעת השגיאה SecurityException
.
כדי לעשות זאת, צריך להצהיר על המאפיין PackageManager.PROPERTY_SELF_CERTIFIED_NETWORK_CAPABILITIES
בקובץ AndroidManifest.xml
ולכלול קובץ משאבים תואם בפורמט XML.
הצהרת יכולת בקובץ המניפסט נראית כך:
<property android:name="android.net.PROPERTY_SELF_CERTIFIED_NETWORK_CAPABILITIES"
android:resource="@xml/network_capabilities" />
קובץ המשאב התואם של network_capabilities.xml
נראה כך:
<network-capabilities-declaration> xmlns:android="http://schemas.android.com/apk/res/android">
<uses-network-capability android:name="NET_CAPABILITY_PRIORITIZE_LATENCY"/>
</network-capabilities-declaration>
שלב 2: בודקים אם האפשרות של מינוי Premium זמינה
קוראים ל-method של API requestNetwork()
כדי לקבוע אם היכולת של הפרימיום זמינה.
Context mContext;
Network mNetwork;
public void requestPremiumCapabilityNetwork(@NetCapability int capability) {
ConnectvityManager cm = mContext.getSystemService(ConnectivityManager.class);
NetworkRequest request = NetworkRequest.Builder()
.addCapability(capability)
.build();
cm.requestNetwork(request, new NetworkCallback() {
@Override
public void onAvailable(Network network) {
log("Premium capability %d network is available.", capability);
mNetwork = network;
}
@Override
public void onLost(Network network) {
log("Premium capability %d network is not available.", capability);
mNetwork = null;
}
});
}
כשיוצרים אובייקט NetworkRequest
, היכולת שמוסיפים לא זהה ליכולת שמעבירים ל-API של TelephonyManager
.
בטבלה הבאה מפורטת המיפוי של הקבועים מהקלאס TelephonyManager
לקבועים התואמים ב-NetworkCapabilities
.
קבוע TelephonyManager |
קבוע NetworkCapabilities |
---|---|
PREMIUM_CAPABILITY_PRIORITIZE_LATENCY |
NET_CAPABILITY_PRIORITIZE_LATENCY |
שלב 3: אם האפשרות של מינוי Premium לא זמינה, בודקים את הזמינות לרכישה
קוראים ל-method API isPremiumCapabilityAvailableForPurchase()
כדי לקבוע אם היכולת הפרימיום שנבחרה זמינה.
השיטה הזו מחזירה את הערך true
אם היכולת זמינה לרכישה מהספק באמצעות תהליך העבודה של ההודעה על שדרוג.
Context mContext;
public boolean isPremiumCapabilityAvailableForPurchase(@PremiumCapability int capability) {
TelephonyManager tm = mContext.getSystemService(TelephonyManager.class);
boolean isAvailable = tm.isPremiumCapabilityAvailableForPurchase(capability);
log("Premium capability %d %s available to purchase.",
capability,
isAvailable ? "is" : "is not");
return isAvailable;
}
שלב 4: הפעלת תהליך ההתראות למכירת חבילה משודרגת
אחרי שמוודאים שהתכונה בתשלום זמינה, צריך להפעיל באפליקציה את ההתראה על שדרוג לתוכנית בתשלום באמצעות הקריאה purchasePremiumCapability()
. אם המשתמש עדיין לא רכש את היכולת שצוינה וכל התנאים המוקדמים מתקיימים, המערכת תציג למשתמש התראה על כך שיכול להיות שיש אפשרויות לשיפור הביצועים אצל הספק שלו. אם המשתמש מקייש על ההתראה, הפלטפורמה פותחת את תצוגת האינטרנט של הספק כדי שתהליך הרכישה יוכל להמשיך.
Context mContext;
public void purchasePremiumCapability(@PremiumCapability int capability) {
TelephonyManager tm = mContext.getSystemService(TelephonyManager.class);
tm.purchasePremiumCapability(capability, Runnable::run, new Consumer<Integer>() {
@Override
public void accept(Integer result) {
log("Purchase premium capability %d result: %d", capability, result);
int purchaseResult = result;
}
});
}
פונקציית ה-callback parameter
שמועברת אל purchasePremiumCapability()
מחזירה קוד תוצאה לבקשת הרכישה.
קודי התוצאות PURCHASE_PREMIUM_CAPABILITY_RESULT_SUCCESS
ו-PURCHASE_PREMIUM_CAPABILITY_RESULT_ALREADY_PURCHASED
מייצגים תוצאות מוצלחות, שבהן האפליקציה יכולה להמשיך ולבקש את היכולת בתשלום שנבחרה.
קודי התוצאות ברשימה הבאה מייצגים בקשות רכישה שנכשלו. מידע נוסף זמין במסמך העזרה של ה-API.
PURCHASE_PREMIUM_CAPABILITY_RESULT_ALREADY_IN_PROGRESS
PURCHASE_PREMIUM_CAPABILITY_RESULT_CARRIER_DISABLED
PURCHASE_PREMIUM_CAPABILITY_RESULT_CARRIER_ERROR
PURCHASE_PREMIUM_CAPABILITY_RESULT_ENTITLEMENT_CHECK_FAILED
PURCHASE_PREMIUM_CAPABILITY_RESULT_FEATURE_NOT_SUPPORTED
PURCHASE_PREMIUM_CAPABILITY_RESULT_NETWORK_NOT_AVAILABLE
PURCHASE_PREMIUM_CAPABILITY_RESULT_NOT_DEFAULT_DATA_SUBSCRIPTION
PURCHASE_PREMIUM_CAPABILITY_RESULT_NOT_FOREGROUND
PURCHASE_PREMIUM_CAPABILITY_RESULT_PENDING_NETWORK_SETUP
PURCHASE_PREMIUM_CAPABILITY_RESULT_REQUEST_FAILED
PURCHASE_PREMIUM_CAPABILITY_RESULT_THROTTLED
PURCHASE_PREMIUM_CAPABILITY_RESULT_TIMEOUT
PURCHASE_PREMIUM_CAPABILITY_RESULT_USER_CANCELED
אם בקשת הרכישה נכשלת, יכול להיות שהאפליקציה תשתמש ברשת ברירת המחדל במקום זאת. אם לא ניתן למלא את הבקשה לחלק פרימיום, לא מתבצעת פעולה אוטומטית של חזרה למצב קודם.
תהליך UX למכירת מוצר או שירות נוסף (upsell) לפי פילוח
![בתהליך חוויית המשתמש מוצגת למשתמש התראה שפותחת גיליון אינטרנט של ספק שבו הוא יכול להשלים את הרכישה.](https://developer.android.com/static/images/develop/connectivity/5g/upsell-ux-flow.png?hl=he)