פילוח לפי רשת 5G מספק יכולת לספק שיפורי ביצועי רשת לשימוש ספציפי במקרים שונים. במדריך הזה מוסבר איך אפליקציה יכולה להפעיל את הפילוח של חוויית המשתמש (UX) כדי להגדיל את המכירות ברשת ולבקש חיבור פרימיום אם המשתמש מחליט לרכוש חיבור.
![בתהליך חוויית המשתמש מוצגת למשתמש התראה שפותחת ספק
בגיליון האינטרנט שבו ניתן להשלים את הרכישה.](https://developer.android.com/static/images/develop/connectivity/5g/upsell-ux-flow.png?hl=he)
הצהרה על כוונות של יכולות פרימיום
כדי שהמערכת תכבד את הבקשה של האפליקציה שלכם ליכולות של רשת, צריך לאשר את הבקשה
חייב להצהיר על כוונתו לבקש את היכולת הזו בקובץ המניפסט של האפליקציה.
אחרת, בקשת הרשת לא תקפיץ את השדה 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>
הפעלת תהליך הפילוח של רשת ה-upsell
הקוד לדוגמה הזה מדגים איך להפעיל את תהליך המכירה של מוצרים נוספים ולבקש יכולת פרימיום שנרכשה.
Context mContext;
Network mNetwork;
public void purchasePremiumCapability() {
TelephonyManager tm = mContext.getSystemService(TelephonyManager.class);
int capability = TelephonyManager.PREMIUM_CAPABILITY_PRIORITIZE_LATENCY;
if (tm.isPremiumCapabilityAvailableForPurchase(capability)) {
tm.purchasePremiumCapability(capability, Runnable::run, new Consumer<Integer>() {
@Override
public void accept(Integer result) {
Log.d("Purchase premium capability result: "
+ TelephonyManager.convertPurchaseResultToString(result));
switch (result) {
case /* success or already purchased */:
requestPremiumCapabilityNetwork();
break;
case /* temporary failure */:
// TODO: wait and retry
break;
case /* hard failure */:
// TODO: handle failure
break;
default:
Log.e("Unknown purchase result: " + result);
}
}
});
} else {
Log.e("Premium capability is not available for purchase.");
}
}
public void requestPremiumCapabilityNetwork() {
ConnectvityManager cm = mContext.getSystemService(ConnectivityManager.class);
NetworkRequest request = NetworkRequest.Builder()
.addCapability(NetworkCapabilities.NET_CAPABILITY_PRIORITIZE_LATENCY)
.build();
cm.requestNetwork(request, new NetworkCallback() {
@Override
public void onAvailable(Network network) {
Log.d("Application can now use the network with the premium capability.");
mNetwork = network;
}
@Override
public void onLost(Network network) {
Log.d("Premium capability network is no longer available.");
mNetwork = null;
// TODO: clean up anything relying on the premium capability network
}
});
}
בקטעים הבאים מתוארים השלבים המעורבים בתהליך זה מפורט.
שלב 1: בודקים אם יכולת הפרימיום זמינה
קוראים לפונקציה
isPremiumCapabilityAvailableForPurchase()
שיטת ה-API לקביעת
אם יכולת הפרימיום שנבחרה זמינה. השיטה הזו מחזירה את הערך true
אם היכולת זמינה לרכישה מהספק באמצעות האפשרות של מכירת מוצר או שירות נוסף (upsell)
תהליך עבודה של התראות.
שלב 2: מפעילים את תהליך ההתראה על upsell
אחרי שווידאת שאפשרות הפרימיום זמינה, האפליקציה צריכה להתקשר
purchasePremiumCapability()
כדי ליזום את תהליך ההודעה להגדלת המכירה. אם המשתמש עדיין לא רכש
היכולת שצוינה וכל התנאים המוקדמים מתקיימים, אז הפלטפורמה
מציגה למשתמש התראה שמיידעת אותו לגבי האפשרויות לשיפור הביצועים
ייתכן שהם זמינים מהספק שלהם. אם המשתמש יקיש על ההתראה,
הפלטפורמה פותחת את WebView של הספק כדי שאפשר יהיה להמשיך בתהליך הרכישה.
הקריאה החוזרת של parameter
שהועברה אל purchasePremiumCapability()
מחזירה
התוצאה של בקשת הרכישה.
קודי התוצאות
PURCHASE_PREMIUM_CAPABILITY_RESULT_SUCCESS
וגם
PURCHASE_PREMIUM_CAPABILITY_RESULT_ALREADY_PURCHASED
שמייצגות תוצאות מוצלחות שבהן האפליקציה יכולה להמשיך אל
יכולת הפרימיום שנבחרה.
קודי התוצאות ברשימה הבאה מייצגים בקשות רכישה שנכשלו. צפייה לקבלת מידע נוסף בנושא.
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
שלב 3: מבקשים חיבור פרימיום שנרכש
אם תהליך ההתראה להגדלת המכירה מחזיר קוד תקין
(PURCHASE_PREMIUM_CAPABILITY_RESULT_SUCCESS
או
PURCHASE_PREMIUM_CAPABILITY_RESULT_ALREADY_PURCHASED
), האפליקציה צריכה להשתמש
requestNetwork()
כדי לבקש רשת שעומדת בדרישות של היכולת המבוקשת. שימו לב שכאשר
בונים אובייקט NetworkRequest
, היכולת שמוסיפים לא זהה
יכולת שמועברת לממשקי ה-API של TelephonyManager
בשלבים הקודמים.
הטבלה הבאה ממפה את הקבועים מהמחלקה TelephonyManager
אל
קבועים תואמים ב-NetworkCapabilities
.
קבוע TelephonyManager |
קבוע NetworkCapabilities |
---|---|
PREMIUM_CAPABILITY_PRIORITIZE_LATENCY |
NET_CAPABILITY_PRIORITIZE_LATENCY |
אם בקשת הרכישה נכשלת, האפליקציה צריכה לבקש את ברירת המחדל ולהשתמש בה במקום זאת. אין התנהגות אוטומטית חלופית אם פלח הפרימיום בתשלום לא ניתן למלא את הבקשה.