参考文章
魅族推送版本: com.meizu.flyme.internet:push-internal:4.0.2
魅族手机版本:Flyme 6.3.5.0A
android版本:5.1
在App被杀死的情况下,华为、小米 都可以通过在后台设置IntentURI,收到推送通知,点击后就可以打开指定APP页面,但是在魅族就不行,后面我发现魅族要的是URI,不是IntentURI
IntentURI结构
intent://com.test.mall/intentparse?#Intent;scheme=wjPush;launchFlags=0x14000000;S.type=goods;S.jsonString=%7B%22goods_id%22%3A111%7D;end
如果采用IntengURI魅族错误提示信息如下
E/AbstractMessageHandler: Click message StartActivity error No Activity found to handle Intent { act=android.intent.action.VIEW dat=intent://com.test.mall/intentparse? flg=0x10000000 (has extras) }
我尝试将IntentURI结构采用如下方式打开,是可行的
String intentString = "intent://com.test.mall/intentparse?#Intent;scheme=wjPush;launchFlags=0x14000000;S.type=goods;S.jsonString=%7B%22goods_id%22%3A111%7D;end";
Intent intent = Intent.parseUri(intentString,0);
startActivity(intent);
后面我还发现,点击了魅族消息通知,onNotificationClicked 事件将会被回调,所以我目前的解决办法是
/**
* 当用户点击通知栏消息后会在此方法回调
*
* @param context
* @param mzPushMessage
*/
@Override
public void onNotificationClicked(Context context, MzPushMessage mzPushMessage) {
if (mzPushMessage != null) {
String intentString = mzPushMessage.getSelfDefineContentString();
if (!TextUtils.isEmpty(intentString)) {
try {
Intent intent = Intent.parseUri(intentString,0);
context.startActivity(intent);
} catch (URISyntaxException e) {
e.printStackTrace();
}
}
}
}
希望魅族可以解决一下通过IntentURI点击可以跳转的方式
第二种方案
所有的推送都采用URI方式,都是可以进行调用到的,就可以不用理会魅族的onNotificationClicked方法
//不带参数 wjPush://com.test.mall/intentparse
//带参数 wjPush://com.test.mall/intentparse?type=goods&jsonString=%7B%22goods_id%22%3A131%7D
//带参数 {scheme}://{host}{path}?{参数}
//接收参数
Uri uri = intent.getData();
if (uri != null) {
String type = uri.getQueryParameter("type");
String jsonObjectString = uri.getQueryParameter("jsonString");
}
<activity
android:name="com.test.mall.IntentParseActivity"
android:exported="true"
android:launchMode="singleTask"
android:screenOrientation="portrait"
android:theme="@style/NoFullScreen.BackSplash.NoTitleBar">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<!--表示该页面可以被隐式调用,必须加上该项-->
<category android:name="android.intent.category.DEFAULT" />
<!--协议部分-->
<data
android:host="com.test.mall"
android:path="/intentparse"
android:scheme="wjPush" />
</intent-filter>
</activity>
网友评论