1. android 怎麼獲取 umeng 的 渠道信息
Andriod版本APP獲取umeng的渠道信息,可以讓技術人員在程序中嵌入渠道編碼,具體步驟如下:
進入友盟網站,注冊帳號,綁定友盟應用統計;
下載友盟SDK文件,由技術開發人員嵌入到APP程序代碼中,具體操作方法可以參考友盟網站的嵌入指南;
根據安卓版本不同的發布渠道,定義好channel ID;
修改代碼中與channel相關的代碼,比如將<meta-data android:value="Channel ID" android:name="UMENG_CHANNEL"/>中的Channel ID替換為您應用的推廣渠道名稱,channel id自定義。
對應每個渠道生成一一對應的APK安裝包;
將標記好Channel ID的渠道安裝包,在對應的渠道發布;
定時登錄友盟後台查看渠道數據。
2. 友盟-推送-Andorid-「標簽(tag)」是什麼,如何使用自定義標簽
友盟推送支持的篩選維度有「版本」、「渠道」、「地域」、「用戶活躍度」等,還有一個叫做「標簽」,「標簽」是什麼含義呢?該如何使用呢? 今天我們和大家聊聊這個話題。
先解釋下什麼是「標簽」:
提問者問到的「標簽」其實指的是App開發者結合自有的業務邏輯對該App的終端用戶打的「標簽」,我們也稱tag,這些「標簽」是App自己的標簽(舉個簡單的例子,App根據終端用戶是否注冊,可以給用戶打上「注冊賬號」和「未注冊賬號」的標簽),第三方開發平台是無法直接提供這樣的標簽的(但是可以開放打標簽介面,讓App開發者把標簽數據回傳到第三方伺服器上),因為具體的業務邏輯是在App這邊的。 第三方開放平台能提供的維度也僅是在用戶協議范圍內可以收集的欄位,比如「版本」、「渠道」、「機型」、「操作系統」等信息,這些維度可以認為是靜態的維度,其實App開發者自己也可以收集這些欄位,只不過交給第三方平台來做數據收集、存儲和計算更為方便,有興趣的讀者可以了解一下友盟推送收集的用戶協議欄位: 友盟 | 隱私政策。
下面我們給大家提供一些有代表性的垂直領域App結合自有業務邏輯給終端用戶打標簽的思路,希望對大家有幫助:
體育類App可以根據終端用戶看過的節目類型,給終端用戶打上「足球」、「籃球」等類目標簽。
兒童類App可以根據兒童的年齡分布,給終端用戶打上「0~1歲」、「1~3」歲、「3~5」歲之類的年齡結構標簽。
電商類App可以根據用戶的購買習慣推算出用戶性別,給終端用戶打上「男」、「女」標簽。
餐飲類App可以根據用戶的下單記錄以及點評,給終端用戶打上「川菜」、「粵菜」、「韓國料理」等標簽。
……
App自有的標簽體系對精細化運營來說是必需的,App運營人員可以根據這些用戶標簽來做精準推送、廣告定向投放、活動邀請等運營活動。既然標簽這么有用,接下來我們和大家聊聊如何在友盟推送中使用「標簽」維度,順帶也回答了提問者的第二個問題。
再來談談如何在友盟推送中使用「標簽」:
上文提到過雖然第三方開放平台無法直接給App開發者提供「標簽」維度,但是可以開放打標簽的介面,讓開發者把標簽數據回傳到第三方伺服器上。下面給大家講講友盟推送開放介面的形式,以及開發者如何使用開放的介面來把標簽數據回傳到友盟伺服器端:
圖中,黃色部分表示友盟推送提供的模塊兒,綠色部分部分表示App開發者自己的模塊兒。
方式1(推薦方式): App端直接調用友盟推送SDK提供的tag介面,由SDK負責把標簽數據回傳到友盟後端伺服器。 後期tag(標簽)的存儲、計算等邏輯都由友盟後端伺服器來負責。這種方式是推薦的方式,絕大部分開發者都採用這種打tag的方式。SDK端提供的調用介面有如下幾個:
mPushAgent.getTagManager().
添加標簽
public Result add(String... tags)
刪除標簽
public Result delete(String... tags)
清除所有標簽
public void reset()
獲取伺服器端的所有標簽
public List<String> list()
具體用法請參照我們的集成文檔: 友盟消息推送Android文檔
方式2: 開發者在自己的伺服器上通過調用友盟伺服器端提供的開放介面將該標簽數據回傳到友盟後端伺服器,效果和方式1一樣。 有這種需求的開發者不是太多,所以我們的文檔上沒有把這個介面列出來,有需求的開發者可以聯系msg-support at umeng dot com來獲取這個介面的文檔。
通過方式1或者方式2,開發者就把和自己App業務相關的標簽屬性維度放在友盟平台上了,這樣友盟推送間接的提供了「標簽」維度,和其它靜態維度一樣,「標簽」可以和這些維度一塊兒來使用(App自身業務邏輯結合友盟數據屬性),也可以單獨來使用(純App自身業務邏輯),開發者可以利用這些綜合維度來做更精準的推送,從而獲得更好的推送效果了。關於「精準推送」,感興趣的讀者可以參考我之前寫過的一篇文章: 友盟陳漠沙:「精準推送」是怎樣煉成的? - 友盟專欄 - 知乎專欄
開發者在使用標簽的過程中,可能會碰到這樣的問題,就是明明在SDK端已經調用了標簽介面,但是在友盟推送後台網站上並沒有顯示出剛剛打的標簽。這里需要和大家解釋一下為什麼「標簽」不能及時展現在我們的網站上,其實還是要區分一下「正式模式」和「測試模式」兩種case的,在「測試模式」下,測試設備的標簽是及時出現在網站後台的;在「正式模式下」,大概會有5~10分鍾的延遲。這是因為數據量規模決定的,測試設備數量少,所以我們能做到實時處理,線上真實設備數據量龐大,計算節點在計算的時候,會有一定的延遲。 所以開發者在集成測試階段,如果要測試tag功能的話,建議先把測試的設備在「測試模式」下添加為測試設備。關於「測試模式」的更多介紹,請參考友盟推送「測試模式」介紹。
最後,歡迎大家關注友盟消息推送的官方微博賬號"友盟推送",我們的官微會定期和大家share一些技術干貨。
3. 友盟-推送-Andorid-消息推送-打開通知消息進入特定Activity操作
要獲取參數的話 只能通過自定義打開行為,重寫dealWithCustomAction
在消息推送SDK里,有一個類UmengNotificationClickHandler,負責處理消息的點擊事件。 該類主要有四個成員方法:
public void launchApp(Context context, UMessage msg);
public void openUrl(Context context, UMessage msg);
public void openActivity(Context context, UMessage msg);
public void dealWithCustomAction(Context context, UMessage msg);
這四個方法,分別對應於四種打開方式。其中,launchApp、openUrl、openActivity這三個方法已經由消息推送SDK完成,而dealWithCustomAction則只是一個空的方法。 若開發者需要處理自定義行為,則可以重寫方法dealWithCustomAction();其中自定義行為的內容,存放在UMessage.custom中。下面是處理自定義行為的代碼:
/**
* 該Handler是在BroadcastReceiver中被調用,故
* 如果需啟動Activity,需添加Intent.FLAG_ACTIVITY_NEW_TASK
* */
UmengNotificationClickHandler notificationClickHandler = new UmengNotificationClickHandler(){
@Override
public void dealWithCustomAction(Context context, UMessage msg) {
Toast.makeText(context, msg.custom, Toast.LENGTH_LONG).show();
}
};
mPushAgent.setNotificationClickHandler(notificationClickHandler);
注意
以上代碼需在 Application 的onCreate() 中調用使用以下介面,而不是在Activity 中調用。如果在Activity中調用此介面,若應用進程關閉, 則設置的介面會無效。 請參考demo 應用代碼。
該Handler是在BroadcastReceiver中被調用。因此若需啟動Activity,需為Intent添加Flag:Intent.FLAG_ACTIVITY_NEW_TASK,否則無法啟動Activity。
若開發者想自己處理打開網頁、打開APP、打開Activity,可重寫相應的函數來實現。
4. Android分享圖片和視頻失敗,怎麼辦
目前實現一鍵分享功能的方式有兩種:
1.需要集成第三方官方SDK包,在獲得官方授權後調用其API來完成一鍵分享功能,例如使用友盟分享等
優點:無縫集成,功能多
缺點:需要集成官方的SDK包並通過申請官方的授權才可進行開發
2.不需要使用任何第三方SDK包,可以直接調起實現了分享功能的應用的activity來進行分享
優點:不需要使用任何第三方SDK包和申請官方授權
缺點:需要手機安裝你需要分享的應用(這一點非常重要,一開始測試的時候一直不成功,提示「沒有應用可執行此操作」,後來找了很久才發現是我手機沒有安裝相對應的應用,這也是不好方便的地方)
5. 如何實現友盟第三方登錄與分享
獲取友盟Appkey
如果你之前已經在友盟注冊了應用,並獲取到了Appkey,可以繼續使用它.
如果你尚未在友盟注冊開發者賬號,需要先注冊,注冊之後登錄你的賬號,點擊添加新應用,填寫完應用基本信息後,將進入"下載SDK並添加代碼"頁面,此頁面即可得到Appkey。
下載並安裝SDK
* 下載[SDK最新版](http://dev.umeng.com/social/android/sdk-download)
* 添加代碼和資源引用,我們提供了兩種方式,可以根據需求選擇
A.解壓SDK壓縮包,將文件夾中的social_sdk_library_project文件夾導入Eclipse,並在您的工程中添加對此項目的引用即可。
B.解壓SDK壓縮包,將文件夾中的'main/libs'和'main/res'文件夾復制到你的項目工程根目錄下(如使用'ADT 17'以下用戶需要手動添加'libs'下的jar文件到工程Path中),同時將需要添加的對應平台(platform文件夾下)的jar包和res文件放到你的工程目錄下 />
針對不平台所需要添加的數據
1 微信平台
2
3 <activity
4 android:name="com.umeng.example.wxapi.WXEntryActivity"
5 android:configChanges="keyboardHidden|orientation|screenSize"
6 android:exported="true"
7 android:screenOrientation="portrait"
8 android:theme="@android:style/Theme.Translucent.NoTitleBar" /> 9
10 人人網
11
12 <activity
13 android:name="com.renn.rennsdk.oauth.OAuthActivity"
14 android:configChanges="orientation|navigation|keyboardHidden" />15
16 騰訊
17
18<activity
19 android:name="com.tencent.tauth.AuthActivity"
20 android:launchMode="singleTask"
21 android:noHistory="true" >
22 <intent-filter>
23 <action android:name="android.intent.action.VIEW" />
24 <category android:name="android.intent.category.DEFAULT" />
25 <category android:name="android.intent.category.BROWSABLE" />
26 <data android:scheme="tencent100424468" />
27 </intent-filter>
28 </activity>
29 <activity android:name="com.tencent.connect.common.AssistActivity"
30 android:screenOrientation="portrait"
31 android:theme="@android:style/Theme.Translucent.NoTitleBar" />32
33 谷歌地圖
34
35 <uses-library
36 android:name="com.google.android.maps"
37 android:required="false" />
38 <uses-library android:name="android.test.runner" />39 facebook
40 <activity
41 android:name="com.facebook.FacebookActivity"
42 android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
43 android:label="@string/app_name"
44 android:theme="@android:style/Theme.Translucent.NoTitleBar" />
45 <provider android:name="com.facebook.FacebookContentProvider" android:authorities="com.facebook.app.FacebookContentProvider+appid"
46 android:exported="true" />
47 <meta-data
48 android:name="com.facebook.sdk.ApplicationId"
49 android:value="@string/facebook_app_id" />50
51 新浪微博
52
53 <activity
54 android:name=".WBShareActivity"
55 android:configChanges="keyboardHidden|orientation"
56 android:screenOrientation="portrait" >
57 <intent-filter>
58 <action android:name="com.sina.weibo.sdk.action.ACTION_SDK_REQ_ACTIVITY" />
59 <category android:name="android.intent.category.DEFAULT" />
60 </intent-filter>
61 </activity>
62 <activity
63 android:name="com.sina.weibo.sdk.component.WeiboSdkBrowser"
64 android:configChanges="keyboardHidden|orientation"
65 android:windowSoftInputMode="adjustResize"
66 android:exported="false" >
67 </activity>68
69 <service android:name="com.sina.weibo.sdk.net.DownloadService"
70 android:exported="false"></service>71
72 支付寶
73
74<activity
75 android:name=".apshare.ShareEntryActivity"
76 android:configChanges="keyboardHidden|orientation|screenSize"
77 android:exported="true"
78 android:screenOrientation="portrait"
79 android:theme="@android:style/Theme.Translucent.NoTitleBar" />
4. 打開平台選擇面板
4.1 各個平台的配置,建議放在全局Application或者程序入口
1 PlatformConfig.setWeixin("wx967daebe835fbeac", ""); //微信 appid appsecret
2 PlatformConfig.setSinaWeibo("3921700954","");//新浪微博 appkey appsecret
3
4 PlatformConfig.setYixin("");//易信 appkey
5
6 PlatformConfig.setRenren("201874","","");//人人 appid appkey appsecret
7 PlatformConfig.setQQZone("100424468", ""); // qq qzone appid appkey
8 PlatformConfig.setAlipay("2015111700822536");//alipay appid
說明:需要使用第三方公司api的平台,新浪,騰訊等,是需要去申請appkey的。人人豆瓣只能在伺服器端設置。其它需要配置appid的平台,如qq,微信,易信,twitter等都需要在本地設置。還有一部分平台需要在mainfest中配置,前面已經提到過。
授權
目前友盟社會化組件支持的第三方登錄平台為:新浪微博、QQ、微信、人人網、豆瓣。(特別說明:QQ空間,qq微博使用qq授權)
6. Android友盟推送集成
友盟官方文檔: https://developer.umeng.com/docs/67966/detail/153908
第一次認真集成推送,碰到了一些問題,記錄一下。
首先講一下實現原理,我們用的是友盟。Android比iOS要麻煩很多。
友盟集成是需要後端配合的,具體就是後端調用友盟的介面,向友盟推送一條消息,然後友盟再向在他們平台注冊過的app發送一條消息,我們要做的就是把接收到的消息展示出來。
需求:用戶要能在各個時候都能收到我們APP的推送,並且能對應打開不同的界面
解決方法:集成友盟,但是Android只簡單集成友盟是不行的,在APP被殺死以後,就接收不到通知了,所以需要額外集成廠商通道。另一個和iOS不一樣的就是,iOS在打開當前APP的時候,可以收到橫幅推送,但是Android需要自己做。
什麼是廠商通道:
由於國內手機廠商過多地使用應用保活方案實現消息推送功能,因此導致手機耗電加快、卡頓。國內部分手機廠商發現了這一問題,自己推出了消息推送服務。這些手機廠商通過進程管理,殺死後台進程,並提供消息推送能力,讓消息通過手機廠商官方推送通道下發到應用程序中。這類典型的手機廠商有小米、華為等。
大致分為兩部分:
正常推送集成。
五大廠商通道集成。
詳見友盟官方文檔: https://developer.umeng.com/docs/67966/detail/153908
點擊推送信息以後的處理,收到推送的時候的回調
UmengNotificationClickHandler notificationClickHandler =new UmengNotificationClickHandler() {
@Override
public void dealWithCustomAction(Context context, UMessage msg) {
//點擊推送通知以後的處理
Log.i(TAG,"notificationClickHandler "+msg);
}
};
UmengMessageHandler messageHandler =new UmengMessageHandler() {
@Override
public void dealWithCustomMessage(final Context context, final UMessage msg) {
Log.i(TAG,"message "+msg);
}
@Override
public NotificationgetNotification(Context context, UMessage uMessage) {
//手機收到推送的時候的回調
Log.i(TAG,"message ");
//返回默認構造
return super.getNotification(context, uMessage);
}
};
mPushAgent.setNotificationClickHandler(notificationClickHandler);
mPushAgent.setMessageHandler(messageHandler);
設置最多能看到的推送條數
mPushAgent.setDisplayNotificationNumber(3);
如果需求中需要打開APP中某個界面,責需要觀察 "after_open"欄位,默認是 "go_app",需要服務端同學配合
{
"msg_id": "uu481201399440513912",
"display_type": "notification",
"alias": "",
"random_min": 0,
"body": {
"title": "測試自定義參數",
"ticker": "測試自定義參數",
"text": "無",
"after_open": "go_app",
"url": "",
"activity": "",
"custom": "",
"play_vibrate": "true",
"play_sound": "true",
"play_lights": "true"
},
"extra": {
"key1": "value1",
"key2": "value2"
}
}
成功以後可以看log
主要看after_open,默認是打開app
友盟官方常見問題: https://developer.umeng.com/docs/67966/cate/66637
1.集成以後收不到推送
(1) mPushAgent.register()要放在application中調用,放在別的地方不起作用
(2) 檢查so文件有沒有放錯地方
(3) 打開日誌提示,仔細看提示:UMConfigure.setLogEnabled(true)
2.java.lang.ClassNotFoundException: com.ut.mini.UTAnalytics
盡量更新到最新版本的引用,友盟開發說這個只是提示,不用太在意....
3.殺死進程以後收不到推送
解決方法:集成各個廠商通道
iOS的小夥伴集成以後,就算殺死APP也可以收到推送,為啥Android不可以,傷感,看了文檔才知道,我們要集成廠商通道,
4.集成以後收不到推送,顯示送達卻沒有彈出通知
manifest裡面的package最好與build.gradle中的applicationId不一 致, 因為我們項目有兩個applicationId,所以會出現這種情況
需調用setResourcePackageName設置資源文件包名